WechatMp.php 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. <?php
  2. /**
  3. * @copyright Copyright (c) 2017 https://www.sapixx.com All rights reserved.
  4. * @license Licensed (http://www.apache.org/licenses/LICENSE-2.0).
  5. * @author pillar<ltmn@qq.com>
  6. * 微信公众号统一处理
  7. */
  8. namespace app\common\widget;
  9. use app\common\model\MemberMiniappToken;
  10. use app\common\model\MemberMiniapp;
  11. use app\common\model\ConfigApis;
  12. use EasyWeChat\Factory; //微信公众号
  13. use Exception;
  14. class WechatMp{
  15. /**
  16. * 微信开放平台配置 https://open.weixin.qq.com
  17. * @return void
  18. */
  19. public function openConfig(){
  20. $info = ConfigApis::config('wechatopen');
  21. $config = [
  22. 'app_id' => $info['app_id'],
  23. 'secret' => $info['secret'],
  24. 'token' => $info['token'],
  25. 'aes_key' => $info['aes_key']
  26. ];
  27. return Factory::openPlatform($config);
  28. }
  29. /**
  30. * #######################################
  31. * 编译生成JSSDK配置
  32. * @param array $jsApiList
  33. * @return json
  34. */
  35. public function jsApiList(int $app,$jsApiList = []){
  36. if(empty($jsApiList)){
  37. $jsApiList = ["checkJsApi","invokeMiniProgramAPI","launchMiniProgram","hideMenuItems",'showMenuItems','hideAllNonBaseMenuItem','showAllNonBaseMenuItem','scanQRCode',"onMenuShareTimeline","onMenuShareAppMessage","closeWindow","getNetworkType","previewImage","onVoiceRecordEnd","onVoicePlayEnd",'chooseWXPay','chooseCard','openCard','addCard','openAddress','chooseImage','previewImage','uploadImage','downloadImage','getLocalImgData'];
  38. }
  39. return self::isTypes($app)->jssdk->buildConfig($jsApiList,false);
  40. }
  41. /**
  42. * #######################################
  43. * 判断小程序是独立应用还是平台应用
  44. * @param integer $id小程序服务ID
  45. * @return boolean
  46. */
  47. public function isTypes(int $id){
  48. try {
  49. $program = MemberMiniapp::where(['id' => $id])->find();
  50. return empty($program->miniapp->is_openapp) ? self::openOfficial($id,$program) : self::official($id,$program);
  51. }catch (Exception $e) {
  52. return;
  53. }
  54. }
  55. /**
  56. * 微信基础配置
  57. * @param integer $id = 0 是读取后台系统的公众号配置
  58. */
  59. public function official(int $id = 0,$miniapp = []){
  60. $config = [];
  61. if ($id) {
  62. if (empty($miniapp)) {
  63. $miniapp = MemberMiniapp::where(['id' => $id])->field('mp_appid,mp_secret')->find();
  64. }
  65. $config = ['app_id' => $miniapp['mp_appid'],'secret' => $miniapp['mp_secret']];
  66. }else{
  67. $miniapp = ConfigApis::config('wechataccount');
  68. $config = ['app_id' => $miniapp['app_id'],'secret' => $miniapp['secret'],'token' => $miniapp['token'],'aes_key' => $miniapp['aes_key']];
  69. }
  70. if(empty($config['app_id']) || empty($config['secret'])){
  71. return false;
  72. }
  73. return Factory::officialAccount($config);
  74. }
  75. /**
  76. * 微信开放平台配置
  77. * @return void
  78. */
  79. public function openOfficial(int $id,$miniapp = []){
  80. if(empty($miniapp)){
  81. $miniapp = MemberMiniapp::where(['id' => $id])->field('mp_appid')->find();
  82. }
  83. if(empty($miniapp['mp_appid'])){
  84. return false;
  85. }
  86. $refreshToken = MemberMiniappToken::refreshToken($id,$miniapp['mp_appid']);
  87. if(empty($refreshToken)){
  88. return false;
  89. }
  90. return self::openConfig()->officialAccount($miniapp['mp_appid'],$refreshToken['refreshToken']);
  91. }
  92. }