李浩杰 4 年之前
父節點
當前提交
834ed5495f
共有 7 個文件被更改,包括 79 次插入39 次删除
  1. 37 20
      app/Http/Controllers/Api/mini/AuthController.php
  2. 1 1
      mini/app.json
  3. 12 0
      mini/pages/bind/index.js
  4. 4 0
      mini/pages/bind/index.wxml
  5. 1 1
      mini/utils/env.js
  6. 22 17
      mini/utils/util.js
  7. 2 0
      routes/api.php

+ 37 - 20
app/Http/Controllers/Api/mini/AuthController.php

xqd
@@ -26,33 +26,50 @@ class AuthController extends BaseController
     public function loginByWechat(Request $request)
     {
         $app = app('wechat.mini_program');
-        if($request->input('code')) {
+        $session_key = $request->input('session_key');
+        if(!$session_key && $request->input('code')) {
             $res = $app->auth->session($request->input('code'));
-            if(isset($res['session_key'])) {
-                $data = $app->encryptor->decryptData($res['session_key'], $request->input('iv'), $request->input('encryptedData'));
-                if(isset($data['openId'])) {
-                    if($request->input('bind')) {
-                        $token = $request->header('X-Token');
-                        $user = User::where('token', $token)->first();
-                        if(!$user) return $this->error(['msg' => '找不到用户']);
-                    } else {
-                        $user = User::where('open_id', $data['openId'])->first();
-                        if(empty($user)) return $this->error(['msg' => '用户不存在,请先绑定账户']);
-                    }
-                    $user->update([
-                        'nickname' => $data['nickName'],
-                        'avatar' => $data['avatarUrl']
-                    ]);
-                    Log::info($data);
-                    $user->updateToken();
-                    $user->topRole = $user->getTopRole();
-                    return $this->success(['data' => $user]);
+            if(isset($res['session_key'])) $session_key = $res['session_key'];
+        }
+        if($session_key) {
+            $data = $app->encryptor->decryptData($session_key, $request->input('iv'), $request->input('encryptedData'));
+            if(isset($data['openId'])) {
+                if($request->input('bind')) {
+                    $token = $request->header('X-Token');
+                    $user = User::where('token', $token)->first();
+                    if(!$user) return $this->error(['msg' => '找不到用户']);
+                } else {
+                    $user = User::where('open_id', $data['openId'])->first();
+                    if(empty($user)) return $this->error(['msg' => '用户不存在,请先绑定账户']);
                 }
+                $user->update([
+                    'nickname' => $data['nickName'],
+                    'avatar' => $data['avatarUrl']
+                ]);
+                $user->updateToken();
+                $user->topRole = $user->getTopRole();
+                $user->session_key = $res['session_key'];
+                return $this->success(['data' => $user]);
             }
         }
         return $this->error(['msg' => '登陆失败']);
     }
 
+    public function parsePhone(Request $request)
+    {
+        $app = app('wechat.mini_program');
+        $session_key = $request->input('session_key');
+        if(!$session_key && $request->input('code')) {
+            $res = $app->auth->session($request->input('code'));
+            if(isset($res['session_key'])) $session_key = $res['session_key'];
+        }
+        if($session_key) {
+            $data = $app->encryptor->decryptData($session_key, $request->input('iv'), $request->input('encryptedData'));
+            return $this->success(['data' => $data]);
+        }
+        return $this->error(['msg' => '登陆失败']);
+    }
+
     public function reset(Request $request)
     {
         $user = User::where('phone', $request->input('phone'))->first();

+ 1 - 1
mini/app.json

xqd
@@ -1,7 +1,7 @@
 {
   "pages": [
-    "pages/index/index",
     "pages/bind/index",
+    "pages/index/index",
     "pages/account/index",
     "pages/data-center/index",
     "pages/filter-data/index",

+ 12 - 0
mini/pages/bind/index.js

xqd
@@ -31,6 +31,18 @@ Page({
     })
   },
 
+  updatePhoneNumber(e) {
+    if(e.detail.errMsg == 'errMsg') {
+      http({
+        url: 'auth/parsePhone',
+        data: e.detail,
+        success: function(res) {
+          util.success('手机号获取成功')
+        }
+      })
+    }
+  },
+
   getUserInfo: function(e) {
     var that = this;
     util.wechatLogin(e, false, function(res) {

+ 4 - 0
mini/pages/bind/index.wxml

xqd
@@ -6,6 +6,10 @@
         <view class="sg-pick-name">真实姓名</view>
         <input type="text" value="{{name}}" placeholder="请输入真实姓名" data-name="name" bindchange="onInputChange" class="sg-gray-color" style="text-align: right"/>
       </view>
+      <view class="sg-pick-item sg-pad-tb-sm sg-flex sg-align-center sg-bottom-border sg-space-between">
+        <view class="sg-pick-name">手机号</view>
+        <van-button type="primary" open-type="getPhoneNumber" bind:getphonenumber="updatePhoneNumber" size="small">授权获取手机号</van-button>
+      </view>
       <view class="sg-pick-item sg-pad-tb-sm sg-flex sg-align-center sg-bottom-border sg-space-between">
         <view class="sg-pick-name">所属项目</view>
         <picker bindchange="bindPickerChange" value="{{projectIndex}}" range="{{projects}}" range-key="name"

+ 1 - 1
mini/utils/env.js

xqd
@@ -1,3 +1,3 @@
-const isTest = true;
+const isTest = false;
 export const baseUrl = isTest ? 'http://app.rt/api/mini/' : 'http://t18.9026.com/api/mini/';
 export const imgHost = isTest ? 'http://app.rt/images/' : 'http://t18.9026.com/images/'

+ 22 - 17
mini/utils/util.js

xqd xqd
@@ -71,6 +71,9 @@ const callLogin = (data, redirect, cb) => {
     success: function (res) {
       if (res.code == 0) {
         getApp().updateUserInfo(res.data)
+        if(res.data.session_key) {
+          wx.setStorageSync('session_key', res.data.session_key)
+        }
         if (redirect) {
           wx.switchTab({
             url: '/pages/index/index',
@@ -84,24 +87,26 @@ const callLogin = (data, redirect, cb) => {
 
 const wechatLogin = (e, redirect = false, cb = null, bind = false) => {
   if (e.detail.errMsg == 'getUserInfo:ok') {
-    // wx.checkSession({
-    //   success () {
-    //     that.wechatLogin(e.detail)
-    //   },
-    //   fail () {
-    // session_key 已经失效,需要重新执行登录流程
-    wx.login({
-      success(res) {
-        if (res.code) {
-          callLogin(Object.assign({}, e.detail, {
-            code: res.code,
-            bind: bind
-          }), redirect, cb)
-        }
+    wx.checkSession({
+      success () {
+        callLogin(Object.assign({}, e.detail, {
+          bind: bind,
+          session_key: wx.getStorageSync('session_key')
+        }), redirect, cb)
+      },
+      fail () {
+        wx.login({
+          success(res) {
+            if (res.code) {
+              callLogin(Object.assign({}, e.detail, {
+                code: res.code,
+                bind: bind
+              }), redirect, cb)
+            }
+          }
+        }) //重新登录
       }
-    }) //重新登录
-    // }
-    // })
+    })
   }
 }
 

+ 2 - 0
routes/api.php

xqd
@@ -21,6 +21,8 @@ $api->version('v1', ['namespace' => 'App\Http\Controllers\Api\mini', 'prefix' =>
     $api->any('loginByWechat', 'AuthController@loginByWechat');
     $api->any('getUserInfo', 'AuthController@getUserInfo');
 
+    $api->any('parsePhone', 'AuthController@parsePhone');
+
     $api->any('projects/create', 'ProjectController@create');
     $api->any('projects/get', 'ProjectController@get');
     $api->any('projects/getAll', 'ProjectController@getAll');