ホームページ  >  記事  >  WeChat アプレット  >  WeChatアプレットはログイン機能の論理的配置を実現します

WeChatアプレットはログイン機能の論理的配置を実現します

小云云
小云云オリジナル
2018-01-30 11:35:466102ブラウズ

誰もが WeChat ミニ プログラムをより良く開発できるように、この記事では主に WeChat ミニ プログラムのログイン ロジックを共有し、皆様のお役に立てれば幸いです。

登録/ログイン

ミニターミナル" style="margin: 0.8em 0px; box-sizing: line-height: 1.3em; 2.13em;"> ミニプログラム:

上記の 2 つの API wx.login と wx.getUserInfo を通じて対応する情報を取得し、上記のインターフェイスを通じて自分のサーバーに渡します。

7 つの情報があります。パラメータ:

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 加密算法的初始向量

サーバー側の処理ロジック

関連情報がサーバーに送信された後、サーバー

1. まず、js_codeに従ってWeChatサーバーにアクセスし、session_key
2を取得します。このステップは省略可能です) sha1 (rawData + sessionkey ) を使用して文字列を取得し、それが署名値と同じであるかどうかを判断します。同じであれば、ユーザー情報は正しいので、次のステップに進むことができます。異なる場合は、ユーザー情報が改ざんされているか期限切れであることを意味します
3. 次に、復号アルゴリズムに従って自分で復号し (入力パラメーターは appId、sessionKey、encryptedData、iv、jsonObj を返します)、openId を取得します。
4. 登録/ログイン操作ロジックが完了したら、サーバーの sessionId (または他のトークン) を変更し、ユーザー情報をサーバー側に返します。

その中で、session_key を取得するためのサーバーのリクエストは次のとおりです:

(小文字は固定を意味し、大文字は置換を意味します)
https://api.weixin.qq.com/ sns/jscode2session?appid=APPID&secret= SECRET&js_code=JSCODE&grant_type=authorization_code

Return:

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

関連する復号化アルゴリズム:

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

注: サンプル コードにはノードが含まれています、c++、php、python ですが、java ではありません。

サーバーによって返される必要がある情報:

sessionId/トークンのログインステータス識別
userInfo: jsonObject、プラットフォーム上のユーザーの情報、およびその内容はgetPersonalInfo インターフェイスによって返されるものと同じです

最後に、ログイン操作をメソッドにカプセル化し、必要なときに呼び出します

//最终供外面调用的方法
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();
}

関連する推奨事項:

WeChat アプレットを通じてユーザー情報を取得する方法

WeChat アプレット開発発生した問題の概要

Zhihu の例共有の WeChat ミニ プログラム バージョン

以上がWeChatアプレットはログイン機能の論理的配置を実現しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。