网友真实露脸自拍10p,成人国产精品秘?久久久按摩,国产精品久久久久久无码不卡,成人免费区一区二区三区

小程序模板網(wǎng)

微信小程序登錄邏輯整理

發(fā)布時(shí)間:2018-04-25 08:55 所屬欄目:小程序開發(fā)教程

官方文檔

文檔相關(guān)地址:

用戶登錄 
獲取用戶數(shù)據(jù) 
用戶數(shù)據(jù)的簽名驗(yàn)證和加解密

登錄時(shí)序圖.png

微信兩個(gè)api所拿到的信息:login和getUserInfo

返回的信息.png

注冊(cè)/登錄

小程序端:

通過上面wx.login和wx.getUserInfo兩個(gè)api拿到相應(yīng)的信息,并通過上方接口傳給自己的服務(wù)器. 
需要傳輸?shù)男畔⒂?個(gè)參數(shù):

appid  小程序唯一標(biāo)識(shí)
secret  小程序的 app secret
js_code  //wx.login登錄時(shí)獲取的 code,用于后續(xù)獲取session_key

//下面兩個(gè)參數(shù)用戶服務(wù)器端簽名校驗(yàn)用戶信息的
signature 使用 sha1( rawData + sessionkey ) 得到字符串,用于校驗(yàn)用戶信息。
rawData  不包括敏感信息的原始數(shù)據(jù)字符串,用于計(jì)算簽名。

//下面兩個(gè)參數(shù)是用于解密獲取openId和UnionId的
encryptedData  包括敏感數(shù)據(jù)在內(nèi)的完整用戶信息的加密數(shù)據(jù)
iv 加密算法的初始向量

當(dāng)然,可以精簡(jiǎn)為以下三個(gè)參數(shù). 
其余的簽名校驗(yàn)的參數(shù)可省略,而appid和secret可以直接寫在服務(wù)器.

js_code //  wx.login登錄時(shí)獲取的 code,用于后續(xù)獲取session_key
encryptedData  包括敏感數(shù)據(jù)在內(nèi)的完整用戶信息的加密數(shù)據(jù)
iv 加密算法的初始向量

服務(wù)端處理邏輯

相關(guān)的信息傳輸給服務(wù)器后,服務(wù)器

1.先根據(jù)js_code去微信服務(wù)器拿到session_key 
2.(此步可省略)使用 sha1( rawData + sessionkey )拿到字符串,判斷與signature值是否相同,如果相同則用戶信息無誤,可進(jìn)行下一步.如果不同,則說明用戶信息被篡改或過期. 
3.然后根據(jù)解密算法自行解密(輸入?yún)?shù)為appId,sessionKey,encryptedData,iv,返回一個(gè)jsonObj),拿到openId和unionId等信息,執(zhí)行服務(wù)器端的注冊(cè)/登錄操作. 
4.注冊(cè)/登錄操作邏輯完成后,將我們服務(wù)器的sessionId(或其他token),以及用戶信息返回給客戶端.

其中,服務(wù)器去獲取session_key的請(qǐng)求為:

(小寫為固定寫好的,大寫為待替換的) 
https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code

返回:

    //正常返回的JSON數(shù)據(jù)包
    {
          "openid": "OPENID",
          "session_key": "SESSIONKEY"
          "expires_in": 2592000
    }
    //錯(cuò)誤時(shí)返回JSON數(shù)據(jù)包(示例為Code無效)
    {
        "errcode": 40029,
        "errmsg": "invalid code"
    }

相關(guān)解密算法:

https://mp.weixin.qq.com/debug/wxadoc/dev/api/signature.html

注意:示例代碼中有node,c++,php,python的,沒有java的.

需要服務(wù)器返回的信息:

sessionId/token 登錄狀態(tài)標(biāo)識(shí)
userInfo: jsonObject,用戶在我們平臺(tái)上的信息,其內(nèi)容與getPersonalInfo接口返回的相同.

最后,將登錄操作封裝成方法,需要處調(diào)用即可

//最終供外面調(diào)用的方法
function login(){
    console.log('logining..........');
    //調(diào)用登錄接口
    wx.login({
        success: function (e) {
            console.log('wxlogin successd........');
            var code = e.code;
            wx.getUserInfo({
                success: function (res) {
                    console.log('wxgetUserInfo successd........');
                    var encryptedData = encodeURIComponent(res.encryptedData);
                    thirdLogin(code,encryptedData,res.iv);//調(diào)用服務(wù)器api
                }
            })
        }
    });
}

function  thirdLogin(code,encryptedData,iv){
    var url = "eeee/xxx/login/ttttt";
    var params = new Object();
    params.code = code;
    params.encryptedData = encryptedData;
    params.iv =iv;

    buildRequest(new Object(),url,params,{
        onPre: function(page){},
        onSuccess:function (data){
            console.log('my  login successd........');
            console.log(data);
            getApp().globalData.session_id = data.session_id;
            getApp().globalData.uid = data.uid;
            getApp().globalData.isLogin = true;
        },
        onError : function(msgCanShow,code,hiddenMsg){
        }
    }).send();
}


易優(yōu)小程序(企業(yè)版)+靈活api+前后代碼開源 碼云倉(cāng)庫(kù):starfork
本文地址:http://www.xiuhaier.com/wxmini/doc/course/23948.html 復(fù)制鏈接 如需定制請(qǐng)聯(lián)系易優(yōu)客服咨詢:800182392 點(diǎn)擊咨詢
QQ在線咨詢
AI智能客服 ×