支付宝notify_url异步回调不成功问题

1,设置公钥

     我们用的是“支付宝公钥”,不要填应用公钥,不然就坑了

2,回调域名地址

     地址不可以带参数如:http://*****.com/notify.php,千万不要写:http://*****.com/back.php?r=notify

     如果url带了参数,可以添加伪静态url,规则例如:

     RewriteRule ^payment_callback/(.*) index.php?route=extension/payment/$1/callback [QSA]

3,需确认页面是http还是https,如果是https,那么需要安装ssl证书,证书要求有如下:要求“正规的证书机构签发,不支持自签  名”。

然后赶快,按照支付宝,宝爷的要求,去自检了一下自家的证书,下面两个地址可以很方便的检测SSL证书的合法性。

检测地址:

https://www.chinassl.net/ssltools/ssl-checker.html

https://cheapsslsecurity.com/ssltools/ssl-checker.php

把notify_url的通知域名放上去检测,报出No Intermediate/Chain certificate were found.

妈耶,俺们的证书居然不是权威机构颁发的,太可怕了。

未找到相应认证机构所颁发的认证证书链,RapidSSL RSA CA 2018并不是权威机构,所以不被支付宝所信赖,所以就没有向对应的地址notify_url进行接口回调通知。

分析出原因后,立马更换为http的回调地址,便可以正常接收通知了,后面我们换了一个由GoDaddy.com, Inc授权过后的https证书,彻底解决了这个问题。

以下是 Java 支付宝异步回调接口案例的代码示例: ```java @RequestMapping(value = "/notify_url") public String notifyUrl(HttpServletRequest request) { Map<String, String> params = new HashMap<>(); Map<String, String[]> requestParams = request.getParameterMap(); for (Iterator<String> iterator = requestParams.keySet().iterator(); iterator.hasNext(); ) { String name = iterator.next(); String[] values = requestParams.get(name); StringBuilder valueStr = new StringBuilder(); for (int i = 0; i < values.length; i++) { valueStr.append((i == values.length - 1) ? values[i] : values[i] + ","); } // 将参数放入 map 中 params.put(name, valueStr.toString()); } // 验证签名 boolean signVerified = false; try { signVerified = AlipaySignature.rsaCheckV1(params, alipayPublicKey, charset, signType); } catch (AlipayApiException e) { e.printStackTrace(); } if (signVerified) { // 验证成功 // 处理业务逻辑,例如更新订单状态 return "success"; } else { // 验证失败 return "fail"; } } ``` 其中 `notify_url` 是在支付宝开发文档中配置的异步通知接口,当有支付成功的订单时,支付宝会向该接口发送一个 POST 请求,参数会以键值对的形式传递过来,我们需要将其放入一个 Map 中,然后使用 `AlipaySignature.rsaCheckV1` 方法验证签名,如果验证成功,就可以执行业务逻辑,例如更新订单状态,并返回 "success",如果验证失败,就返回 "fail",告诉支付宝不要再发送通知。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值