微信小程序不允许在小程序客户端通过临时凭证去换取openID,原因是不安全,必须通过第三方服务器获取,当然,必须是经过备案并在微信开发者后台经过配置的合法地址,openid存在本地方便以后调用,由于openid一直要使用,写在应用启动时获取,app.js里。
app.js:
// 发送 res.code 到后台换取 openId, sessionKey, unionId
wx.request({
url: 'https://你的域名:端口/OpenID.aspx',
data:{
code: res.code
},
header: {
'content-type': 'application/json' // 默认值
},
success:function (res) {
wx.setStorageSync('openid', res.data)
},
fail: function (res){
}
})
asp.net后台:
if (Request["code"] != null)
{
string code = Request["code"].ToString();
string appId = "。。。";
string appSecret = "。。。";
string serviceAddress = "https://api.weixin.qq.com/sns/jscode2session?appid=" + appId + "&secret=" + appSecret + "&js_code=" + code + "&grant_type=authorization_code";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(serviceAddress);
request.Method = "GET";
request.ContentType = "textml;charset=UTF-8";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream myResponseStream = response.GetResponseStream();
StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.UTF8);
string jsonData = myStreamReader.ReadToEnd();
myStreamReader.Close();
myResponseStream.Close();
string jsonString = jsonData;
JObject json = JObject.Parse(jsonString);
string openid = json["openid"].ToString();
Response.Write(GetJson(openid));
}
public static string GetJson<T>(T obj)
{
DataContractJsonSerializer json = new DataContractJsonSerializer(typeof(T));
using (MemoryStream ms = new MemoryStream())
{
json.WriteObject(ms, obj);
string szJson = Encoding.UTF8.GetString(ms.ToArray());
return szJson;
}
}
微信小程序维护登录态与获取用户信息openid
一、登录
通过 wx.login() 获取到用户登录状态之后,需要维护登录态。
要注意不应直接把 session_key、openid 等字段作用户的标识或者 session 为了标识,而应自己派发一个 session 登录态。
开发者自己生成的 session,应保证其安全性且不应设置较长的过期时间。session 派发到小程序客户端后,可将其存在 storage ,用于后续通信使用。
通过wx.login()获取code,发送给服务器,然后去请求微信服务器换取得到对应的openid与session_key.
openid是该用户在小程序中的唯一标识,用于模板通知之类的。
session_key就用来解密用户的敏感信息(unionid之类的)。
unionid是微信用户在所有微信平台下的唯一标识.
二、数据的加密
wx.login()登录之后。获取用户信息。
其中一些不敏感的信息在返回的 result中的userInfo里。
如果想要获取敏感信息。openid,unionid之类的。则需要从密文中去解密得到。
而密文则在encryptedData这个字段当中。我们去请求我们服务器去解密然后得到敏感信息后则可以保存起来。
接口如果涉及敏感数据(如wx.getUserInfo当中的 openId 和unionId ),接口的明文内容将不包含这些敏感数据。
如果需要获取敏感数据,需要对接口返回的加密数据( encryptedData )进行对称解密。 解密算法如下:
对称解密使用的算法为 AES-128-CBC,数据采用PKCS#7填充。
对称解密的目标密文为 Base64_Decode(encryptedData),
对称解密秘钥 aeskey = Base64_Decode(session_key), aeskey 是16字节
对称解密算法初始向量 iv 会在数据接口中返回。
版权声明:【小程序获取openid失败是什么原因,微信小程序获取openID】版权归原作者所有,本文由作者:【王鹏(python工程师)】用户自发贡献上传,该文观点仅代表作者本人,本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任,如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至举报,一经查实,本站将立刻删除,如若转载,请注明出处:https://www.intostarry.com/jrzy/279.html