官方文档文档相关地址:
微信两个api所拿到的信息:login和getUserInfo
注册/登录小程序端:
通过上面wx.login和wx.getUserInfo两个api拿到相应的信息,并通过上方接口传给自己的服务器. appid 小程序唯一标识 secret 小程序的 app secret js_code //wx.login登录时获取的 code,用于后续获取session_key //下面两个参数用户服务器端签名校验用户信息的 signature 使用 sha1( rawData + sessionkey ) 得到字符串,用于校验用户信息。 rawData 不包括敏感信息的原始数据字符串,用于计算签名。 //下面两个参数是用于解密获取openId和UnionId的 encryptedData 包括敏感数据在内的完整用户信息的加密数据 iv 加密算法的初始向量
当然,可以精简为以下三个参数. js_code // wx.login登录时获取的 code,用于后续获取session_key encryptedData 包括敏感数据在内的完整用户信息的加密数据 iv 加密算法的初始向量 服务端处理逻辑相关的信息传输给服务器后,服务器
1.先根据js_code去微信服务器拿到session_key 其中,服务器去获取session_key的请求为:
(小写为固定写好的,大写为待替换的) 返回:
//正常返回的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 注意:示例代码中有node,c++,php,python的,没有java的. 需要服务器返回的信息:sessionId/token 登录状态标识 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();
}
|