모든 사람이 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 애플릿을 구현하는 방법
Zhihu 예제 공유의 WeChat 미니 프로그램 버전
위 내용은 WeChat 애플릿은 로그인 기능의 논리적 배열을 실현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!