业务流程如下:
在前端用wx.login获取code,用wx.getUserInfo获取用户相关信息(下文称UserInfo)一起wx.request到服务器。
服务器先用收到的code获取openid与session_key。
用步骤2中获取的session_key与步骤1中获取的UserInfo.rawData计算出新的signature。
对比UserInfo.signature与步骤3中重新计算出的signature。
以上签名校验失败的情况会偶尔发生。不知是什么原因?
ps.
c# 计算签名代码
SHA1 sha1 = new SHA1CryptoServiceProvider();
byte[] source = Encoding.UTF8.GetBytes(rawData + sessionKey);
byte[] target = sha1.ComputeHash(source);
string result = BitConverter.ToString(target).Replace("-", "").ToLower();
根据文档,开发者应该在询问按钮出现前就进行
wx.login
调用,否则就会出错,在onglunch时先调用wx.login,根据code 获取到openid和session_key,
在页面加载完成后点击登录获取用户信息时,此时验证一致,
如果wx.login获取code,和wx.getUserInfo同一时间处理则 签名不一致。
现在还有这个问题,官方没回复吗?
我们 golang 也遇到,量还不小