WechatProgram.php 3.2 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\widget\WechatMp;
  10. use app\common\model\MemberMiniappToken;
  11. use app\common\model\MemberMiniapp;
  12. use EasyWeChat\Factory; //微信公众号
  13. use encrypter\Encrypter;
  14. class WechatProgram{
  15. /**
  16. * #######################################
  17. * 判断小程序是独立应用还是平台应用
  18. * @param integer $id小程序服务ID
  19. * @return boolean
  20. */
  21. public function isTypes(int $id){
  22. $program = MemberMiniapp::where(['id' => $id])->find();
  23. return empty($program->miniapp->is_openapp) ? self::openMiniProgram($id,$program) : self::miniProgram($id,$program);
  24. }
  25. /**
  26. * 微信小程序配置(独立应用)
  27. * @param integer $id 来自用户应用ID
  28. * @return void
  29. */
  30. public function miniProgram(int $id,$miniapp = []){
  31. if (empty($miniapp)) {
  32. $miniapp = MemberMiniapp::where(['id' => $id])->field('miniapp_appid,miniapp_secret')->find();
  33. }
  34. $config = [
  35. 'app_id' => $miniapp['miniapp_appid'],
  36. 'secret' => $miniapp['miniapp_secret'],
  37. ];
  38. return Factory::miniProgram($config);;
  39. }
  40. /**
  41. * 微信小程序配置(开放平台)
  42. * @param integer $id 来自用户应用ID
  43. * @param array $miniapp //当前小程序配置
  44. * @return void
  45. */
  46. public function openMiniProgram(int $id,$miniapp = []){
  47. if(empty($miniapp)){
  48. $miniapp = MemberMiniapp::where(['id' => $id])->field('miniapp_appid')->find();
  49. if(!$miniapp || empty($miniapp['miniapp_appid'])){
  50. return false;
  51. }
  52. }
  53. if(empty($miniapp['miniapp_appid'])){
  54. return false;
  55. }
  56. $refreshToken = MemberMiniappToken::refreshToken($id,$miniapp['miniapp_appid']);
  57. if(!$refreshToken){
  58. return false;
  59. }
  60. $wechat = new WechatMp();
  61. return $wechat->openConfig()->miniProgram($miniapp['miniapp_appid'],$refreshToken['refreshToken']);
  62. }
  63. /**
  64. * #######################################
  65. * 生成小程序用户认证的token
  66. * @param $openid
  67. * @return string
  68. */
  69. public function createToken(array $param){
  70. if(empty($param['miniapp_uid']) || empty($param['miniapp_id']) || empty($param['uid'])){
  71. return false;
  72. }
  73. $data['miniapp_uid'] = $param['miniapp_uid'];
  74. $data['miniapp_id'] = $param['miniapp_id'];
  75. $data['uid'] = $param['uid'];
  76. return Encrypter::cpEncode(base64_encode(json_encode($data)),$param['service_id']);
  77. }
  78. /**
  79. * 验证用户认证的token
  80. * @param $openid
  81. * @return string
  82. */
  83. public function checkToken(array $param){
  84. if(empty($param['service_id']) || empty($param['token'])){
  85. return false;
  86. }
  87. $token_code = Encrypter::cpDecode($param['token'],$param['service_id']);
  88. $token = json_decode(base64_decode($token_code),true);
  89. return empty($token) ? false : $token;
  90. }
  91. }