Useropen.php 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. <?php
  2. namespace app\api\controller\user;
  3. use app\api\controller\Controller;
  4. use app\api\model\order\Order as OrderModel;
  5. use app\api\model\settings\Setting as SettingModel;
  6. use app\api\model\user\UserOpen as UserOpenModel;
  7. use app\api\model\user\UserMp as UserMpModel;
  8. use app\common\enum\order\OrderPayTypeEnum;
  9. use app\common\library\easywechat\AppMp;
  10. use app\common\model\app\AppOpen as AppOpenModel;
  11. use app\common\model\user\Sms as SmsModel;
  12. /**
  13. * app用户管理
  14. */
  15. class Useropen extends Controller
  16. {
  17. /**
  18. * 用户自动登录
  19. */
  20. public function login($code, $referee_id = 0)
  21. {
  22. $wxConfig = AppOpenModel::getAppOpenCache($this->app_id);
  23. $appId = $wxConfig['openapp_id'];
  24. $appSecret = $wxConfig['openapp_secret'];
  25. $token_url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid=' . $appId . '&secret=' . $appSecret . '&code=' . $code . '&grant_type=authorization_code';
  26. $stream_opts = [
  27. "ssl" => [
  28. "verify_peer" => false,
  29. "verify_peer_name" => false,
  30. ]
  31. ];
  32. //获取token,为了获取access_token 如果没有就弹出错误
  33. $token = json_decode(file_get_contents($token_url, false, stream_context_create($stream_opts)));
  34. if (isset($token->errcode)) {
  35. return $this->renderError($token->errmsg);
  36. }
  37. $access_token_url = 'https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=' . $appId . '&grant_type=refresh_token&refresh_token=' . $token->refresh_token;
  38. //获取access_token ,为了获取微信的个人信息,如果没有就弹出错误
  39. $access_token = json_decode(file_get_contents($access_token_url, false, stream_context_create($stream_opts)));
  40. if (isset($access_token->errcode)) {
  41. return $this->renderError($access_token->errmsg);
  42. }
  43. $user_info_url = 'https://api.weixin.qq.com/sns/userinfo?access_token=' . $access_token->access_token . '&openid=' . $access_token->openid . '&lang=zh_CN';
  44. //获取用户信息
  45. $user_info = json_decode(file_get_contents($user_info_url, false, stream_context_create($stream_opts)));
  46. if (isset($user_info->errcode)) {
  47. log_write($user_info->errcode);
  48. log_write($user_info->errmsg);
  49. return $this->renderError($user_info->errmsg);
  50. }
  51. $model = new UserOpenModel;
  52. $user_id = $model->login((array)$user_info, $referee_id);
  53. return $this->renderSuccess('', [
  54. 'user_id' => $user_id,
  55. 'token' => $model->getToken()
  56. ]);
  57. }
  58. public function payWx($order_id)
  59. {
  60. $user = $this->getUser();
  61. // 订单详情
  62. $model = OrderModel::getUserOrderDetail($order_id, $user['user_id']);
  63. // 构建支付请求
  64. $payment = OrderModel::onOrderPayment($user, [$model], OrderPayTypeEnum::WECHAT, 'payApp');
  65. return $this->renderSuccess('', [
  66. 'order' => $model, // 订单详情
  67. 'payment' => $payment
  68. ]);
  69. }
  70. public function invite($referee_id = '')
  71. {
  72. $app = AppMp::getApp($this->app_id);
  73. $redirect_uri = base_url() . "index.php/api/user.useropen/invite_callback?app_id={$this->app_id}&referee_id={$referee_id}";
  74. $app->oauth->scopes(['snsapi_userinfo'])->redirect($redirect_uri)->send();
  75. }
  76. /**
  77. * 用户自动登录
  78. */
  79. public function invite_callback()
  80. {
  81. $app = AppMp::getApp($this->app_id);
  82. $oauth = $app->oauth;
  83. // 获取 OAuth 授权结果用户信息
  84. $userInfo = $oauth->user();
  85. // 绑定关系,保存数据库
  86. $model = new UserMpModel;
  87. $referee_id = $this->request->param('referee_id');
  88. $model->login($userInfo, $referee_id);
  89. //跳转到app下载页
  90. $appshare = SettingModel::getItem('appshare');
  91. $down_url = $appshare['down_url'];
  92. return redirect($down_url);
  93. }
  94. /**
  95. * 手机号码登录
  96. */
  97. public function phonelogin()
  98. {
  99. $data = $this->request->post();
  100. $model = new UserOpenModel;
  101. $user_id = $model->phoneLogin($data);
  102. if ($user_id) {
  103. return $this->renderSuccess('', [
  104. 'user_id' => $user_id,
  105. 'token' => $model->getToken()
  106. ]);
  107. }
  108. return $this->renderError($model->getError() ?: '登录失败');
  109. }
  110. /**
  111. * 短信登录
  112. */
  113. public function smslogin()
  114. {
  115. $data = $this->request->post();
  116. $model = new UserOpenModel;
  117. $user_id = $model->smslogin($data);
  118. if ($user_id) {
  119. return $this->renderSuccess('', [
  120. 'user_id' => $user_id,
  121. 'token' => $model->getToken()
  122. ]);
  123. }
  124. return $this->renderError($model->getError() ?: '登录失败');
  125. }
  126. /**
  127. * 忘记密码
  128. */
  129. public function resetpassword()
  130. {
  131. $data = $this->request->post();
  132. $model = new UserOpenModel;
  133. if ($model->resetpassword($data)) {
  134. return $this->renderSuccess('设置成功');
  135. }
  136. return $this->renderError($model->getError() ?: '设置失败');
  137. }
  138. /**
  139. * 手机号码注册
  140. */
  141. public function register()
  142. {
  143. $data = $this->request->post();
  144. $model = new UserOpenModel;
  145. if ($model->phoneRegister($data)) {
  146. return $this->renderSuccess('注册成功');
  147. }
  148. return $this->renderError($model->getError() ?: '注册失败');
  149. }
  150. /**
  151. * 发送短信
  152. */
  153. public function sendCode($mobile, $type)
  154. {
  155. $model = new SmsModel();
  156. if ($model->send($mobile, $type)) {
  157. return $this->renderSuccess();
  158. }
  159. return $this->renderError($model->getError() ?: '发送失败');
  160. }
  161. }