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

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

    企業賬號在申請即時到賬支付接口後,即可下載官方的支付接口集成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小時內調用屢次,固然在前一次調用失敗的狀況下。ui

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

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

這時咱們能發現:同步回調失敗,並非支付接口出現了異常,而是咱們的同步回調url有問題。這裏筆者仍發現了一個奇怪的現象:若是用手機掃碼支付,那麼支付成功後是可以順利回調的,而輸入賬號支付,卻回調失敗。因此筆者未曾懷疑是同步回調的url有異常。.net

後來諮詢了支付寶接口的客服,瞭解到:手機掃碼支付和賬號支付,回調採用的重定向機制是不一樣的,自此,內心的一塊小石頭落地。code

那麼賬號支付後,如何才能正常回調呢?原來是個人本地站點,用的是主機名+端口號的組合,支付接口回調不能找到對應的回調url,即認爲該url不合法。因此建議你們使用ip地址來綁定本地站點。固然,對於已經上線的項目,域名可以順利解析,也就不會有這種問題了。htm

自此,問題解決!

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

相關文章
相關標籤/搜索