前段時間公司在緊鑼密鼓的籌備一項社區商務項目,既然作電商,支付接口就必不可少,下面咱們就看一下我在集成支付接口時所遇到的問題。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
自此,問題解決!
項目中還遇到支付寶退款接口沒法同步回調等問題,筆者就不在此文中贅述,你們可在留言中一塊兒交流討論。