打赏

支付宝异步通知不被调用

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

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

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

 

在调用异步通知时,验证结果一直是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);
    }
View Code

实际情况应该是这样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);
}
View Code

打印了一下编码,楼主傻眼了,GB2312!!

编码问题解决后,楼主又发现个问题,支付宝不断回调异步通知,尽管返回的是“success”。万般无奈之下找到了支付宝人工客服,在对方的配合下最终找到了原因,http502

已经成功调用了异步通知,为什么会502呢?原因就是我内网为了测试,做了外网映射。而之前申请接口的时候,填写的网站域名与映射的不同,因此bad gateway了。

接下来就不用我啰嗦了吧,goodluck~~~

posted @ 2017-06-29 22:05  每天都要学一点  阅读(2708)  评论(2编辑  收藏  举报