安卓商户APP调用微信SDK支付一直返回“-1”问题排查记录
发布于 4 年前 作者 taotan 3856 次浏览 来自 分享

现象:APP调用微信SDK支付返回“-1”。但是卸载微信再重新安装时,第一次可以正常调用微信并支付成功,但第二次以后不能调用支付一直返回“-1”。

排查过程

服务端:

A):统一下单接口正常下单, 证明签名,appid,mch_id, key参数配置是正常的。

B):统一下单返回的预付订单参数"prepay_id, nonce_str"返回给客户端调用

// 预付订单下单
$preOrderInfo = $this->preOrder($payload);

//  生成签名参数, 严格对比参数, 注:必需是"package"
$pay_request = [
    'appid'     => $payload['appid'],
    'partnerid' => $payload['mch_id'],
    'prepayid'  => $preOrderInfo->prepay_id,
    'timestamp' => strval(time()),
    'noncestr'  => $preOrderInfo->nonce_str,
    'package'   => 'Sign=WXPay',
];
$pay_request['sign'] = Support::generateSign($pay_request);

// 返回给安卓客户端packageValue,不参与签名。 因为package参数在安卓里是关键字,多加一个字段返回给安卓用
$pay_request['packageValue']  = 'Sign=WXPay';

return JsonResponse::create($pay_request);

C):因为第一次可以调用微信支付,我确定服务端返回给客户端的参数是没有问题的

客户端:

A): 客户端只有短短不到三十行代码,参数也是服务端给的,排除客户端问题

问题找出

https://developers.weixin.qq.com/community/pay/doc/000002156506e025554885e9051800

https://blog.csdn.net/ws1836300/article/details/53893102

原因:在设置安卓签名是设置错误,把证书指纹的MD5值,直接设置成签名了。正确的做法是用微信官方提供的签名生成工具。或者把证书指纹的MD5值所有的冒号去掉,英文全改为小写也可以,但是不推荐这样做。

总结:归根结底还是配置问题,除了服务端的配置,还有客户端配置,在开发之前再三确让配置问题

1 回复

大家在APP支付遇到-1的问题的时候,除了签名。一定要注意配置的问题。。这篇文档也希望可以帮到大家有遇到-1时候的排查。

回到顶部