首先说明一下使用的后端语言为php.其它语言可以遇到该问题的话可以参考一下该思路.

先说一下所遇到的问题:

在对接阿里云的 alipay.trade.refund(统一收单交易退款接口)时,按照demo填写下完参数之后,提交到阿里这边返回

{"code": "40002","msg": "Invalid Arguments","sub_code": "isv.invalid-signature","sub_msg": "验签出错,建议检查签名字符串或私钥与应用公钥是否匹配,网关生成的验签字符串为:alipay_sdk=alipay-sdk-java-dynamicVersionNo&app_id=201607****045&biz_content={"out_trade_no ": "20200728112327106397754 ","total_amount ": "0.01 ","subject ": "测试test ","timeout_express ": "5 m "}&charset=UTF-8&format=json&method=alipay.trade.precreate&notify_url=http://www.opendocs.alipay.com&sign_type=RSA&timetamp=2020-07-28 11:23:32&version=1.0"
}

不管怎么换参数, 得到的结果都大同小异.

排查方法:

  • 密钥不匹配
  • 编码格式不统一
  • 请求参数数据有误
  • SDK 调用的提交方法有误
  • SDK 运行环境有误
  • 接口调用加签方式和应用上选择的加签方式不对应

发现是最后一个问题 "接口调用加签方式和应用上选择的加签方式不对应" 的原因.

原来文档的domo是有误的.原demo是:

$aop = new AopClient ();
$aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
$aop->appId = 'your app_id';
$aop->rsaPrivateKey = '请填写开发者私钥去头去尾去回车,一行字符串';
$aop->alipayrsaPublicKey='请填写支付宝公钥,一行字符串';
$aop->apiVersion = '1.0';
$aop->signType = 'RSA2';
$aop->postCharset='GBK';
$aop->format='json';
$object = new stdClass();
$object->trade_no = '2021081722001419121412730660';
$object->refund_amount = 0.01;
$object->out_request_no = 'HZ01RF001';返回参数选项,按需传入
//$queryOptions =[
//   'refund_detail_item_list'
//];
//$object->query_options = $queryOptions;
$json = json_encode($object);
$request = new AlipayTradeRefundRequest();
$request->setBizContent($json);$result = $aop->execute ( $request); $responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";
$resultCode = $result->$responseNode->code;
if(!empty($resultCode)&&$resultCode == 10000){
echo "成功";
} else {
echo "失败";
}

应该改为:

require_once  './aop/AopCertClient.php';
require_once  './aop/request/AlipayTradeRefundRequest.php';$aop = new AopCertClient ();
$aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
$aop->appId = 'your app_id';
$aop->rsaPrivateKey = '请填写应用公钥,一行字符串,例如:MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCQJAsjOjq5UUJVKvWkfyINN6NrKwU5nr.......CEB0GJxspSiTWRtV307kLcnZNRM8Ke54k8jPSWNWScnlkvlPI3yWPBvoc=';
$aop->alipayrsaPublicKey = '请填写应用私钥,一行字符串,例如:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAkCQLIzo6uVFCVSr1pH8iDTejaysFOZ6/....../WACODDbkjv1FwIDAQAB';
$aop->apiVersion = '1.0';
$aop->signType = 'RSA2';
$aop->postCharset='UTF-8';
$aop->format='json';
$aop->charset = 'UTF-8';
//是否校验自动下载的支付宝公钥证书,如果开启校验要保证支付宝根证书在有效期内
$aop->isCheckAlipayPublicCert = true;
//应用证书地址
$aop->appCertSN = $aop->getCertSN(应用证书地址);
//支付宝公钥证书地址
$aop->alipayCertSN = $aop->getCertSN(支付宝公钥证书地址);
//从支付宝根证书地址
$aop->alipayRootCertSN = $aop->getCertSN(从支付宝根证书地址);$object = new stdClass();
$object->trade_no = '2021081722001419121412730660';
$object->refund_amount = 0.01;
$object->out_request_no = 'HZ01RF001';返回参数选项,按需传入
//$queryOptions =[
//   'refund_detail_item_list'
//];
//$object->query_options = $queryOptions;
$json = json_encode($object);
$request = new AlipayTradeRefundRequest();
$request->setBizContent($json);$result = $aop->execute ( $request); $responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";
$resultCode = $result->$responseNode->code;
if(!empty($resultCode)&&$resultCode == 10000){
echo "成功";
} else {
echo "失败";
}

其实就是给出来的php代码示例的加密方式不对,官方文档:验签出错,建议检查签名字符串或签名私钥与应用公钥是否匹配 | 技术支持 & 案例 FAQy支付宝文档中心https://opendocs.alipay.com/support/01ravw

以上的官方文档也没有给出相应的php代码示例, 我这里记录下来方便以后解决问题

小结语:

        解决这个问题花费了我好长时间,刚刚开始以为是我的秘钥没有用对,因为文档描述的是:

$aop->rsaPrivateKey = '请填写开发者私钥去头去尾去回车,一行字符串';
$aop->alipayrsaPublicKey='请填写支付宝公钥,一行字符串';

我就很纳闷,开发者私钥和应用私钥会不会是不相同的呢?毕竟阿里这么大的一个企业,文字的严谨性应该要求很高,不同的名称应该代表不一样的东西.然后就疯狂找秘钥,疯狂问阿里技术同学,问多了自己也不好意思,最后得出的结论是 '接口调用加签方式和应用上选择的加签方式不对应' ,但是又没有demo,只能自己写一下.

