谢谢您这么及时的回答问题,我姑且认为是回答。首先这个发帖人我完全不认识,所以说明这个问题似乎不需要定向来排查吧?很多不一样的开发者都遇到了相同的问题,当然不说100%排除是我们这些人犯了同样的错误,我希望也是我们犯了错,因为毕竟你们比我们牛,几乎不会出错,而且我们错了更容易改,对吧?另外你们在提供这些相对敏感的信息时候,有保密的文本吗?直接贴在公开的论坛里让别人看到appid和openid?虽然这不是secret,但总感觉有点怪怪得啊,一般其他平台,提供这些敏感信息,都是有保密的字段可以填写的,只有你们官方可以看到,不是吗?另外既然您说了要appid,那我这正好有2个,我想说的是这2个都同时有这个问题。另外我比较弱鸡,还是请麻烦解答下,直接这么公开的提供appid和openid没啥安全隐患吧?再次感谢您专业的帮助。 wx345ace1cb60e9fdf wxaa0ddc4b1f7e3156 o_WKt4rN6LTl6aQR2Fb9ax_35zZU
小程序验证签名(登录)的流程(含官方解答的最佳实践)小程序审核突然没通过,理由如下: [图片] 这个问题开发过程中自己确实遇到过,几率性的,一般第一次不行,第二次肯定可以了,但是不是一开始写小程序就有的,不知道什么时候开始就这样了,验证的逻辑都是按照官方的,从来没有改变过。然后上社区一搜,很多类似的问题,如下图所示。 [图片] 看了下这个问题,第一次验证签名如下: [图片] 小程序端通过wx.login成功后获取的code rawdata,这个我都是同一用户登录,前后信息没啥变化 通过1中的code,后端调用api获得的session data,其中openid肯定同一用户每次也都一样的,session_key如果过期,那么第一次和第二次理论应该是不一样的。(但实际情况前后两次是一致的,具体可参见下图) 小程序端获取到的用户的签名 后端通过session key校验出来的签名。 很明显,4和5不一致,校验失败。接下来是第二次交验: [图片] 还是同样的逻辑顺序。 小程序端通过wx.login成功后获取的code。很明显,code跟第一次是不一样的,另外根据官方文档描述,因为又重新调用了wx.login,会导致session_key过期。(这似乎说明code发生变化也是对的,因为按推测,seesionkey应该也发生了变化,否则怎么叫“被更新”)请看下图官方文档说明:[图片] rawdata,这个我都是同一用户登录,前后信息没啥变化 根据1中的官方描述,奇怪的现象就发生了,在后端根据新的code,获取的session data,很明显session key还是第一次是一样的,也就是说,我重新调用了wx.login, code是变了,但是session key却和第一次保持一致的。 小程序端获取到的用户的签名 后端通过session key校验出来的签名。因为用的是同样的rawdata,同样的session key,所以两次校验的结果是一样的,但是第二次4中,小程序端获取的签名是跟此次校验结果是一致的。 所以问题就来了,这问题到底出在什么地方?似乎官方文档描述的就有问题,还是我本身的逻辑顺序有问题?请官方指教,谢谢。
2018-09-04解决了吗?微信官方真的是爱答不理的,小程序开发的支持度非常差。我也遇到这个问题,我是大概率第一次不行,再来一次就好了。
用户数据签名验证失败我在客户端的执行代码: wx.login({ success: function (result) { if (result.code) { wx.request({ url: config.service.requestUrl + '/v.php', data: { code: result.code }, header: { 'content-type': 'application/x-www-form-urlencoded' }, method: 'POST', success: function (res) { wx.getUserInfo({ success: function (res) { that.localData.rawdata = res.rawData that.localData.signature = res.signature that.globalData.userInfo = res.userInfo wx.request({ url: config.service.requestUrl + '/verify.php', data: {}, header: { 'content-type': 'application/x-www-form-urlencoded', 'Cookie': 'PHPSESSID=' + wx.getStorageSync('session_id'), 'raw': escape(this.localData.rawdata), 'signature': this.localData.signature }, method: 'POST', success: function (res) { }, fail: function (res) { } }) } }) } }) } } }) 在v.php中,通过appid、appsecret、code获取到了openid和session_key,并保存到开发者服务器。 在verify.php中: $raw = js_unescape ($_SERVER['HTTP_RAW']); $sig = $_SERVER['HTTP_SIGNATURE']; $cleartext = $raw . $session_key; $signature = sha1($cleartext); 现在,问题来了:$sig和$signature,这两个值在某些情况下是相同的,而在某些情况下是不同的!我们用了很多个手机做测试,相同和不同的概率大概五五开,而且跟IOS系统或Android系统无关。咋回事呢?
2018-09-03非常抱歉,我不知道是我问题表述的有问题,还是其他什么问题?为什么社区的答复如此之慢?这个问题不解决,指纹验证就不能用了。烦请帮忙看下。谢谢。
指纹验证后,密钥验签服务调用返回48001https://developers.weixin.qq.com/miniprogram/dev/api/startSoterAuthentication.html 微信已经提供后台接口,用于可信的密钥验签服务,微信将保证该接口返回的验签结果的正确性与可靠性,并且对于 Android root 情况下该接口具有上述特征(将返回是否保证root情况安全性)。 接口地址: http://api.weixin.qq.com/cgi-bin/soter/verify_signature?access_token=%access_token post 数据内容(JSON 编码): [代码]{"openid":"$openid", "json_string" : "$json", "json_signature" : "$sign" }[代码] [代码] [代码] 其中json_string使用的是指纹验证返回的resultJSON,json_signature使用的是resultJSONSignature。access_token是通过如下文档方式获取的https://developers.weixin.qq.com/miniprogram/dev/api/token.html#%E8%8E%B7%E5%8F%96-access_token openid应该也是没有错的。但是调用这个接口总是返回48001错误。 { errcode: 48001, errmsg: 'api unauthorized hint: [QlUlKa0358vr47!]' } 请问这是为什么?谢谢。
2018-08-02