作者 开飞机的舒克

后台修改

@@ -7,7 +7,7 @@ return [ @@ -7,7 +7,7 @@ return [
7 'Is_sift' => '是否为精选', 7 'Is_sift' => '是否为精选',
8 'Is_sift 0' => '否', 8 'Is_sift 0' => '否',
9 'Is_sift 1' => '是', 9 'Is_sift 1' => '是',
10 - 'Score' => '积分', 10 + 'Score' => '可获积分',
11 'Createtime' => '创建时间', 11 'Createtime' => '创建时间',
12 'Updatetime' => '更新时间', 12 'Updatetime' => '更新时间',
13 'Item.title' => '名称' 13 'Item.title' => '名称'
@@ -20,78 +20,111 @@ class User extends Api @@ -20,78 +20,111 @@ class User extends Api
20 protected $noNeedRight = ['*']; 20 protected $noNeedRight = ['*'];
21 21
22 /** 22 /**
  23 + *手机号授权登录
23 * 24 *
24 - * @ApiTitle (小程序登录)  
25 - * @ApiSummary (微信小程序登录) 25 + * @ApiTitle (手机号授权登录)
26 * @ApiMethod (POST) 26 * @ApiMethod (POST)
27 - * @ApiParams (name="code", type="string", required=true, description="code")  
28 - * @ApiParams (name="phone", type="string", required=true, description="phone") 27 + * @ApiRoute (/api/myinfo/login)
  28 + * @ApiParams (name="code", type="string", required=true, description="code-wx.login的code")
  29 + * @ApiParams (name="encryptedData", type="string", required=true, description="encryptedData")
  30 + * @ApiParams (name="iv", type="string", required=true, description="iv")
  31 + * @ApiReturnParams (name="code", type="integer", required=true, sample="0")
  32 + * @ApiReturnParams (name="msg", type="string", required=true, sample="返回成功")
  33 + * @ApiReturn ({
  34 + 'code':'1',
  35 + 'msg':'返回成功'
  36 + 'data':[
  37 + 'id':'用户id'
  38 + 'nickname':'用户昵称'
  39 + 'mobile':'手机号'
  40 + 'avatar':'头像'
  41 + 'token':'token']
  42 + })
29 */ 43 */
30 - public function login()  
31 - {  
32 - $config = Config::get('wxapp');  
33 - $code = $this->request->param('code');  
34 - $phone = $this->request->param('phone');  
35 - if (empty($code)) { 44 + public function login(){
  45 + //接收传递信息
  46 + $config = Config::get('wechat');
  47 + $encryptedData = $this->request->post('encryptedData');
  48 + $iv = $this->request->post('iv');
  49 + $code = $this->request->post('code');
  50 + if(empty($code)){
36 $this->error('参数错误'); 51 $this->error('参数错误');
37 } 52 }
38 $params = [ 53 $params = [
39 - 'appid' => $config['app_id'], //小程序appid  
40 - 'secret' => $config['secret'], //小程序appid的秘钥  
41 - 'js_code' => $code, //前端传来的code 54 + 'appid'=>$config['app_id'], //小程序appid
  55 + 'secret'=>$config['secret'], //小程序appid的秘钥
  56 + 'js_code'=>$code, //前端传来的code
42 'grant_type' => 'authorization_code' //authorization_code — 授权码模式(即先登录获取code,再获取token) 57 'grant_type' => 'authorization_code' //authorization_code — 授权码模式(即先登录获取code,再获取token)
43 ]; 58 ];
44 $result = Http::sendRequest("https://api.weixin.qq.com/sns/jscode2session", $params, 'GET');//接口 59 $result = Http::sendRequest("https://api.weixin.qq.com/sns/jscode2session", $params, 'GET');//接口
45 - if ($result['ret']) {  
46 - $json = json_decode($result['msg'], true); //json_decode()接收一个json格式数据将他变为php变量  
47 - if (isset($json['openid'])) {  
48 - if (isset($phone)) {  
49 - $userId = Db::name('third')->where(['apptype' => 'wxapp', 'openid' => $json['openid']])->value('user_id'); 60 + if($result['ret']){
  61 + $json = json_decode($result['msg'],true); //json_decode()接收一个json格式数据将他变为php变量
  62 + if(isset($json['openid'])){
  63 + $options = [
  64 + 'debug'=>true,
  65 + 'app_id'=>$config['app_id'],
  66 + 'secret'=>$config['secret'],
  67 + 'token'=>$this->auth->getToken(), //获取token
  68 + 'log' => [
  69 + 'level' => 'debug',
  70 + 'file' =>'/tmp/easywechat.log',
  71 + ],
  72 + ];
  73 + $sessionKey = $json['session_key'];
  74 + $app = Factory::miniProgram($options);
  75 + try {
  76 + $phone = $app->encryptor->decryptData($sessionKey,$iv,$encryptedData);
  77 + }catch (\Exception $e){
  78 + $this->error('网络不好,重新操作');
  79 + }
  80 + if (isset($phone['phoneNumber'])){
  81 + $userId = Db::name('third')->where(['apptype'=>'wxapp','openid'=>$json['openid']])->value('user_id');
50 $auth = Auth::instance(); 82 $auth = Auth::instance();
51 $ret = $auth->direct($userId); 83 $ret = $auth->direct($userId);
52 - if ($ret) { //假如登录上后获取信息 84 + if ($ret){ //假如登录上后获取信息
53 $data = $auth->getUserinfo(); 85 $data = $auth->getUserinfo();
54 - $aut = \db('user')->where('id', $userId)->find(); 86 + $aut = \db('user')->where('id',$userId)->find();
55 $data['avatar'] = cdnurl($data['avatar']); //cdnurl第三方存储 87 $data['avatar'] = cdnurl($data['avatar']); //cdnurl第三方存储
56 $data['mobile'] = $aut['mobile']; 88 $data['mobile'] = $aut['mobile'];
57 - $this->success('登录成功', $data);  
58 - } elseif (empty($ret)) { 89 + $this->success('登录成功',$data);
  90 + }elseif(empty($ret)){
59 /*注册一个用户*/ 91 /*注册一个用户*/
60 $data = [ 92 $data = [
61 'nickname' => '微信用户', 93 'nickname' => '微信用户',
62 'username' => '微信用户', 94 'username' => '微信用户',
63 'avatar' => '/assets/img/avatar.png', 95 'avatar' => '/assets/img/avatar.png',
64 'status' => 'normal', 96 'status' => 'normal',
65 - 'mobile' => $phone,  
66 - 'jointime' => time() 97 + 'mobile' => $phone['phoneNumber'],
  98 + 'jointime'=>time()
67 ]; 99 ];
68 //插入user 100 //插入user
69 $id = \db('user')->insertGetId($data); 101 $id = \db('user')->insertGetId($data);
70 //插入third 102 //插入third
71 \db('third')->insert(['user_id' => $id, 'apptype' => 'wxapp', 'openname' => '微信用户', 103 \db('third')->insert(['user_id' => $id, 'apptype' => 'wxapp', 'openname' => '微信用户',
72 'access_token' => $json['session_key'], 'openid' => $json['openid']]); 104 'access_token' => $json['session_key'], 'openid' => $json['openid']]);
73 - $userId = Db::name('third')->where(['apptype' => 'wxapp', 'openid' => $json['openid']])->value('user_id'); 105 + $userId = Db::name('third')->where(['apptype'=> 'wxapp', 'openid'=>$json['openid']])->value('user_id');
74 $auth = Auth::instance(); 106 $auth = Auth::instance();
75 $ret = $auth->direct($userId); 107 $ret = $auth->direct($userId);
76 - if ($ret) { 108 + if ($ret){
77 $data = $auth->getUserinfo(); 109 $data = $auth->getUserinfo();
78 - $aut = \db('user')->where('id', $userId)->find(); 110 + $aut = \db('user')->where('id',$userId)->find();
79 $data['avatar'] = cdnurl($data['avatar']); 111 $data['avatar'] = cdnurl($data['avatar']);
80 $data['mobile'] = $aut['mobile']; 112 $data['mobile'] = $aut['mobile'];
81 - $this->success('登录成功', $data);  
82 - } else { 113 + $this->success('登录成功',$data);
  114 + }else{
83 $this->error('连接失败'); 115 $this->error('连接失败');
84 } 116 }
85 } 117 }
86 - } else { 118 + }else{
87 $this->error('手机号未找到,请重新输入'); 119 $this->error('手机号未找到,请重新输入');
88 } 120 }
89 - } else { 121 + }else{
90 $this->error('获取openid失败'); 122 $this->error('获取openid失败');
91 } 123 }
92 - } else { 124 + }else{
93 $this->error('请求失败'); 125 $this->error('请求失败');
94 } 126 }
  127 +
95 } 128 }
96 129
97 /** 130 /**
@@ -155,7 +155,7 @@ @@ -155,7 +155,7 @@
155 <div class="list-group panel"> 155 <div class="list-group panel">
156 <a href="#个人中心" class="list-group-item" data-toggle="collapse" data-parent="#sidebar">个人中心 <i class="fa fa-caret-down"></i></a> 156 <a href="#个人中心" class="list-group-item" data-toggle="collapse" data-parent="#sidebar">个人中心 <i class="fa fa-caret-down"></i></a>
157 <div class="child collapse" id="个人中心"> 157 <div class="child collapse" id="个人中心">
158 - <a href="javascript:;" data-id="27" class="list-group-item">小程序登录 <span class="tag"> 158 + <a href="javascript:;" data-id="27" class="list-group-item">手机号授权登录 <span class="tag">
159 </span> 159 </span>
160 </a> 160 </a>
161 <a href="javascript:;" data-id="28" class="list-group-item">我的首页 <span class="tag"> 161 <a href="javascript:;" data-id="28" class="list-group-item">我的首页 <span class="tag">
@@ -307,7 +307,7 @@ @@ -307,7 +307,7 @@
307 <div class="panel-heading" id="heading-27"> 307 <div class="panel-heading" id="heading-27">
308 <h4 class="panel-title"> 308 <h4 class="panel-title">
309 <span class="label label-primary">POST</span> 309 <span class="label label-primary">POST</span>
310 - <a data-toggle="collapse" data-parent="#accordion27" href="#collapseOne27"> 小程序登录 <span class="text-muted">/api/user/login</span></a> 310 + <a data-toggle="collapse" data-parent="#accordion27" href="#collapseOne27"> 手机号授权登录 <span class="text-muted">/api/myinfo/login</span></a>
311 </h4> 311 </h4>
312 </div> 312 </div>
313 <div id="collapseOne27" class="panel-collapse collapse"> 313 <div id="collapseOne27" class="panel-collapse collapse">
@@ -325,7 +325,7 @@ @@ -325,7 +325,7 @@
325 325
326 <div class="tab-pane active" id="info27"> 326 <div class="tab-pane active" id="info27">
327 <div class="well"> 327 <div class="well">
328 - 微信小程序登录 </div> 328 + 手机号授权登录 </div>
329 <div class="panel panel-default"> 329 <div class="panel panel-default">
330 <div class="panel-heading"><strong>权限</strong></div> 330 <div class="panel-heading"><strong>权限</strong></div>
331 <div class="panel-body"> 331 <div class="panel-body">
@@ -366,13 +366,19 @@ @@ -366,13 +366,19 @@
366 <td>code</td> 366 <td>code</td>
367 <td>string</td> 367 <td>string</td>
368 <td></td> 368 <td></td>
369 - <td>code</td> 369 + <td>code-wx.login的code</td>
  370 + </tr>
  371 + <tr>
  372 + <td>encryptedData</td>
  373 + <td>string</td>
  374 + <td></td>
  375 + <td>encryptedData</td>
370 </tr> 376 </tr>
371 <tr> 377 <tr>
372 - <td>phone</td> 378 + <td>iv</td>
373 <td>string</td> 379 <td>string</td>
374 <td></td> 380 <td></td>
375 - <td>phone</td> 381 + <td>iv</td>
376 </tr> 382 </tr>
377 </tbody> 383 </tbody>
378 </table> 384 </table>
@@ -395,14 +401,18 @@ @@ -395,14 +401,18 @@
395 </div> 401 </div>
396 </div> 402 </div>
397 <div class="panel-body"> 403 <div class="panel-body">
398 - <form enctype="application/x-www-form-urlencoded" role="form" action="/api/user/login" method="POST" name="form27" id="form27"> 404 + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/myinfo/login" method="POST" name="form27" id="form27">
399 <div class="form-group"> 405 <div class="form-group">
400 <label class="control-label" for="code">code</label> 406 <label class="control-label" for="code">code</label>
401 - <input type="string" class="form-control input-sm" id="code" required placeholder="code" name="code"> 407 + <input type="string" class="form-control input-sm" id="code" required placeholder="code-wx.login的code" name="code">
  408 + </div>
  409 + <div class="form-group">
  410 + <label class="control-label" for="encryptedData">encryptedData</label>
  411 + <input type="string" class="form-control input-sm" id="encryptedData" required placeholder="encryptedData" name="encryptedData">
402 </div> 412 </div>
403 <div class="form-group"> 413 <div class="form-group">
404 - <label class="control-label" for="phone">phone</label>  
405 - <input type="string" class="form-control input-sm" id="phone" required placeholder="phone" name="phone"> 414 + <label class="control-label" for="iv">iv</label>
  415 + <input type="string" class="form-control input-sm" id="iv" required placeholder="iv" name="iv">
406 </div> 416 </div>
407 <div class="form-group form-group-submit"> 417 <div class="form-group form-group-submit">
408 <button type="submit" class="btn btn-success send" rel="27">提交</button> 418 <button type="submit" class="btn btn-success send" rel="27">提交</button>
@@ -425,7 +435,27 @@ @@ -425,7 +435,27 @@
425 <div class="panel panel-default"> 435 <div class="panel panel-default">
426 <div class="panel-heading"><strong>返回参数</strong></div> 436 <div class="panel-heading"><strong>返回参数</strong></div>
427 <div class="panel-body"> 437 <div class="panel-body">
428 - 438 + <table class="table table-hover">
  439 + <thead>
  440 + <tr>
  441 + <th>名称</th>
  442 + <th>类型</th>
  443 + <th>描述</th>
  444 + </tr>
  445 + </thead>
  446 + <tbody>
  447 + <tr>
  448 + <td>code</td>
  449 + <td>integer</td>
  450 + <td></td>
  451 + </tr>
  452 + <tr>
  453 + <td>msg</td>
  454 + <td>string</td>
  455 + <td></td>
  456 + </tr>
  457 + </tbody>
  458 + </table>
429 </div> 459 </div>
430 </div> 460 </div>
431 </div> 461 </div>
@@ -435,7 +465,16 @@ @@ -435,7 +465,16 @@
435 <div class="tab-pane" id="sample27"> 465 <div class="tab-pane" id="sample27">
436 <div class="row"> 466 <div class="row">
437 <div class="col-md-12"> 467 <div class="col-md-12">
438 - <pre id="sample_response27"></pre> 468 + <pre id="sample_response27">{
  469 + 'code':'1',
  470 + 'msg':'返回成功'
  471 + 'data':[
  472 + 'id':'用户id'
  473 + 'nickname':'用户昵称'
  474 + 'mobile':'手机号'
  475 + 'avatar':'头像'
  476 + 'token':'token']
  477 + }</pre>
439 </div> 478 </div>
440 </div> 479 </div>
441 </div><!-- #sample --> 480 </div><!-- #sample -->
@@ -4813,7 +4852,7 @@ @@ -4813,7 +4852,7 @@
4813 4852
4814 </div> 4853 </div>
4815 <div class="col-md-6" align="right"> 4854 <div class="col-md-6" align="right">
4816 - Generated on 2023-03-13 09:57:22 <a href="./" target="_blank">校园活动</a> 4855 + Generated on 2023-03-13 10:24:59 <a href="./" target="_blank">校园活动</a>
4817 </div> 4856 </div>
4818 </div> 4857 </div>
4819 4858