>  기사  >  위챗 애플릿  >  WeChat 애플릿은 로그인 기능의 논리적 배열을 실현합니다.

WeChat 애플릿은 로그인 기능의 논리적 배열을 실현합니다.

小云云
小云云원래의
2018-01-30 11:35:466103검색

모든 사람이 WeChat 미니 프로그램을 더 잘 개발할 수 있도록 이 기사에서는 모든 사람에게 도움이 되기를 바라며 주로 WeChat 미니 프로그램의 로그인 논리를 공유합니다.

등록/로그인

Mini Terminal" style="margin: 0.8em 0px; box-sizing: border-box; line-height: 1.3em; 2.13em;"> 미니 프로그램:

위의 두 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, 암호화된 데이터, 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

반환:

  //正常返回的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.

서버에서 반환하는 데 필요한 정보:

sessionId/token 로그인 상태 식별
userInfo: jsonObject, 플랫폼의 사용자 정보 및 내용은 동일합니다.

마지막으로 로그인 작업을 메소드로 캡슐화하고 필요할 때마다 호출하세요.

//最终供外面调用的方法
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.