小程序
小游戏
企业微信
微信支付
扫描小程序码分享
多个项目用的同一套支付逻辑,PayReq的sign参数统一用后台的,而当前的项目却提示验证签名失败;当我改成sign=“MD5”,却可以调起微信支付并成功,是SDK已经改逻辑了吗
22 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
确实改成 sign=“MD5” 支付成功
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
辛亏在网上搜了一下,看到了楼主的解决方案。如果相信微信的官方文档一个一个调试的话,就是傻X了。。。
确实解决了问题,不得不说官方文档和服务太差
微信就是国内开发者的毒瘤
我就没见过错误日志报的这么屎的
sign这个参数写123都行,这是神马操作?
请按照以下几点进行排查:
1、使用签名检查工具(https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=20_1)校验签名算法是否有误
2、确认秘钥是否有误(服务商模式使用服务商商户号秘钥,秘钥是在商户平台配置,如果同一商户号调用其它接口成功可排除是秘钥问题)
3、确认接口实际的请求参数与生成签名原串的参数一致,不能增加或缺少参数(可通过打印签名原串进行排查)
4、确认参数的大小写,参数名与接口文档一致
5、签名原串的参数值使用原始值,不需要encode
6、接口需要使用UTF-8编码
根据楼主的提示解决了这个问题
服务器返回的数据(示例所用假数据,仅为参考):
{ "package": "Sign=WXPay", "appid": "wx73875835749357527389472", "sign": "ba333378493jrsekay8934y4hffdsajkgjsalf", "partinerid": "16237873492", "prepayid": "wx232328427952243ewi8979fsafsadgs", "return_code": "SUCCESS", "noncestr": "U2VQOIYFKb7jJGKF", "timestamp": "16400252100" }
前端可将sign的值改为md5
如下:
{ "package": "Sign=WXPay", "appid": "wx73875835749357527389472", "sign": "md5", "partinerid": "16237873492", "prepayid": "wx232328427952243ewi8979fsafsadgs", "return_code": "SUCCESS", "noncestr": "U2VQOIYFKb7jJGKF", "timestamp": "16400252100" }
不建议后端改,因为iOS端需要用到这个正确的签名
做过如下尝试:
wechatpay.sign = "我们爱你我的中国多么美丽"; // 不可行 wechatpay.sign = "我们爱你我的"; // 可行 wechatpay.sign = "我们爱你我的中国多"; // 可行 wechatpay.sign = "我们爱你我的中国多么美"; // 不可行 wechatpay.sign = "我们爱你我的中国多么"; // 可行 wechatpay.sign = "我们爱你我的中国多么a"; // 可行 wechatpay.sign = ""; // 不可行,APP内报错 wechatpay.sign = "a"; // 可行 wechatpay.sign = "abcdefghijklmnopqestuvwxyz12345"; // 可行 wechatpay.sign = "abcdefghijklmnopqestuvwxyz123456"; // 不可行
可以看出一些端倪,只要sign的值所占字节数小于32即可,一个汉字在utf-8编码下,所占正是3个字节,而一个字母,所占字节数为1。
正确的sign值为什么不能通过,因为正确的sign值字节刚刚好是32
微信不修复此bug的原因,可能是因为,一旦修复,会导致大量的用户的支付功能出现异常,搞不好会出个大事。比较困惑的是,文档居然也不说这个事情。
玄之又玄,众妙之门
以上仅为个人猜测。
sign = ”MD5“
真是无语+1
简直了……
简直是救命一般的帖子 谁能想到费心费力的算出签名就不行 随便写点啥就能支付 你们怕是把if条件写反了吧……
sign = ”MD5“ 真是无语
正在加载...
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
确实改成 sign=“MD5” 支付成功
辛亏在网上搜了一下,看到了楼主的解决方案。如果相信微信的官方文档一个一个调试的话,就是傻X了。。。
确实解决了问题,不得不说官方文档和服务太差
微信就是国内开发者的毒瘤
我就没见过错误日志报的这么屎的
sign这个参数写123都行,这是神马操作?
请按照以下几点进行排查:
1、使用签名检查工具(https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=20_1)校验签名算法是否有误
2、确认秘钥是否有误(服务商模式使用服务商商户号秘钥,秘钥是在商户平台配置,如果同一商户号调用其它接口成功可排除是秘钥问题)
3、确认接口实际的请求参数与生成签名原串的参数一致,不能增加或缺少参数(可通过打印签名原串进行排查)
4、确认参数的大小写,参数名与接口文档一致
5、签名原串的参数值使用原始值,不需要encode
6、接口需要使用UTF-8编码
根据楼主的提示解决了这个问题
服务器返回的数据(示例所用假数据,仅为参考):
{ "package": "Sign=WXPay", "appid": "wx73875835749357527389472", "sign": "ba333378493jrsekay8934y4hffdsajkgjsalf", "partinerid": "16237873492", "prepayid": "wx232328427952243ewi8979fsafsadgs", "return_code": "SUCCESS", "noncestr": "U2VQOIYFKb7jJGKF", "timestamp": "16400252100" }
前端可将sign的值改为md5
如下:
{ "package": "Sign=WXPay", "appid": "wx73875835749357527389472", "sign": "md5", "partinerid": "16237873492", "prepayid": "wx232328427952243ewi8979fsafsadgs", "return_code": "SUCCESS", "noncestr": "U2VQOIYFKb7jJGKF", "timestamp": "16400252100" }
不建议后端改,因为iOS端需要用到这个正确的签名
做过如下尝试:
wechatpay.sign = "我们爱你我的中国多么美丽"; // 不可行 wechatpay.sign = "我们爱你我的"; // 可行 wechatpay.sign = "我们爱你我的中国多"; // 可行 wechatpay.sign = "我们爱你我的中国多么美"; // 不可行 wechatpay.sign = "我们爱你我的中国多么"; // 可行 wechatpay.sign = "我们爱你我的中国多么a"; // 可行 wechatpay.sign = ""; // 不可行,APP内报错 wechatpay.sign = "a"; // 可行 wechatpay.sign = "abcdefghijklmnopqestuvwxyz12345"; // 可行 wechatpay.sign = "abcdefghijklmnopqestuvwxyz123456"; // 不可行
可以看出一些端倪,只要sign的值所占字节数小于32即可,一个汉字在utf-8编码下,所占正是3个字节,而一个字母,所占字节数为1。
正确的sign值为什么不能通过,因为正确的sign值字节刚刚好是32
微信不修复此bug的原因,可能是因为,一旦修复,会导致大量的用户的支付功能出现异常,搞不好会出个大事。比较困惑的是,文档居然也不说这个事情。
玄之又玄,众妙之门
以上仅为个人猜测。
sign = ”MD5“
真是无语+1
简直了……
简直是救命一般的帖子 谁能想到费心费力的算出签名就不行 随便写点啥就能支付 你们怕是把if条件写反了吧……
sign = ”MD5“ 真是无语