服务器是将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']);