微信小程序前端页面通过登录按钮获得用户授权得到用户信息:
view>
前端JS代码把用户信息数据交给后端进行code2session获得session_key和openid, 并将加密数据传给后端进行解密(用session_key):
onGotUserInfo: function(value) {
console.log("刚进button回调:")
console.log(value)
wx.login({ //登录
success(loginres) {
console.log("刚进wx.login:success回调:")
console.log(loginres)
//https://developers.weixin.qq.com/community/develop/doc/0008847a6240582c30c6fd81b56800
wx.getUserInfo({lang: value.detail.userInfo.language,
success(usrres){
console.log("刚进wx.getUserInfo:success回调:")
console.log(usrres)
//获取loginres.code, usrres.encryptedData, usrres.iv数据传给后端
wx.request({
url: 'http://127.0.0.1:8080/login/wxlogin',
method: "POST",
header: {
'content-type': 'application/x-www-form-urlencoded'
},
data: {
code: loginres.code,
encryptedData: usrres.encryptedData,
iv: usrres.iv
},
success(result) {
console.log("登录成功");
console.log(result);
},
fail() {
console.log("失败");
}
})
}
})
},
fail() {
console.log("登录失败");
}
})
}
后端代码通过发送https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code获得openid, session_key json表达:
{"session_key":"dOW1Wc*************************=","openid":"o4Jcd***********************SGC8w"}
注意这里微信API传回来的openid是全小写的(以上标红的部分)
而后通过session_key在后端解密前端传过来的encryption data(是加密了的json数据字符串),解密后如下:
{"openId":"o4Jcd***********************SGC8w","nickName":"水水","gender":1,"language":"zh_CN","city":"Chaoyang","province":"Beijing","country":"China","avatarUrl":"https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eq1V7C6Xwpa6em3hLAxjanqOCeIKTvn0KD4BJMqVDOYAbaN6BfEhoecchLMA0VNPWP4839OGxBofw/132","watermark":{"timestamp":1599579215,"appid":"wx1ef3*****93"}}
请问解密后的JSON字符串 openid里面的I又是大写的?(以上标红标粗)
这给我后端的处理代理不小的麻烦,因为调用了一个公共的处理类去处理从JSON到类的转换自动解析JSON字符串到POJO的类,因为字符串前后两次大小写不一致导致转换失败。请问这个是什么原因,如何规避?
或者说你全部转小写匹配