Jay Fong | 方剑成

Results 33 comments of Jay Fong | 方剑成

> > 后续,换成 letsencrypt 后恢复正常。 > > letsencrypt 方式的话安全系数没有zerossl的高,而且安卓低版本也会证书不信任 正常优先了,换了后没用户反馈了。

发现了问题所在: https://github.com/alipay/alipay-sdk-nodejs/blob/3108aa3448b00243836fdc4e45de020ed05f64e2/lib/alipay.ts#L257 此处对 value 进行了 decodeURIComponent 操作,而对于 passbackParams 官方文档又说:`本参数必须进行UrlEncode之后才可以发送给支付宝。`,这导致生成签名和验证签名所使用的不再是同一个 passbackParams。 临时解决办法,在 checkNotifySign 前对 passback_params 进行一次 encodeURIComponent: ```js payload.passback_params = encodeURIComponent(payload.passback_params) const verified = alipaySdk.checkNotifySign(payload) ```

@tudou527 我是觉得不应该对值进行 decodeURIComponent 操作吧,传给 checkNotifySign 的数据应该默认是正规化的。而且 POST 这么一段数据给服务器 `id=1&name=ff%E6%88%91%E5%B0%B1`,一般的服务端程序都会把它解析成这样 `{ id: 1, name: 'ff我就' }`,而不是这样 `{ id: 1, name: 'ff%E6%88%91%E5%B0%B1' }`,checkNotifySign 里又对参数进行了一道解码,就会导致一些问题了。