相同的配置,同步調用沒問題,異步調用失敗,后來看了下日志,沒登錄被攔截了。配置攔截器后解決。
但問題是登錄之后進行付款,同步通知攔截為什么就是登錄狀態?
另外同步通知會調用自定義頁面,異步通知不會調用自定義頁面
在調用異步通知時,驗證結果一直是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了。
接下來就不用我啰嗦了吧,goodluck~~~