收藏
回答

apiv3 接口中, 按照【APP调起支付API】的签名调起app返回 -1 ?

如题, 在统一下单api中能正常返回 prepay_id, 但是用相同的商户私钥按照 app调起支付api 加签导致客户端拉起app支付返回 -1 状态码,加签代码如下:

【统一下单API】

https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_2_1.shtml

【APP调起支付API】

https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_2_4.shtml



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

1 个回答

  • Memory
    Memory
    2021-01-15

    请按照以下几点进行排查:

    1、使用签名检查工具(https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=20_1)校验签名算法是否有误

    2、确认秘钥是否有误(服务商模式使用服务商商户号秘钥,秘钥是在商户平台配置,如果同一商户号调用其它接口成功可排除是秘钥问题)

    3、确认接口实际的请求参数与生成签名原串的参数一致,不能增加或缺少参数(可通过打印签名原串进行排查)

    4、确认参数的大小写,参数名与接口文档一致

    5、签名原串的参数值使用原始值,不需要encode

    6、接口需要使用UTF-8编码

    7、IOS正常,安卓异常的情况下,请排查包名与包签名

    8、未注册APPID

    9、项目设置APPID不正确

    10、注册的APPID与设置的不匹配

    11、服务商模式下,统一下单中的sub_appid是否有传入

    12、“唤起支付接口”中的签名类型是否与“统一下单接口”的类型一致


    参考:https://developers.weixin.qq.com/community/develop/doc/00004c5fb9036083cb8bbe36b5b809?_at=1610693603148

    2021-01-15
    有用
    回复 4
    • LZX
      LZX
      2021-01-15
      这个签名检查工具不适用于 v3版本的吧, v3版本是使用基于非对称密钥的SHA256-RSA的数字签名算法,不再使用MD5或HMAC-SHA256
      2021-01-15
      回复
    • Memory
      Memory
      2021-01-15回复LZX
      可参考以下指引:https://wechatpay-api.gitbook.io/wechatpay-api-v3/chang-jian-wen-ti/qian-ming-xiang-guan 商户侧验证微信返回签名的验签示例(PHP): 链接:https://pan.baidu.com/s/1ojWl4o3btpxymQmvRjeKBg 提取码:yx8o 验证签名工具: 链接:https://pan.baidu.com/s/1ixOAnYyZVW13dFr0jWVpvw 提取码:wujv
      2021-01-15
      回复
    • LZX
      LZX
      2021-01-15
      获取预单号(prepay_id)可以获取到,证明不是上述验签的问题;现在的问题是生成拉取app收银台的签名参数不过关。 这一步操作和之前的请求签名有什么区别吗,我已经对照了 APP调起支付API 这一接口中的签名规则,完全一样,不知道问题出在哪里
      2021-01-15
      回复
    • Memory
      Memory
      2021-01-15回复LZX
      2、第二次签名过程是否正确(此步骤商户一定要严格按文档的参数列表来做签名,用签名工具做校验)






      2.1、此处涉及一个细节:该接口没有sign_type参数,如果统一下单用的HMAC-SHA256签名,本步骤也必须按HMAC-SHA256






      2.2、本次签名的参数列表要跟文档完全匹配:大小写要一致,参数值要与统一下单接口的保持一致,特别注意参数名:partnerid,取值为mchid(开平SDK历史原因,无法改名)






      2.3、本步骤生成的sign与统一下单的不是同一个,经常有商户直接传同统一下单接口的sign过来






      3、检查客户端调用sendReq(PayReq)对象赋值的正确性(必要时让商户提供数据),有一种情况是商户会通过异步获取到后台数据,比如data对象是通过异步请求得到的对象:request.appId = data.appid; 实际appid属性值为空,
      2021-01-15
      回复
登录 后发表内容
问题标签