WechatLogin.php 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. <?php
  2. namespace common\traits;
  3. use Yii;
  4. use yii\helpers\Json;
  5. use common\enums\AccessTokenGroupEnum;
  6. /**
  7. * WechatLogin
  8. *
  9. * Trait WechatLogin
  10. * @package common\traits
  11. */
  12. trait WechatLogin
  13. {
  14. /**
  15. * 是否获取微信用户信息
  16. *
  17. * @var bool
  18. */
  19. protected $openGetWechatUser = true;
  20. /**
  21. * 用户id
  22. *
  23. * @var string
  24. */
  25. protected $openid;
  26. /**
  27. * @throws \yii\base\InvalidConfigException
  28. * @throws \Exception
  29. */
  30. protected function login()
  31. {
  32. /** 检测到微信进入自动获取用户信息 **/
  33. if ($this->openGetWechatUser && Yii::$app->wechat->isWechat && !Yii::$app->wechat->isAuthorized()) {
  34. return Yii::$app->wechat->authorizeRequired()->send();
  35. }
  36. /** 当前进入微信用户信息 **/
  37. Yii::$app->params['wechatMember'] = Json::decode(Yii::$app->session->get('wechatUser'));
  38. /** 非微信网页打开时候开启模拟数据 **/
  39. if (empty(Yii::$app->params['wechatMember']) && Yii::$app->params['simulateUser']['switch'] == true) {
  40. Yii::$app->params['wechatMember'] = Yii::$app->params['simulateUser']['userInfo'];
  41. }
  42. $this->openid = Yii::$app->params['wechatMember']['id'];
  43. // 如果是静默登录则不写入数据库
  44. if (in_array('snsapi_base', Yii::$app->params['wechatConfig']['oauth']['scopes'])) {
  45. return false;
  46. }
  47. // 插入微信关联表
  48. if (!($memberAuthInfo = Yii::$app->services->memberAuth->findOauthClient(AccessTokenGroupEnum::WECHAT_MP, $this->openid))) {
  49. $original = Yii::$app->params['wechatMember']['raw'];
  50. Yii::$app->services->memberAuth->create([
  51. 'oauth_client' => AccessTokenGroupEnum::WECHAT_MP,
  52. 'oauth_client_user_id' => $original['openid'],
  53. 'gender' => $original['sex'],
  54. 'nickname' => $original['nickname'],
  55. 'head_portrait' => $original['headimgurl'],
  56. 'country' => $original['country'],
  57. 'province' => $original['province'],
  58. 'city' => $original['city'],
  59. 'language' => $original['language'],
  60. ]);
  61. unset($original, $memberAuthInfo, $memberAuth);
  62. }
  63. }
  64. }
粤ICP备19079148号