在对接支付宝电脑网站支付的时候,遇到如下报错:
“错误代码 invalid-signature 错误原因: 验签出错,建议检查签名字符串或签名私钥与应用公钥是否匹配”。
但展示的报错内容 跟实际原因有所出入(在下文中有解答),这里记录下问题的解决排查过程。
问题复现
在对接电脑网站支付时,生成 form 表单传到前端去生成支付页面,服务器托管网发现支付页面直接报错”验签出错,建议检查签名字符串或签名私钥与应用公钥是否匹配”,如下图:
这里我参考使用了官方的代码示例 [alipay.trade.page.pay(统一收单下单并支付页面接口)],如下所示:
/** 引用初始化方法,Config配置链接:https://opensupport.alipay.com/support/FAQ/08d46c24-15a8-4f1c-85a0-68fdf587f813 **/
AlipayClient alipayClient = new DefaultAlipayClient(Config.gatewayUrl, Config.app_id, Config.merchant_private_key, Config.format, Config.charset, Config.alipay_public_key, Config.sign_type);
AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();
JSONObject Content = new JSONObject() ;
Content.put("out_trade_no", "Page202311150000123");
Content.put("subject", "手机支付");
Content.put("total_amount", "0.1");
Content.put("product_code", "FAST_INSTANT_TRADE_PAY");
request.setBizContent(Content.toString());
request.setReturnUrl(Config.return_url);
request.setNotifyUrl(Config.notify_url);
AlipayTradePagePayResponse response = alipayClient.pageExecute(request);//生成form表单
/** 获取接口调用结果 **/
System.out.println(response.getBody());
问题排查过程记录
第一步:问题定位
先放一个官网提供的排查思路:
[验签出错,建议检查签名字符串或签名私钥与应用公钥是否匹配],文档中给出的报错原因可能有以下几类:
- 密钥不匹配
- 编码格式不统一
- 请求参数数据有误
- 接口调用加签方式和应用上选择的加签方式不对应
- SDK 调用的提交方法有误
- SDK 运行环境有误
为了更近一步精确快速定位问题,在 官网 搜索后,看到有相关问题的一键诊断工具帮助排查定位问题 [电脑网站支付 – 诊断工具] 。
先输入「out_trade_no」(交易参数)和「时间」看下问题诊断结果:
工具诊断结果内容跟报错的意思差不多,都是要检查 私钥与应用公钥是否匹配。
第二步:检查密钥服务器托管网是否匹配
这里首先参考官方文档给出的步骤进行核对 [如何检查公私钥是否匹配]:
验证了一下密钥,是匹配的,并且也是在对应的应用下配置的。
第三步:检查编码格式是否统一
我的项目整体都是用的 GBK 格式的,按理应该没什么问题。
先依照排查方案里面说的“兼有中文字段的参数建议先设置 123 等数据,避免中文乱码进行测试,看是否会报错”。
把 subject 字段中传入的“手机支付”换成英文“SS”测试,发现可以唤起支付 (⊙▽⊙) :
那就说明 确实是编码格式有问题。
再仔细检查了下,发现 项目传给支付宝接口的 charset 没有改过来。
复制的代码示例默认填的是 UTF-8 的(* /\*):
改成 GBK 之后继续用中文测试就成功了。
写在最后
以上就是关于电脑网站支付报错“验签出错,建议检查签名字符串或私钥与应用公钥是否匹配”所有内容了,
希望可以帮助到你~✿✿ヽ(▽)ノ✿
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
相关推荐: 浪潮云海携手陕西开放大学:超融合筑造数字教育阶梯
引言:为加快数字化发展,建设数字中国,构建智慧教育数字化应用场景,陕西开放大学(原陕西广播电视大学)作为陕西省率先运用现代教育技术开展远程开放教育的省属高校,从广播电视到互联网,再到数字化,以教育信息技术为支撑,始终站在教育技术变革前沿,勇立数字化潮头。 秉承…