服务器是将unionId作为唯一id的,需要使用WXBizDataCrypt.decryptData将encryptedData解密出来。不过在调用WXBizDataCrypt.decryptData的时候总是会有30%的几率解密失败,返回errorCode -41003
服务器端语言:PHP
原因:
每次小程序获取到iv的值中间有空格的,就会出错
js传输 iv ,encryptedData 的时候用 encodeURIComponent 函数进行 urlencode (空格其实是符号:+ ?),PHP端接收的时候 urldecode 就可以了
wx.login({
success:function(res){
//请求后台获取用户openid
if(res.code){
var code = res.code
wx.getUserInfo({
success:function(data){
console.log(data)
var encryptedData = encodeURIComponent(data.encryptedData)
var iv = encodeURIComponent(data.iv)
var signature = data.signature
var rawData = data.rawData
//请求服务器
https.login('Wxlogin/login.html', code, encryptedData, iv, signature, rawData)
}
})
}
}
})
PHP端
$encryptedData=urldecode($data['encryptedData']); //echo json_encode($encryptedData); $iv = urldecode($data['iv']);