造成app唤起支付失败返回-1的个人总结的原因分为三类:参数、前后端操作、打包工具
经典报错:
{“errMsg”: “requestPayment:fail [payment微信:-1]General errors”,“errCode”: -100,“code”: -100}
1:参数
检查app支付统一下单的appid和唤起的appid是否一致,以及当前唤起支付的移动应用本身的appid在开放平台查看,)必须跟前面一致(统一下单的appid和唤起的appid)。
2:前后端操作
2.1:签名(前后端签名使用的参数不一样)
统一下单的签名和唤起支付的签名,一般统一下单成功返回了正确的预支付id代表后端签名是没有问题(确定appid没有使用错误的情况下),主要是前端的签名,检查签名类型是否跟后端统一下单的一致,使用验签工具按照对应的文档的明文格式检修验签是否通过,v2验签工具
v3验签工具
注意 :
v2签名目前支持HMAC-SHA256和MD5的数字签名算法,默认为MD5(假如下单时,使用的是MD5签名方式,则调起支付也必须是MD5的签名方式)参考链接
v3签名目前支持SHA256-RSA的数字签名算法(前后端签名都必须是SHA256-RSA的签名方式)参考链接
前后端签名格式不一致也会导致该报错
2.2:操作
前端唤起支付的是使用的预支付id一定要使用当前appid和商户号对应生成的,是否严格按照文档的的方式是配置相关包签名等,v2配置
v3配置
2.3:打包工具
每种打包工具打包的方式不一样,有些打包方式在一些配置文件里面有些默认的包签名,这个包签名需要更改(本人不是前端开发,也没有开发过app,所以不是很清楚,这些都是在咨询技术的时候得知的)
3:排查的操作
3.1:验签
上面已经说了验签的,这个是必须的(建议前后端一起验签)
3.2:检查参数
查看参数,尤其是appid看看三者是否一致,眼见为实,最好自己各个平台打开,ctrl+c 和ctrl+v(我自己就是因为是公司替他人提供的,问他是否有问题就说没问题,自己去检查才发现根本就是不到当前唤起支付的移动应用的appid)
3.3:前端把参数写死
后端生成参数后,让前端直接把参数写成常数,就不要通过后端传递了(这个坑我自己也踩过,前端接收的跟我后端的不一样,咨询技术才这样操作发现这个问题)
3.4:包签名(可测试app分享功能,如果是包签名的问题就会直接报错包签名的问题)
这个开发过app的应该都知道包签名了吧,不知道的自己去查找对应的资料学习学习(我本人不是开发app的,所以这个我只能说各位自己检查了),上述3点没问题那就一定是包签名的问题
包名和开放平台上一致 但还是会返回 负1 和包名与开放平台上填写不一致
我这边接入微信支付功能,由服务器负责订单签名。
每次只有清除微信数据,重新登录微信后,第一次请求才能拉起微信支付,第二次就会返回-1。
知道这个是为什么吗?