BindingWechatController.php 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. <?php
  2. namespace html5\controllers;
  3. use Yii;
  4. use yii\helpers\Json;
  5. use common\enums\AccessTokenGroupEnum;
  6. use common\helpers\HashidsHelper;
  7. use yii\web\UnprocessableEntityHttpException;
  8. /**
  9. * Class BindingWechatController
  10. * @package html5\controllers
  11. * @author jianyan74 <751393839@qq.com>
  12. */
  13. class BindingWechatController extends BaseController
  14. {
  15. /**
  16. * @param \yii\base\Action $action
  17. * @return bool|void
  18. * @throws \yii\base\InvalidConfigException
  19. * @throws \yii\web\BadRequestHttpException
  20. * @throws \yii\web\UnauthorizedHttpException
  21. */
  22. public function beforeAction($action)
  23. {
  24. /** 检测到微信进入自动获取用户信息 **/
  25. if (Yii::$app->wechat->isWechat && !Yii::$app->wechat->isAuthorized()) {
  26. return Yii::$app->wechat->authorizeRequired()->send();
  27. }
  28. /** 当前进入微信用户信息 **/
  29. Yii::$app->params['wechatMember'] = Json::decode(Yii::$app->session->get('wechatUser'));
  30. /** 非微信网页打开时候开启模拟数据 **/
  31. if (empty(Yii::$app->params['wechatMember']) && Yii::$app->params['simulateUser']['switch'] == true) {
  32. Yii::$app->params['wechatMember'] = Yii::$app->params['simulateUser']['userInfo'];
  33. }
  34. return parent::beforeAction($action);
  35. }
  36. /**
  37. * @return string
  38. */
  39. public function actionIndex($uuid)
  40. {
  41. $member_id = HashidsHelper::decode($uuid);
  42. if (!Yii::$app->wechat->isWechat) {
  43. throw new UnprocessableEntityHttpException('请用微信打开');
  44. }
  45. if (empty($member = Yii::$app->services->member->findById($member_id))) {
  46. throw new UnprocessableEntityHttpException('找不到用户信息');
  47. }
  48. $original = Yii::$app->params['wechatMember']['original'];
  49. $auth = Yii::$app->services->memberAuth->findByMemberIdOauthClient(AccessTokenGroupEnum::WECHAT_MP, $member_id);
  50. $message = '请先解绑再绑定';
  51. if (empty($auth)) {
  52. Yii::$app->services->backendMemberAuth->create([
  53. 'member_id' => $member_id,
  54. 'oauth_client' => AccessTokenGroupEnum::WECHAT_MP,
  55. 'oauth_client_user_id' => $original['openid'],
  56. 'gender' => $original['sex'],
  57. 'nickname' => $original['nickname'],
  58. 'head_portrait' => $original['headimgurl'],
  59. 'country' => $original['country'],
  60. 'province' => $original['province'],
  61. 'city' => $original['city'],
  62. 'language' => $original['language'],
  63. ]);
  64. $message = '绑定成功';
  65. }
  66. return $this->render($this->action->id, [
  67. 'message' => $message,
  68. ]);
  69. }
  70. }
粤ICP备19079148号