支付宝异步通知不被调用

相同的配置,同步调用没问题,异步调用失败,后来看了下日志,没登录被拦截了。配置拦截器后解决。

    但问题是登录之后进行付款,同步通知拦截为什么就是登录状态?

另外同步通知会调用自定义页面,异步通知不会调用自定义页面

 

在调用异步通知时,验证结果一直是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[]> requestParams = 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,此时只有两种情况会出现:
其一:传递参数时格式不符合(例如:带自定义参数)导致签名不一致
其二:编码格式出现问题,这时候请检查服务器编码和网站编码是否一致,可以写编码过滤解决也可以在返回页面强制编码转换


  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值