开发者社区> 问答> 正文

#支付宝 验签出错,建议检查签名字符串或签名私钥与应用公钥是否匹配,怎么办?

验签出错,建议检查签名字符串或签名私钥与应用公钥是否匹配

展开
收起
保持可爱mmm 2020-05-05 17:05:56 7087 0
1 条回答
写回答
取消 提交回答
  • 报错原因

    1、密钥不匹配

    2、编码格式不统一

    3、请求参数数据有误

    4、接口调用加签方式和应用上选择的加签方式不对应

    5、sdk调用的提交方法有误

    6、sdk运行环境有误

    排查方案 1、匹配不密钥

    (非证书方式请求)检查自己的项目中的私钥和上传的商户公钥是否匹配:详见【如何检验RSA2密钥是否匹配】。

    (证书方法请求)检查自己项目中的私钥和使用的商户公钥证书是否匹配:详见【如何检验密钥证书是否匹配】。

    2、编码格式不统一

    编码格式不统一会导致中文乱码,从而导致请求报错,乱码参数示例 :"subject":"鎮ㄥソ"

    兼有有中文字段的参数建议先设置123等数据,避免中文乱码进行测试看是否会报错。

    3、请求参数错误

    (1)检查必填参数是否传递,可先只传必传参数进行测试是否还会报错;

    如果必传参数测试成功,再进行设置选传参数确认是哪个参数导致报错。

    (2)不可随意添加转义符;

    (3)请求参数中不要进行空传值,或者有空格;

    (4)回调地址等携带?id=123这类自定义参数

    notify_url或者return_url等携带?id=123这类自定义参数

    错误示例:https://您的域名/notify_url.php?id=123&test=abc

    注:如果您的请求报错请同时检查您的异步地址是否符合要求 。

    4、签名方式错误

    根据应用中“接口加签方式”的“选择加签模式”,进行对应的模式签名。

    公钥证书和公钥的签名方式不同:

    相较普通公钥签名,公钥证书签名多了alipay_root_cert_sn和app_cert_sn参数参与签名。

    注:资金类接口(单笔转账到支付宝账户和现金红包)会强制检验接口是否通过公钥证书签名设置,建议如果资金类接口使用公钥方式设置签名,需改成公钥证书模式。

    5、sdk调用的提交方法有误

    该点错误正常是公钥证书方式做提交才会有此以下原因.

    检查公钥证书的response请求方式是否正确:

    (1)java语言response的execute()方法需改成certificateExecute();

    (2)PHP语言response的execute()方法仍然使用execute();

    (3).Net语言response的execute()方法需改成CertificateExecute();

    注:公钥证书和普通公钥的pageExecute和sdkExecute调用方法一致,未改变,详见【RSA2和公钥证书签名验签的区别】。

    6、检查sdk运行环境

    核实各开发语言sdk运行环境是否符合sdk要求

    注:.NET开发语言请注意在自查上述问题,没有发现问题,请更新官方最新sdk在重新测试。

    2020-05-05 17:06:04
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载