AuthController.php 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. <?php
  2. namespace addons\TinyShop\api\modules\v1\controllers\member;
  3. use Yii;
  4. use common\enums\StatusEnum;
  5. use common\helpers\ResultHelper;
  6. use common\models\member\Auth;
  7. use api\modules\v1\forms\MiniProgramLoginForm;
  8. use addons\TinyShop\common\enums\AccessTokenGroupEnum;
  9. /**
  10. * Class AuthController
  11. * @package addons\TinyShop\api\modules\v1\controllers\member
  12. * @author jianyan74 <751393839@qq.com>
  13. */
  14. class AuthController extends \api\modules\v1\controllers\member\AuthController
  15. {
  16. /**
  17. * 不用进行登录验证的方法
  18. * 例如: ['index', 'update', 'create', 'view', 'delete']
  19. * 默认全部需要验证
  20. *
  21. * @var array
  22. */
  23. protected $authOptional = ['binding-equipment'];
  24. /**
  25. * 微信公众号授权
  26. *
  27. * @return array|mixed
  28. * @throws \yii\base\Exception
  29. */
  30. public function actionWechatMp()
  31. {
  32. if (empty($code = Yii::$app->request->post('code'))) {
  33. return ResultHelper::json(422, '请传递 code');
  34. }
  35. $user = Yii::$app->wechat->app->oauth->userFromCode($code);
  36. // 用户信息
  37. $original = $user->getRaw();
  38. $authModel = new Auth();
  39. $authModel->unionid = $original['unionid'] ?? '';
  40. $authModel->oauth_client = AccessTokenGroupEnum::relevance(AccessTokenGroupEnum::WECHAT_MP);
  41. $authModel->oauth_client_user_id = $user->getId();
  42. $authModel->nickname = $user->getNickname();
  43. $authModel->head_portrait = $user->getAvatar();
  44. $authModel->member_id = Yii::$app->user->identity->member_id;
  45. $authModel->member_type = Yii::$app->user->identity->member_type;
  46. // 查询授权绑定
  47. $auth = Yii::$app->services->memberAuth->findOauthClient($authModel->oauth_client, $authModel->oauth_client_user_id);
  48. if ($auth && $auth->member) {
  49. return ResultHelper::json(422, '已绑定微信小程序,请先解绑');
  50. }
  51. $authModel->save();
  52. return $authModel;
  53. }
  54. /**
  55. * 微信小程序绑定
  56. *
  57. * @return array|mixed
  58. * @throws \EasyWeChat\Kernel\Exceptions\DecryptException
  59. * @throws \yii\base\Exception
  60. * @throws \Exception
  61. */
  62. public function actionWechatMini()
  63. {
  64. $model = new MiniProgramLoginForm();
  65. $model->attributes = Yii::$app->request->post();
  66. if (!$model->validate()) {
  67. return ResultHelper::json(422, $this->getError($model));
  68. }
  69. $user = $model->getUser();
  70. $authModel = new Auth();
  71. $authModel->unionid = $model->getUnionId();
  72. $authModel->oauth_client = AccessTokenGroupEnum::relevance(AccessTokenGroupEnum::WECHAT_MINI);
  73. $authModel->oauth_client_user_id = $model->getOpenid();
  74. $authModel->nickname = $user['nickName'];
  75. $authModel->head_portrait = $user['avatarUrl'];
  76. $authModel->gender = $user['gender'];
  77. $authModel->member_id = Yii::$app->user->identity->member_id;
  78. $authModel->member_type = Yii::$app->user->identity->member_type;
  79. // 查询授权绑定
  80. $auth = Yii::$app->services->memberAuth->findOauthClient($authModel->oauth_client, $authModel->oauth_client_user_id);
  81. if ($auth && $auth->member) {
  82. return ResultHelper::json(422, '已绑定微信小程序,请先解绑');
  83. }
  84. $authModel->save();
  85. return $authModel;
  86. }
  87. /**
  88. * 绑定设备进行 app 推送
  89. */
  90. public function actionBindingEquipment()
  91. {
  92. $oauthClient = Yii::$app->request->post('oauth_client');
  93. $oauthClientUserId = Yii::$app->request->post('oauth_client_user_id');
  94. $token = Yii::$app->request->post('token');
  95. if (!in_array($oauthClient, ['ios', 'android'])) {
  96. return false;
  97. }
  98. if (!$token || !($apiAccessToken = Yii::$app->services->apiAccessToken->findByAccessToken($token))) {
  99. return false;
  100. }
  101. /** @var Auth $model */
  102. if (!($model = Yii::$app->services->memberAuth->findOauthClientByApp($oauthClient, $oauthClientUserId))) {
  103. $model = new $this->modelClass();
  104. $model = $model->loadDefaultValues();
  105. $model->attributes = Yii::$app->request->post();
  106. }
  107. $model->oauth_client = $oauthClient;
  108. $model->oauth_client_user_id = $oauthClientUserId;
  109. $model->member_id = $apiAccessToken->member_id;
  110. $model->status = StatusEnum::DISABLED;
  111. if (!$model->save()) {
  112. return ResultHelper::json(422, $this->getError($model));
  113. }
  114. return $model;
  115. }
  116. }
粤ICP备19079148号