WechatController.php 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. <?php
  2. namespace app\api\controller\wechat;
  3. use app\models\user\User;
  4. use app\models\user\UserToken;
  5. use app\models\user\WechatUser;
  6. use app\Request;
  7. use crmeb\services\WechatService;
  8. use think\facade\Cookie;
  9. /**
  10. * 微信公众号
  11. * Class WechatController
  12. * @package app\api\controller\wechat
  13. */
  14. class WechatController
  15. {
  16. /**
  17. * 微信公众号服务
  18. * @return \think\Response
  19. */
  20. public function serve()
  21. {
  22. return WechatService::serve();
  23. }
  24. /**
  25. * 支付异步回调
  26. */
  27. public function notify()
  28. {
  29. WechatService::handleNotify();
  30. }
  31. /**
  32. * 公众号权限配置信息获取
  33. * @param Request $request
  34. * @return mixed
  35. */
  36. public function config(Request $request)
  37. {
  38. return app('json')->success(json_decode(WechatService::jsSdk($request->get('url')), true));
  39. }
  40. /**
  41. * 公众号授权登陆
  42. * @param Request $request
  43. * @return mixed
  44. * @throws \think\db\exception\DataNotFoundException
  45. * @throws \think\db\exception\ModelNotFoundException
  46. * @throws \think\exception\DbException
  47. */
  48. public function auth(Request $request)
  49. {
  50. $spreadId = intval($request->param('spread'));
  51. $login_type = $request->param('login_type','');
  52. try {
  53. $wechatInfo = WechatService::oauthService()->user()->getOriginal();
  54. } catch (\Exception $e) {
  55. return app('json')->fail('授权失败');
  56. }
  57. if (!isset($wechatInfo['nickname'])) {
  58. $wechatInfo = WechatService::getUserInfo($wechatInfo['openid']);
  59. if (!$wechatInfo['subscribe'] && !isset($wechatInfo['nickname']))
  60. exit(WechatService::oauthService()->scopes(['snsapi_userinfo'])
  61. ->redirect($this->request->url(true))->send());
  62. if (isset($wechatInfo['tagid_list']))
  63. $wechatInfo['tagid_list'] = implode(',', $wechatInfo['tagid_list']);
  64. } else {
  65. if (isset($wechatInfo['privilege'])) unset($wechatInfo['privilege']);
  66. if (!WechatUser::be(['openid' => $wechatInfo['openid']]))
  67. $wechatInfo['subscribe'] = 0;
  68. }
  69. $openid = $wechatInfo['openid'];
  70. event('WechatOauthAfter', [$openid, $wechatInfo, $spreadId, $login_type]);
  71. $user = User::where('uid', WechatUser::openidToUid($openid, 'openid'))->find();
  72. if (!$user)
  73. return app('json')->fail('获取用户信息失败');
  74. if($user->login_type == 'h5' && ($h5UserInfo = User::where(['account'=>$user->phone,'phone'=>$user->phone,'user_type'=>'h5'])->find()))
  75. $token = UserToken::createToken($h5UserInfo, 'wechat');
  76. else
  77. $token = UserToken::createToken($user, 'wechat');
  78. // 设置推广关系
  79. User::setSpread(intval($spreadId), $user->uid);
  80. if ($token) {
  81. event('UserLogin', [$user, $token]);
  82. return app('json')->success('登录成功', ['token' => $token->token, 'expires_time' => $token->expires_time]);
  83. } else
  84. return app('json')->fail('登录失败');
  85. }
  86. }