小程序获取openid失败是什么原因,微信小程序获取openID

微信小程序不允许在小程序客户端通过临时凭证去换取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 ,用于后续通信使用。

小程序获取openid失败是什么原因,微信小程序获取openID

通过wx.login()获取code,发送给服务器,然后去请求微信服务器换取得到对应的openid与session_key.

openid是该用户在小程序中的唯一标识,用于模板通知之类的。

session_key就用来解密用户的敏感信息(unionid之类的)。

unionid是微信用户在所有微信平台下的唯一标识.

二、数据的加密

wx.login()登录之后。获取用户信息。

小程序获取openid失败是什么原因,微信小程序获取openID

其中一些不敏感的信息在返回的 result中的userInfo里。

如果想要获取敏感信息。openid,unionid之类的。则需要从密文中去解密得到。

而密文则在encryptedData这个字段当中。我们去请求我们服务器去解密然后得到敏感信息后则可以保存起来。

小程序获取openid失败是什么原因,微信小程序获取openID

接口如果涉及敏感数据(如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

(0)
上一篇 2023年10月27日 22:58:27
下一篇 2023年10月27日 23:05:23

相关推荐

发表回复

登录后才能评论