Maison  >  Article  >  Applet WeChat  >  L'applet WeChat réalise la disposition logique de la fonction de connexion

L'applet WeChat réalise la disposition logique de la fonction de connexion

小云云
小云云original
2018-01-30 11:35:466169parcourir

Afin de permettre à chacun de mieux développer l'applet WeChat, cet article partage principalement avec vous la disposition logique de la connexion à l'applet WeChat, dans l'espoir d'aider tout le monde.

S'inscrire/Connexion

Mini Terminal" style="margin : 0,8em 0px ; ; line-height : 1.3em; font-size : 2.13em;"> Mini programme :

Obtenez les informations correspondantes via les deux API ci-dessus wx.login et wx.getUserInfo, et transmettez l'interface ci-dessus. est transmise à son propre serveur

Les informations qui doivent être transmises ont 7 paramètres :

appid  小程序唯一标识
secret  小程序的 app secret
js_code  //wx.login登录时获取的 code,用于后续获取session_key

//下面两个参数用户服务器端签名校验用户信息的
signature 使用 sha1( rawData + sessionkey ) 得到字符串,用于校验用户信息。
rawData  不包括敏感信息的原始数据字符串,用于计算签名。

//下面两个参数是用于解密获取openId和UnionId的
encryptedData  包括敏感数据在内的完整用户信息的加密数据
iv 加密算法的初始向量
当然,可以精简为以下三个参数. 
其余的签名校验的参数可省略,而appid和secret可以直接写在服务器.
js_code //  wx.login登录时获取的 code,用于后续获取session_key
encryptedData  包括敏感数据在内的完整用户信息的加密数据
iv 加密算法的初始向量

Logique de traitement côté serveur

Informations associées Après la transmission au serveur, le serveur

1. Accédez d'abord au serveur WeChat pour obtenir la clé de session selon le code_js
2 (cette étape peut être omise) utilisez sha1 (rawData + sessionkey. ) pour obtenir la chaîne et juger de la valeur de la signature. Sont-elles identiques ? Si elles sont identiques, les informations utilisateur sont correctes et vous pouvez passer à l'étape suivante. Si elles sont différentes, les informations utilisateur ont été falsifiées ou expirées. .
3. Décryptez-le ensuite vous-même selon l'algorithme de décryptage (les paramètres d'entrée sont appId, sessionKey, selectedData, iv, Return a jsonObj), obtenez des informations telles que openId et unionId et effectuez des opérations d'enregistrement/connexion côté serveur. .
4. Une fois la logique de l'opération d'enregistrement/connexion terminée, renvoyez l'ID de session (ou un autre jeton) de notre serveur et les informations utilisateur au client.

Parmi eux, la demande du serveur pour obtenir session_key est :

(minuscule signifie fixe, majuscule signifie à remplacer)
https://api.weixin/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code

<.>Retour :

  //正常返回的JSON数据包
    {
          "openid": "OPENID",
          "session_key": "SESSIONKEY"
          "expires_in": 2592000
    }
    //错误时返回JSON数据包(示例为Code无效)
    {
        "errcode": 40029,
        "errmsg": "invalid code"
    }
Algorithme de décryptage associé :

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

Remarque : l'exemple de code inclut node, c++, php, python, mais pas java.

Nécessite un serveur Informations renvoyées :

sessionId/token identifiant d'état de connexion

userInfo : jsonObject , les informations de l'utilisateur sur notre plateforme, son contenu est le même que celui renvoyé par l'interface getPersonalInfo.

Enfin, encapsulez l'opération de connexion dans une méthode, et appelez-la partout où c'est nécessaire

//最终供外面调用的方法
function login(){
    console.log('logining..........');
    //调用登录接口
    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);//调用服务器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();
}
Recommandations associées :

Comment obtenir des informations sur les utilisateurs via l'applet WeChat

Un résumé des problèmes rencontrés dans le développement des mini-programmes WeChat

Une version mini-programme WeChat du partage d'exemples de Zhihu

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn