Useropen.php 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  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($referee_id = '', $code)
  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. log_write($token->errcode);
  36. log_write($token->errmsg);
  37. return $this->renderError($token->errmsg);
  38. }
  39. $access_token_url = 'https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=' . $appId . '&grant_type=refresh_token&refresh_token=' . $token->refresh_token;
  40. //获取access_token ,为了获取微信的个人信息,如果没有就弹出错误
  41. $access_token = json_decode(file_get_contents($access_token_url, false, stream_context_create($stream_opts)));
  42. if (isset($access_token->errcode)) {
  43. return $this->renderError($access_token->errmsg);
  44. }
  45. $user_info_url = 'https://api.weixin.qq.com/sns/userinfo?access_token=' . $access_token->access_token . '&openid=' . $access_token->openid . '&lang=zh_CN';
  46. //获取用户信息
  47. $user_info = json_decode(file_get_contents($user_info_url, false, stream_context_create($stream_opts)));
  48. if (isset($user_info->errcode)) {
  49. log_write($user_info->errcode);
  50. log_write($user_info->errmsg);
  51. return $this->renderError($user_info->errmsg);
  52. }
  53. $model = new UserOpenModel;
  54. $user_id = $model->login((array)$user_info, $referee_id);
  55. return $this->renderSuccess('',[
  56. 'user_id' => $user_id,
  57. 'token' => $model->getToken()
  58. ]);
  59. }
  60. public function payWx($order_id){
  61. $user = $this->getUser();
  62. // 订单详情
  63. $model = OrderModel::getUserOrderDetail($order_id, $user['user_id']);
  64. // 构建支付请求
  65. $payment = OrderModel::onOrderPayment($user, [$model], OrderPayTypeEnum::WECHAT, 'payApp');
  66. return $this->renderSuccess('',[
  67. 'order' => $model, // 订单详情
  68. 'payment' => $payment
  69. ]);
  70. }
  71. public function invite($referee_id = ''){
  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. * 获取登录logo
  96. */
  97. public function logo(){
  98. // 当前app信息
  99. $logo = AppOpenModel::detail()['logo'];
  100. return $this->renderSuccess('', compact('logo'));
  101. }
  102. /**
  103. * 手机号码登录
  104. */
  105. public function phonelogin(){
  106. $data = $this->request->post();
  107. $model = new UserOpenModel;
  108. $user_id = $model->phoneLogin($data);
  109. if($user_id){
  110. return $this->renderSuccess('',[
  111. 'user_id' => $user_id,
  112. 'token' => $model->getToken()
  113. ]);
  114. }
  115. return $this->renderError($model->getError() ?:'登录失败');
  116. }
  117. /**
  118. * 短信登录
  119. */
  120. public function smslogin(){
  121. $data = $this->request->post();
  122. $model = new UserOpenModel;
  123. $user_id = $model->smslogin($data);
  124. if($user_id){
  125. return $this->renderSuccess('',[
  126. 'user_id' => $user_id,
  127. 'token' => $model->getToken()
  128. ]);
  129. }
  130. return $this->renderError($model->getError() ?:'登录失败');
  131. }
  132. /**
  133. * 忘记密码
  134. */
  135. public function resetpassword(){
  136. $data = $this->request->post();
  137. $model = new UserOpenModel;
  138. if($model->resetpassword($data)){
  139. return $this->renderSuccess('设置成功');
  140. }
  141. return $this->renderError($model->getError() ?:'设置失败');
  142. }
  143. /**
  144. * 手机号码注册
  145. */
  146. public function register(){
  147. $data = $this->request->post();
  148. $model = new UserOpenModel;
  149. if($model->phoneRegister($data)){
  150. return $this->renderSuccess('注册成功');
  151. }
  152. return $this->renderError($model->getError() ?:'注册失败');
  153. }
  154. /**
  155. * 发送短信
  156. */
  157. public function sendCode($mobile,$type)
  158. {
  159. $model = new SmsModel();
  160. if($model->send($mobile, $type)){
  161. return $this->renderSuccess();
  162. }
  163. return $this->renderError($model->getError() ?:'发送失败');
  164. }
  165. }