相同的配置,同步调用没问题,异步调用失败,后来看了下日志,没登录被拦截了。配置拦截器后解决。
但问题是登录之后进行付款,同步通知拦截为什么就是登录状态?
另外同步通知会调用自定义页面,异步通知不会调用自定义页面
在调用异步通知时,验证结果一直是FALSE,检查发现汉字乱码了,
官网的demo这样写的
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
//获取支付宝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>();
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
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了。
接下来就不用我啰嗦了吧,goodluck~~~