支付寶即時到帳接口無法回調及其解決過程


    前段時間公司在緊鑼密鼓的籌備一項社區商務項目,既然做電商,支付接口就必不可少,下面我們就看一下我在集成支付接口時所遇到的問題。

    企業帳號在申請即時到帳支付接口后,便可下載官方的支付接口集成demo,我廠大部分項目都采用C#.net,故以C#集成支付接口。

  閑話少說,上代碼,下面是支付寶接口的核心代碼:

 1  //把請求參數打包成數組
 2             SortedDictionary<string, string> sParaTemp = new SortedDictionary<string, string>();
 3             sParaTemp.Add("partner", merchantPayInfo.Apartner);
 4             sParaTemp.Add("_input_charset", Config.Input_charset.ToLower());
 5             sParaTemp.Add("service", "create_direct_pay_by_user");
 6             sParaTemp.Add("payment_type", "1");
 7             sParaTemp.Add("notify_url", notify_url);
 8             sParaTemp.Add("return_url", return_url);
 9             sParaTemp.Add("seller_email", merchantPayInfo.SellerEmail);
10             sParaTemp.Add("out_trade_no", OrderNo);
11             sParaTemp.Add("subject", ProductName);
12             sParaTemp.Add("total_fee", OrderPrice);
13             sParaTemp.Add("body", "");
14             sParaTemp.Add("show_url", "");
15             sParaTemp.Add("anti_phishing_key", "");
16             sParaTemp.Add("exter_invoke_ip", "");
17             sParaTemp.Add("extend_param", "");
18 
19             var submit = new Submit(merchantPayInfo.Akey);
20             //建立請求
21             string sHtmlText = submit.BuildRequest(sParaTemp, "get", "確認");
22             Response.ContentType = "text/html";
23             Response.Write(sHtmlText);
24             Response.End();

 

其中必填的一些參數包括:訂單號,訂單價格。當然也要填寫同步回調的url,異步回調的url,商品名稱等,最后建立請求,我們會跳轉到如下頁面:

 

那么,問題來了:支付成功后,我們需要從支付寶的支付頁面回調到我們自己的系統,通常需要更新訂單狀態,計算銷量等,但是,即時到帳支付成功后卻不能回調,這讓我們傷透腦筋。雖然支付接口有異步調用url,並且會在24小時內調用多次,當然在前一次調用失敗的情況下。

但同步回調必不可少,同步回調過程中,支付接口會返回給我們交易號,訂單號等信息,這些記錄都是有用處的。在后續的退款接口集成中,這些數據必不可少。

為了解決這個問題,筆者聯系了采用了多種方案,最后將同步回調的url改為任意一個眾所周知的網站,比如http://www.baidu.com/。結果驚喜的發現,支付接口成功回調了!並在百度的url中附帶了我們需要的交易號等數據。

這時我們能發現:同步回調失敗,並不是支付接口出現了異常,而是我們的同步回調url有問題。這里筆者仍發現了一個奇怪的現象:如果用手機掃碼支付,那么支付成功后是能夠順利回調的,而輸入帳號支付,卻回調失敗。所以筆者不曾懷疑是同步回調的url有異常。

后來咨詢了支付寶接口的客服,了解到:手機掃碼支付和帳號支付,回調采用的重定向機制是不同的,自此,心里的一塊小石頭落地。

那么帳號支付后,如何才能正常回調呢?原來是我的本地站點,用的是主機名+端口號的組合,支付接口回調不能找到對應的回調url,即認為該url不合法。所以建議大家使用ip地址來綁定本地站點。當然,對於已經上線的項目,域名能夠順利解析,也就不會有這種問題了。

自此,問題解決!

項目中還遇到支付寶退款接口無法同步回調等問題,筆者就不在此文中贅述,大家可在留言中一起交流討論。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM