WechatController.php 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  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. class WechatController
  10. {
  11. public function serve()
  12. {
  13. return WechatService::serve();
  14. }
  15. public function notify()
  16. {
  17. WechatService::handleNotify();
  18. }
  19. public function config(Request $request)
  20. {
  21. return app('json')->success(json_decode(WechatService::jsSdk($request->get('url')), true));
  22. }
  23. public function auth(Request $request)
  24. {
  25. $spreadId = intval($request->param('spread'));
  26. $login_type = $request->param('login_type','');
  27. try {
  28. $wechatInfo = WechatService::oauthService()->user()->getOriginal();
  29. } catch (\Exception $e) {
  30. return app('json')->fail('授权失败');
  31. }
  32. if (!isset($wechatInfo['nickname'])) {
  33. $wechatInfo = WechatService::getUserInfo($wechatInfo['openid']);
  34. if (!$wechatInfo['subscribe'] && !isset($wechatInfo['nickname']))
  35. exit(WechatService::oauthService()->scopes(['snsapi_userinfo'])
  36. ->redirect($this->request->url(true))->send());
  37. if (isset($wechatInfo['tagid_list']))
  38. $wechatInfo['tagid_list'] = implode(',', $wechatInfo['tagid_list']);
  39. } else {
  40. if (isset($wechatInfo['privilege'])) unset($wechatInfo['privilege']);
  41. if (!WechatUser::be(['openid' => $wechatInfo['openid']]))
  42. $wechatInfo['subscribe'] = 0;
  43. }
  44. $openid = $wechatInfo['openid'];
  45. event('WechatOauthAfter', [$openid, $wechatInfo, $spreadId, $login_type]);
  46. $user = User::where('uid', WechatUser::openidToUid($openid, 'openid'))->find();
  47. if (!$user)
  48. return app('json')->fail('获取用户信息失败');
  49. if($user->login_type == 'h5' && ($h5UserInfo = User::where(['account'=>$user->phone,'phone'=>$user->phone,'user_type'=>'h5'])->find()))
  50. $token = UserToken::createToken($h5UserInfo, 'wechat');
  51. else
  52. $token = UserToken::createToken($user, 'wechat');
  53. // 设置推广关系
  54. User::setSpread(intval($spreadId), $user->uid);
  55. if ($token) {
  56. event('UserLogin', [$user, $token]);
  57. return app('json')->success('登录成功', ['token' => $token->token, 'expires_time' => $token->expires_time]);
  58. } else
  59. return app('json')->fail('登录失败');
  60. }
  61. }