收藏
回答

委托代扣(APIv2),app支付中签约,无法调起微信支付(签约)页面,提示“支付验证签名失败”

文档地址:https://pay.weixin.qq.com/doc/v2/merchant/4011987320

详细过程如下:

一、接入前提条件:

微信支付【委托代扣】实现连续包月功能, 委托代扣相关的权限后台都已申请通过,协议模板也已经创建完成。


二、接入过程(支付中签约):

预下单:商家服务端,调用微信支付“支付中签约”接口(https://api.mch.weixin.qq.com/pay/contractorder),成功下单(return_code 和result_code都为SUCCESS),此接口是V2版本的支付委托代扣(文档中V3版本未提及,且已经咨询过平台(开发助手转人工的回复),委托代扣只有V2版本的接入,但是在社区的看到有回复说“不是所有场景都支持,说联系BD沟通(时间是2024-12-10回复的)”,也有说就是预约扣款,实际可能是独立产品);

二次签名:服务端 获取 prepay_id, 进行二次签名(已严格按照appid、partnerid、prepayid、package、noncestr、timestamp), 且签名方式都为(MD5),  然后将二次签名的结果和签名的参数封装返回给APP端调起支付;

APP端调用:APP使用服务端返回的参数(没有增加其他参数),调用结果是 提示“支付验证签名失败”,无法唤起微信签约支付页面;


自行排查过程: 

1、 开放平台设置的app应用签名是否正确:结果正确(大小写不同,md5大小写应该是忽略的)

2、 检查签名参数的拼写,下单接口和二次签名的参数key拼写规则不同(前者采用plan_id 下划线形式,后者是partnerid全小写形式),且已确认是正确的(另: 签名验证工具验证,结果一致,不过这个只能说明参数格式正确)

2、 APIV2 签名key 检查,支付签约接口下单正常(不只是请求成功, 同时return_code 和result_code都为SUCCESS,说明api key 正确)

3、 检查APP端的调试使用的应用签名是否和开放平台设置的应用签名是否一致(确认release、debug使用的和平台一致)

4、 使用APIV3的app支付和扫码支付都是正常的,说明证书正确;


通过以上检查, APP端调用微信支付, 仍无法调起微信支付页面, 弹出“支付验证签名失败”; 

我需要的帮助是: 

1)目前还有哪些地方需要检查(目前看错误的定位大概在哪个步骤)导致调用支付失败,无法调起微信的支付页面? 

另外 因为V2版本API已不再维护,对应SDK已无法下载,相关的测试代码文档中也未找到 委托代扣(支付中签约)的详细说明和调试(这个问题前两天咨询过,说向你们开发提交工单,补充文档,估计短时间也没更新);

2)APP端调用参数是否只需要(appid、partnerid、prepayid、package、noncestr、timestamp、二次签名的sign), 是否根据prepayid 判断是否是委托代扣,唤起不同的支付页面?

3)开放平台设置的app应用签名,备用签名,可用于需进行签名轮换场景,和直接修改有什么区别?(也尝试将备用签名填的是大小的应用包签名,结果也是提示“支付验证签名失败”)

4)APIV3版本是否有委托代扣的文档或者接口支持,“预约扣款”这个产品是独立产品还是就是V2版本的“委托代扣”?

感谢耐心查看。

回答关注问题邀请回答
收藏

1 个回答

  • 支付社区运营
    支付社区运营
    01-07

    调起时提示“支付签名验证失败”,是调起的签名有问题导致的。

    可以把调起的参数按文档参数规则,放到在线验签工具https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=20_1进行验签。验签通过的话,可以参数写死去前端调起,以免传递的过程中参数被篡改。


    如果参数传递一致的话仍无法调起,检查下商户号和v2密钥是否准确对应,签名工具不校验密钥正确性,只校验参数格式。


    注意:不能使用下单返回的签名值,调起的签名值需要重新计算的

    01-07
    有用
    回复 1
    • 冰淇淋
      冰淇淋
      01-07
      谢谢,问题已解决, 签名出错的可能性较多, 前后端统一指定签名方式解决(如果不确定默认是什么方式的话,这里要注意下V2 SDK的签名算法的默认处理);另外,最小订阅周期是月, 一般测试人员如何测试真实的回调呢,开发人员协助模拟到期续订回调吗?
      01-07
      回复
登录 后发表内容