支付宝异步通知不被调用
2018-01-18 14:58
337 查看
相同的配置,同步调用没问题,异步调用失败,后来看了下日志,没登录被拦截了。配置拦截器后解决。
但问题是登录之后进行付款,同步通知拦截为什么就是登录状态?
另外同步通知会调用自定义页面,异步通知不会调用自定义页面
在调用异步通知时,验证结果一直是FALSE,检查发现汉字乱码了,
官网的demo这样写的
实际情况应该是这样Map<String,String> params = new HashMap<String,String>();
打印了一下编码,楼主傻眼了,GB2312!!
编码问题解决后,楼主又发现个问题,支付宝不断回调异步通知,尽管返回的是“success”。万般无奈之下找到了支付宝人工客服,在对方的配合下最终找到了原因,http502
已经成功调用了异步通知,为什么会502呢?原因就是我内网为了测试,做了外网映射。而之前申请接口的时候,填写的网站域名与映射的不同,因此bad gateway了。
@参考文章
同步返回处理(return_url):是一种可视化的返回,ie页面跳转通知,只要支付成功,支付宝通过get方式跳转到这个地址,并且带有参数给这个页面。客户获取信息受到买家操作的影响。如果买家支付完
成后客户服务器响应比较慢,买家在显示支付宝提示的“即时到账支付成功“时关闭页面,那么客户网站是获取不到信息,我们这边称为” 掉单“。而且这个返回处理是一次性调取,即支付成功后才调取同步返回处理。
异步返回处理(notify_url):它的数据交互是通过服务器间进行数据交互,必须将其放置在服务器上(公网)测试,服务器post消息到异步返回处理页面,需要客户技术在异步返回处理页面处理相关的数据处理
,然后每一步操作都要返回给支付宝success(不能包含其他的HTML脚本语言,不可以做页面跳转。)这个返回处理如果集成OK,那么基本不会出现掉单,因为支付宝会在24小时之内分6~10次将订单信息返回
个给客户网站,直到支付宝捕获success。
备注:同步返回处理则会受到买家操作的影响:
假如买家在操作的时候,支付宝完毕进入支付宝提示成功页面,这个时候由于服务器相应比较慢,那么买家有可能会关闭这个页面,这个时候您们就会接受不到支付宝返回的信息,还有有些网银支付后也不会调取支付宝的同步返
回处理页面,这样您在同步做数据处理同样接受不到数据。
处理支付宝返回通知失败几种情况:
1、SIGN与MYSIGN不等,responseTxt为invalid命令参数不对,该错误 是由于合作伙伴ID(parnterID)与安全校验码(key)未填,或填错导致
2、SIGN与MYSIGN相等,responseTxt为false,是由于服务器、端口等因素导致,这时请检查
a.防火墙是否屏蔽支付宝的IP(支付宝锁使用的IP地址是:121.0.26.11,范围:121.026.0~255)
b.端口80或者443端口开放没有或者被其他服务占用
c.以上如果都没有问题,可能会是网络验证超时导致(支付宝验证时间是1分钟,SIGN与MYSIGN不等会导致超时),需要等待网络稳定再确定问题
3、SIGN与MYSIGN不等,responseTxt为true,此时只有两种情况会出现:
其一:传递参数时格式不符合(例如:带自定义参数)导致签名不一致
其二:编码格式出现问题,这时候请检查服务器编码和网站编码是否一致,可以写编码过滤解决也可以在返回页面强制编码转换
但问题是登录之后进行付款,同步通知拦截为什么就是登录状态?
另外同步通知会调用自定义页面,异步通知不会调用自定义页面
在调用异步通知时,验证结果一直是FALSE,检查发现汉字乱码了,
官网的demo这样写的
//获取支付宝POST过来反馈信息 Map<String,String> params = new HashMap<String,String>(); Map<String,String[]> requestParams = request.getParameterMap(); for (Iterator<String> iter = requestParams.keySet().iterator(); iter.hasNext();) { String name = (String) iter.next(); String[] values = (String[]) requestParams.get(name); String valueStr = ""; for (int i = 0; i < values.length; i++) { valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + ","; } //乱码解决,这段代码在出现乱码时使用 valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8"); params.put(name, valueStr); }
实际情况应该是这样Map<String,String> params = new HashMap<String,String>();
Map<String,String[]> r bb64 equestParams = request.getParameterMap(); for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) { String name = (String) iter.next(); String[] values = (String[]) requestParams.get(name); String valueStr = ""; for (int i = 0; i < values.length; i++) { valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + ","; } params.put(name, valueStr); }
打印了一下编码,楼主傻眼了,GB2312!!
编码问题解决后,楼主又发现个问题,支付宝不断回调异步通知,尽管返回的是“success”。万般无奈之下找到了支付宝人工客服,在对方的配合下最终找到了原因,http502
已经成功调用了异步通知,为什么会502呢?原因就是我内网为了测试,做了外网映射。而之前申请接口的时候,填写的网站域名与映射的不同,因此bad gateway了。
支付宝接口零碎知识
@参考文章同步返回处理(return_url):是一种可视化的返回,ie页面跳转通知,只要支付成功,支付宝通过get方式跳转到这个地址,并且带有参数给这个页面。客户获取信息受到买家操作的影响。如果买家支付完
成后客户服务器响应比较慢,买家在显示支付宝提示的“即时到账支付成功“时关闭页面,那么客户网站是获取不到信息,我们这边称为” 掉单“。而且这个返回处理是一次性调取,即支付成功后才调取同步返回处理。
异步返回处理(notify_url):它的数据交互是通过服务器间进行数据交互,必须将其放置在服务器上(公网)测试,服务器post消息到异步返回处理页面,需要客户技术在异步返回处理页面处理相关的数据处理
,然后每一步操作都要返回给支付宝success(不能包含其他的HTML脚本语言,不可以做页面跳转。)这个返回处理如果集成OK,那么基本不会出现掉单,因为支付宝会在24小时之内分6~10次将订单信息返回
个给客户网站,直到支付宝捕获success。
备注:同步返回处理则会受到买家操作的影响:
假如买家在操作的时候,支付宝完毕进入支付宝提示成功页面,这个时候由于服务器相应比较慢,那么买家有可能会关闭这个页面,这个时候您们就会接受不到支付宝返回的信息,还有有些网银支付后也不会调取支付宝的同步返
回处理页面,这样您在同步做数据处理同样接受不到数据。
处理支付宝返回通知失败几种情况:
1、SIGN与MYSIGN不等,responseTxt为invalid命令参数不对,该错误 是由于合作伙伴ID(parnterID)与安全校验码(key)未填,或填错导致
2、SIGN与MYSIGN相等,responseTxt为false,是由于服务器、端口等因素导致,这时请检查
a.防火墙是否屏蔽支付宝的IP(支付宝锁使用的IP地址是:121.0.26.11,范围:121.026.0~255)
b.端口80或者443端口开放没有或者被其他服务占用
c.以上如果都没有问题,可能会是网络验证超时导致(支付宝验证时间是1分钟,SIGN与MYSIGN不等会导致超时),需要等待网络稳定再确定问题
3、SIGN与MYSIGN不等,responseTxt为true,此时只有两种情况会出现:
其一:传递参数时格式不符合(例如:带自定义参数)导致签名不一致
其二:编码格式出现问题,这时候请检查服务器编码和网站编码是否一致,可以写编码过滤解决也可以在返回页面强制编码转换
相关文章推荐
- 支付宝异步通知不被调用
- 支付宝即时到账异步通知不被调用的一点总结
- 支付宝接口使用文档说明 支付宝异步通知(notify_url)与return_url. .
- 支付宝支付异步通知签名验证sign和mysign不一致的问题
- 支付宝接口使用文档说明 支付宝异步通知
- 支付宝异步通知处理
- 支付宝异步通知(notify_url)与return_url.
- 关于java支付宝接口的异步通知的问题
- asp.net,mvc做支付宝手机接口notify_url异步通知没有执行
- [置顶] 支付宝异步通知处理(完整 上线版)
- 支付宝接口使用文档说明 支付宝异步通知
- 支付宝接口使用文档说明 支付宝异步通知
- 支付宝主动通知调用的页面
- 微信小程序之支付后调用SDK的异步通知及验证处理订单
- SpringMVC下微信、支付宝一直进行异步通知
- jersey处理支付宝异步回调通知的问题:java.lang.IllegalArgumentException: Error parsing media type 'application/x-www-form-urlencoded; text/html; charset=UTF-8'
- 支付宝接口使用文档说明 支付宝异步通知(notify_url)与return_url
- 支付宝接口使用文档说明 支付宝异步通知(notify_url)与return_url
- 使用OpenSSL做RSA签名验证 支付宝移动快捷支付 的服务器异步通知
- 支付宝中的手机网站支付接口,php版 notify_url.php 异步通知页面未成功执行