支付宝:验签出错,建议检查签名字符串或私钥与应用公钥是否匹配,网关生成的验签字符串为...相关推荐

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

    springboot项目,公钥证书方式,进行支付宝退款时,支付宝返回:"验签出错,建议检查签名字符串或签名私钥与应用公钥是否匹配".返回值里面,sub_code值是isv.inva ...

  2. 支付宝报错: invalid-signature 错误原因: 验签出错,建议检查签名字符串或签名私钥与应用公钥是否匹配,网关生成的验签字符串为:xxx

    错误代码 invalid-signature 错误原因: 验签出错,建议检查签名字符串或签名私钥与应用公钥是否匹配,网关生成的验签字符串为:xxx https://blog.csdn.net/weix ...

  3. 错误代码 invalid-signature 错误原因: 验签出错,建议检查签名字符串或签名私钥与应用公钥是否匹配

    错误代码 invalid-signature 错误原因: 验签出错,建议检查签名字符串或签名私钥与应用公钥是否匹配 错误信息已经很明显了,就是说验签错误. 之前一度以为是自己的公钥私钥不对,一直在傻傻 ...

  4. python123判断字符串结尾_Python学习教程:在字符串的开头和结尾处做文本匹配

    原标题:Python学习教程:在字符串的开头和结尾处做文本匹配 Python学习教程:在字符串的开头和结尾处做文本匹配 我们需要在字符串的开头和结尾处按照指定的文本模式做检查,例如检查文件的扩展名.U ...

  5. php支付宝退款签名出错,支付宝-验签出错, 未配置对应签名算法的公钥或者证书...

    在对接支付接口-单笔转账到支付宝账户时,一直返回40003错误"验签出错, 未配置对应签名算法的公钥或者证书" 查看sdk AopClient.php 文件,加密类型 signTy ...

  6. 支付宝沙箱调试错误,请回到请求来源地,重新发起请求。错误代码 invalid-signature 错误原因: 验签出错 hutool JSONObject

    调试错误,请回到请求来源地,重新发起请求. 错误代码 invalid-signature 错误原因: 验签出错 我这里的错误的确就是表单里面的value应该是出现了不应该出现的换行符,  然后产生这个 ...

  7. PHP 支付宝SDK加密与解密、签名与验签(含php原生写法)

    1.使用支付宝SDK,本次使用的SDK是老版 支付宝文档:https://opendocs.alipay.com/open/54/103419 首先下载或使用新上线的Web在线加密,生成应用私钥与应用 ...

  8. 叙述无保密机制的rsa签名过程_安全系列之——RSA的公钥私钥有多少人能分的清楚?RSA的签名验签与加密解密如何使用公私钥?...

    在对接很多的互联网公司的开发平台时,这些互联网公司未来自身平台的安全,都会需要调用方签名确认调用方的身份是合法的,同时未来信息网络传输的安全可能还需要加密解密.比如对接支付宝.微信开放平台时,需要配置 ...

  9. 微信支付V3版本的 签名生成,验签,解密,统一下单的简单封装

    微信支付 V3版本的 签名生成,验签,解密,统一下单的简单封装 V3Base 获取平台证书 回调报文解密 统一下单 暂时看了文档只完成了这部分,感觉封装的不是特别完美,希望有大佬指点一下,想着封装好一 ...

最新文章

  1. 实验3  数据库综合查询
  2. 学习:Java泛型之一
  3. 【深度学习】利用深度学习进行时间序列预测
  4. Linux桌面环境介绍以及优缺点分析
  5. CSDN挑战编程——《金色十月线上编程比赛第一题:小女孩数数》
  6. c语言中的无符号字节,C语言之有符号数和无符号数
  7. ad20中怎么多选操作改层_在操作系统中CPU是怎么调度的
  8. 月薪3W的人都在用的报表工具,Excel和python自叹:比不过
  9. 一个简单限速器的java实现[1]
  10. 【Elasticsearch】Limit of total fields [1000] in index [xxxxxx_index] has been exceeded
  11. DBGrid 应用全书
  12. hdu 3635 Dragon Balls(加权并查集)2010 ACM-ICPC Multi-University Training Contest(19)
  13. c语言必背数据结构_严蔚敏数据结构(C语言版)知识点总结笔记课后答案
  14. 同济大学高等数学第7版笔记和课后答案
  15. 第五章 整合视图层技术
  16. 2021年度学习总结
  17. bug日志-win10任务栏卡死、无法加载
  18. 【Labview】基于Labview的BMI计算器
  19. < mapreduce >论文学习笔记
  20. 区块链社区:区块链从业者知音社区,分享社区精准流量粉丝资源

热门文章

  1. 当年表白流行写情书,现在流行的是……
  2. 电源硬件设计----升压(Boost)变换器基础
  3. Stata:无条件分位数回归及应用
  4. 日本向英国及欧盟发出要求,称英国脱欧不可对云服务造成影响
  5. 无线蓝牙耳机充电仓充电_无线充电是一场灾难,正在等待发生
  6. 全志T507系统烧录配置
  7. 【功能完善】公司管理界面--是否归属集团字段,显示是或者否
  8. 网工必须了解的华为华三设备基础命令行与WEB界面
  9. 不懂envoyfilter也敢说精通istio系列-ratelimit-istio ratelimit完全手册
  10. 任正非、俞敏洪告诫有赞的老板白鸦:你错的离谱