支付寶介面使用文件說明 支付寶非同步通知(notify_url)與return_url. .
現支付寶的通知有兩類。
A伺服器通知,對應的引數為notify_url,支付寶通知使用POST方式
B頁面跳轉通知,對應的引數為return_url,支付寶通知使用GET方式 (通知地址不需要像以前一樣去賬戶內設定,而是由客戶在支付的時候通過引數傳遞給我地址。
例如 notify_url=http://www.xxx.com/notify_alipay.asp 注意:www.XXX.com是您網站的域名,也可以用ip地址代替。對於伺服器通知,ip地址一定是公網的,私有地址(例如10.2.1.1或者 192.168.1.1)支付寶無法通知到客戶端)
以下內容來自支付寶官方網站,不過由於地址改變了,導致原帖無法訪問,通過快照查詢到其內容,特分享一下.
1. 確認您使用的介面是用notify_url還是return_url。
2. notify_url為伺服器通知,支付寶可以保證99.9999%的通知到達率,前提是您的網路通暢。
3. return_url為網頁重定向通知,是由客戶的瀏覽器觸發的一個通知,若客戶去網銀支付,也會受銀行介面影響,由於各種影響因素特別多,所以該種類型的通知支付寶不保證其到達率。
買家付款成功後,會跳到 return_url所在的頁面,這個頁面可以展示給客戶看,這個頁面只有付款成功才會跳轉,並且只跳轉一次..
notify_url: 伺服器後臺通知,這個頁面是支付寶伺服器端自動呼叫這個頁面的連結地址,這個頁面根據支付寶反饋過來的資訊修改網站的定單狀態,更新完成後需要返回一個success給支付寶.,不能含有任何其它的字元包括html語言.
流程:買家付完款(trade_status=WAIT_SELLER_SEND_GOODS)--->支付寶通知 notify_url--->如果反饋給支付寶的是success(表示成功,這個狀態下不再反饋,如果不是繼續通知,一般第一次傳送和第二次傳送的時間間隔是3分鐘)
剩下的過程,賣家發貨,買家確認收貨,交易成功都是這個流程
-------------------------------------------------------------------
大家想必都有這種困惑——拿到支付寶的介面程式碼後,儘管裡面的程式有註釋,介面程式碼包中也附有開發說明,但還是不知道該如何入手。這不難想象是什麼原因,因為自己並不瞭解這個介面的工作原理是什麼?
那麼這篇文章就是要向大家全面展示關於支付寶介面的所有東西,以便大家能快速上手把介面接入自己的專案中,也能幫助那些已經對支付寶介面有所瞭解的程式開發者們更瞭解支付寶的一些通用規則、特殊用途等。
正題開始——
一、 結構
a) 一般由兩部分組成,接入部分與通知返回部分。接入部分即為傳遞引數等資訊組合成超級連結,並用該連結來進行跳轉。通知返回部分則是支付寶伺服器對該筆訂單處理完畢後,通知與返回該筆訂單的詳細資訊到商戶伺服器,商
戶伺服器接收到後,並對其進行資料處理。
b) 以實物標準雙介面ASP程式碼中的程式為例。
i. 接入部分的頁面檔案包含:配置頁alipay_Config.asp、方法詳細頁alipay/Alipay_Payto.asp、程式入口頁index.asp以及MD5加密方法類頁alipayto/Alipay_md5.asp。
ii. 通知返回部分的頁面檔案包含:方法詳細頁alipay/Alipay_Payto.asp、MD5加密方法類頁alipayto /Alipay_md5.asp、支付完成後(支付寶處理完畢後)自動跳轉回的自定義頁面return_Alipay_Notify.asp、兩方伺服器間相互互動(肉眼無法見到的)通知頁Alipay_Notif
y.asp。
這裡大家可以一目瞭然,MD5加密方法類與方法詳細頁不論是哪部分都有被呼叫,因此這兩個檔案可視為核心程式碼部分,若想理解介面的工作原理則要從該部分入手。
c) 以實物標準雙介面的ASP.NET C#語言程式碼程式為例:
i. 接入部分的頁面檔案包含:無需更改的ALIPAY的類檔案App_Code/AliPay.cs及入口頁面檔案Default.aspx
ii. 通知返回部分的頁面檔案包含:兩方伺服器間相互互動(肉眼無法見到的)通知頁Alipay_Notify.aspx、支付完成後(支付寶處理完畢後)自動跳轉回的自定義頁面Alipay_Return.aspx、
無需更改的ALIPAY的類檔案App_Code/AliPay.cs
這個架構是否更容易理解了?沒錯,核心部分的運算過程就在AliPay.cs這個檔案中。
-----------------------------------------------------------------
二、 工作原理
大家對結構部分已經有所瞭解,那麼我們就開始分析具體的這個介面是如何運作的。
a) 接入部分原理
i. 第一步——選定引數資訊:
結合技術文件以及介面程式碼DEMO,選定傳遞給支付寶伺服器的引數,以實物標準雙介面為例。如必傳項service、partner、seller_email、sign、sign_type、out_trade
_no、price、subject、quantity、payment_type以及最少一組的物流資訊引數三個logistics_type、logistics_fee、logistics_payment
等,選填項body、discount、show_url等。
以ASP.NET C#語言程式碼程式為例:
string service = "trade_create_by_buyer";
string seller_email = "[email protected]";
string sign_type = "MD5";
string key = "********************************";
string partner = "2088************";
string _input_charset = "utf-8";
string show_url = "http://www.alipay.com/";
string out_trade_no = TxtOrderno.Text.Trim();
string subject = TxtSubject.Text.Trim();
string body = TxtBody.Text.Trim();
string price = TxtPrice.Text.Trim();
string quantity = TxtQua.Text.Trim();
string logistics_type = "POST";
string logistics_fee = TxtPost.Text.Trim();
string logistics_payment = "BUYER_PAY";
string notify_url = "http://www.xxx.com/swnet05utf8/Alipay_Notify.aspx";
string return_url = "http://www.xxx.com/swnet05utf8/Alipay_Return.aspx";
ii. 第二步——排序:
把這些引數的變數名(即技術文件裡給出的變數名,以這種方式組合:service=”trade_create_by_buyer”作為一串字串)按從a到z的順序依次排序。以ASP.NET C#語言程式碼程式為例,該功能在ALIPAY.CS類中;以ASP程式碼中的程式為例,該功能在alipayto/Alipay_Payto.asp檔案中。
iii. 第三步——加密:
目前一般的加密方式是MD5,不論是哪種加密方式,要加密的資訊是要傳給支付寶的資訊,且存在於技術文件中,而非自定義的變數名。對以上排序好的所有引數(不包括閘道器引數即:string gateway = "https://www.alipay.com/cooperate/gateway.do?" ;)以迴圈的方式,用‘&’字元拼接成一長串字串(這裡需要注意,所有的引數都是&字元來拼接的,拼接後直接再拼接安全校驗碼Key, 在程式中大家可看到,這個key是直接加到該字串後面而沒有用&字元 ),之後進行加密。得出的加密字串集儲存於sign這個引數中。
iv. 第四步——拼接字串成URL連結
我們已經拿到了各個引數、引數所屬的值以及加密得出的加密字串,那麼手上現在的所有引數資訊的格式,應當都是一組一組的 service=”trade_create_by_buyer”這種格式的字串,拼接的話,則依靠迴圈的方式遍歷所有的這種字串,因為這次的拼接是要成URL連結,所以之前排除在外的閘道器gaetway和加密型別引數sig
n_type也都會被拼接進來,那麼,連線的字元則用大家所熟知的字元’&’,就這樣得出一個完整的URL連結地址,如:
https://www.alipay.com/cooperate/gateway.do?s...3d199ba&sign_type=MD5
該連結來自支付寶官方的技術文件“標準實物雙介面技術文件”
v. 第五步——自動跳轉
第四步中已經運算得出的URL連結字串,我們則要讓其活起來,那麼活起來的方式就是——用程式呼叫它,也就是所謂的頁面自動跳轉。這樣就能跳到支付寶的官方收銀臺頁面。
可以說,現在已經成功的把支付寶介面融合進了大家自己的網站中,且能夠使用支付寶來進行付款了。
b) 通知返回部分原理
i. 專業術語
通知返回是兩個頁面,即傳遞給支付寶時的notify_url引數所對應的頁面檔案(asp.net的是Alipay_Notify.aspx、asp的是Alipay_Notify.asp)稱之為通知頁,傳遞
給支付寶時的return_url引數所對應的頁面檔案(asp.net的是Alipay_Return.aspx、asp的是return_Alipay_Notify.asp)稱之為返回頁。
ii. 通知返回原理
1. 第一步——驗證是否是支付寶伺服器發來的請求:
a) 以asp程式程式碼為例:
alipayNotifyURL = "http://notify.alipay.com/trade/notify_query.do?"
alipayNotifyURL = alipayNotifyURL &"partner=" & partner & "¬ify_id=" & request("notify_id")
Set Retrieval = Server.CreateObject("Msxml2.ServerXMLHTTP.3.0")
Retrieval.setOption 2, 13056
Retrieval.open "GET", alipayNotifyURL, False, "", ""
Retrieval.send()
ResponseTxt = Retrieval.ResponseText
Set Retrieval = Nothing
得到的便是ResponseTxt的值,這是下面的步驟要用到的。
b) 以asp.net C#程式程式碼為例:
//獲取遠端伺服器ATN結果,驗證是否是支付寶伺服器發來的請求
public String Get_Http(String a_strUrl, int timeout)
{
string strResult;
try
{
HttpWebRequest myReq = (HttpWebRequest)HttpWebRequest.Create(a_strUrl);
myReq.Timeout = timeout;
HttpWebResponse HttpWResp = (HttpWebResponse)myReq.GetResponse();
Stream myStream = HttpWResp.GetResponseStream();
StreamReader sr = new StreamReader(myStream, Encoding.Default);
StringBuilder strBuilder = new StringBuilder();
while (-1 != sr.Peek())
{
strBuilder.Append(sr.ReadLine());
}
strResult = strBuilder.ToString();
}
catch (Exception exp)
{
strResult = "錯誤:" + exp.Message;
}
return strResult;
}
呼叫部分:
string alipayNotifyURL = "https://www.alipay.com/cooperate/gateway.do?service=notify_verify";
string partner = "2088************";
alipayNotifyURL = alipayNotifyURL + "&partner=" + partner + "¬ify_id=" + Request.Form["notify_id"];
//獲取支付寶ATN返回結果,true是正確的訂單資訊,false 是無效的
string responseTxt = Get_Http(alipayNotifyURL, 120000);
得到的便是ResponseTxt的值,這是下面的步驟要用到的。
2. 第二步——排序:
該部分的排序的原理與“接入部分”的原理“排序步驟”一樣,值得注意的是 ,這裡的引數是支付寶通知返回時,傳回來的訂單資訊的各種引數以及值。http://www.k686.com/
3. 第三步——加密:
該部分的加密原理與“接入部分”的原理“加密步驟”一樣,依然值得注意的部分是加密的引數資訊,這些引數資訊是來源於上面一步驟排序好後的引數拼接起來的字串來加密的。
4. 第四步——判斷:
上面我們有得到加密的結果(命名為mysign吧)、檢驗是否是支付寶發來的訊息的正確性ResponseTxt、以及通過POST或GET的方式得到的sign引數的值,那麼這個判斷的含義便是通知返回裡最重要
的部分了,因為它是來檢驗下面的程式是否執行我們的資料處理的。如何判斷呢?各語言程式程式碼中,都是把加密得出的結果mysign與從支付寶那或得到的sign的值進行比較,並且還要讓reponseTxt這個的
值要等於true,這樣才達到驗證成功。值得注意的是 ,大家都有遇到過這種事,支付部分即接入部分的確是做好了,但為什麼無法與支付寶的交易資訊同步,出現的問題就在這個判斷上沒有成功,下面的第五部分則會詳細說明。
5. 第五步——自身網站的資料處理
終於判斷成功了,程式已經執行到了這裡。各語言程式程式碼的這塊地方的註釋都寫著“更新自己資料庫的訂單語句”或是“這裡可以指定你需要顯示的內容”。如字面上的意思,這塊地方就是要我們大家來對這筆交易資訊進行數
據處理,即編寫程式。這個說法大概專業了點,簡單易懂的講法便是,支付寶的交易成功的資訊和其他的一切交易狀態,自己的網站也能夠對這筆訂單同步起來,即支付寶裡這筆訂單的交易狀態是“買家已付款等待賣家發貨”,
那麼自己網站裡顯示的這筆狀態也因如此,那麼就應當在這裡面寫下諸如:
if (Request.Form["trade_status"] == "WAIT_SELLER_SEND_GOODS")// 判斷支付狀態_買家付款成功,等待賣家發貨(文件中有列舉表可以參考)
{
//更新自己資料庫的訂單語句,請自己填寫一下
string strOrderNO = Request.Form["out_trade_no"];//訂單號
string strPrice = Request.Form["price"];//金額
string sql = "update order_table set order_status = ‘買家已付款,等待賣家發貨’ where order_no = " + strOrderNO;
Update(sql);
}
等資料庫處理程式碼。
iii. 存在的區別
1. 大家仔細閱讀程式碼不難發現,在通知頁中程式執行時,獲取引數的方法是用POST方式,而返回頁中程式執行時,獲取引數的方法是用GET方式。由此可知一些基本的資訊——返回頁傳遞回來的引數資訊是儲存在URL連結
裡的,而通知頁的引數資訊是不在URL連結裡,也能從中推斷出二者在功能上的差異。
2. 大家可看到通知頁面比返回頁中多一個環節,那就是Response.Write("success");
作用上不同的詳細說明,大家可以看下面的第四部分。http://www.k686.com/
-------------------------------------------------------------------
三、 引數
首先大家有個疑問,技術文件中的輸入引數列表中給出了諸多引數,而手上拿到的程式碼裡只寫了一部分引數來進行傳遞資訊,這究竟是為什麼?那麼我們先帶著這個疑問往下看。
以下討論的引數不涵蓋閘道器gateway、加密引數sign、加密型別sign_type,因為這些都是必須的。
以實物標準雙介面為例,可把引數看做幾個功能部分組成
a) 不可缺少的引數
i. service服務引數,這個是用來區別這個介面是用的什麼介面,所以絕對不能修改。
ii. partner合作身份者ID、key安全校驗碼或稱私鑰這一組引數是簽約合同生效後才能拿的到,partner是來鑑別是哪個商家與支付寶簽約,而這個Key它如同鑰匙般相當重要。
iii. seller_email收款人支付寶賬號,支付寶中有手機型別、電子郵件型別的支付寶賬號是都可以用這個引數的。
iv. subject在支付寶的收銀臺裡是直接與商品名稱關聯在一起的,但是說的更準確些的話,這個引數是這筆交易的名稱,因為這筆交易不一定只買一件商品。它的作用不僅是在收銀臺裡可以清晰的顯示出來,而且在支付寶的賬
戶的交易明細的列表裡,它也是排在第一列,由此可推測出,它有財務對賬、作為交易查詢的篩選條件等諸多作用。非常重要。
v. out_trade_no技術文件中給出的是商戶交易號(確保在商戶系統中唯一),顧名思義這個就是我們大家自己網站的訂單系統裡的唯一訂單號,而非支付寶的。這裡需要強調的,這個訂單號必須得是唯一的,如何唯一法?自己網站
裡訂單系統的訂單號是絕對唯一的吧,支付寶要求的唯一就是這個,為什麼非要唯一?支付寶會根據訂單號來判定這筆訂單對於這個商家的所有交易中是否是唯一的。
vi. price金額、quantity數量,這裡設定有兩種方式一種商品的單價金額,多個數量(即大於等於1)。另種是數量為1,金額代表總額,甚至是包含了運費。為什麼大部分的客戶要這麼做?原因很簡單,第一,購物車裡的東西不一定是單純的
一件或者多件相同的商品,那麼為商品設定金額時就有困難了,因此這裡用總額是最好的,而數量就預設為1。第二,運費的設定很多客戶是與各家快遞公司簽約、每件物品的快遞費用也不盡相同,為了省去麻煩,在程式計算的
時候乾脆把運費也加進去。因此我們只需要記住一件事,這個price的金額就是所謂的總額了。
vii. payment_type支付型別,沒什麼可說的直接寫成1,無需改動。
viii. 物流資訊logistics_type、logistics_fee、logistics_payment這是一組物流資訊,實物標準雙介面中必須得至少有一組物流資訊,也就是指這三個引數了,最多可有三組,哪三組呢?logistics_type_1、logistics_fee_1、 logistics_paymen
t_1(第二組);logistics_type_2、logistics_fee_2、logistics_payment_2(第三組)。後兩組為可選項。一般前面有說Price已經是總額了且包含了運費,那
麼這裡物流運費就直接設定成0即可,即logistics_fee=”0”,其他兩個的資訊可參考技術文件來填寫,因為要從技術文件中的列舉列表裡來選擇,所以絕不可亂填寫。
b) 可增加的有用引數
i. 物流資訊最多三組,最少一組,這已經在前部分有所提及,這裡就不再細說。
ii. _input_charset,當是UTF-8的編碼格式時必須得用到且不允許為空的,即_input_charset=”utf-8”
iii. notify_url、return_url,return_url代表支付完畢後可以自動從支付寶的官方頁面跳轉回來,notify_url這個是防止調單的首選最佳工具。
iv. body,在支付寶收銀臺中的商品描述裡顯示,如果subject是訂單名稱的話,那麼這個body則最準確的稱之為訂單描述,其實個人認為它作為備註之類的更為恰當。很多人都很鬱悶支付寶為何不能像其他公司
的介面有個自定義的引數來存放客戶想要的東西,其實body也具有類似的這種功能,它不僅容納的資訊是所有引數裡最大的,而且還是以字串的形式儲存,個人認為它其實也是非常重要的不可缺少的引數之一呢。
v. discount折扣,顧名思義如果小於0,則是用原金額Price*quantity+(discount),實際金額便比原總額小了。現在有些商戶有支付寶的優惠卷,而優惠卷的用途也是在這個引數中體現,具體做法與前
面無異。
vi. show_url商品展示地址,這個連結的作用是在支付寶收銀臺的商品連結旁邊有個下劃線“詳情”的連結,而點連結彈出的一個新頁面便是這個商品展示地址的頁面。
vii. 收貨資訊receive_name、receive_address、receive_zip、receive_phone、 receive_mobile,這些資訊若也設定為傳遞給支付寶的引數之一的話,那麼在支付寶收銀臺點選下一步的時候,本該出現的填寫收貨資訊頁面不見蹤影,而直接跳到了收貨資訊頁面的下一個頁面去了。很多商戶在自己的網站的購物
流程中都有一個填寫收貨資訊的選項卡,為了省去到支付寶收銀臺中還要填寫一次收貨資訊的麻煩,那麼這些收貨資訊的引數就派上用場了。值得注意的是,收貨人姓名和地址是必填項,不然還是會出現收貨資訊填寫頁。
viii. buyer_email買家支付寶賬號,這個設定好後呈現的效果便是,原本是空的支付寶賬號的輸入框此時已經有個支付寶賬號在裡面放置。
c) 剩下的引數無需理會
整個實物標準雙介面的引數介紹完畢,那麼其他介面的引數還要介紹嗎?大家從上面分析得出的東西對比技術文件的引數列表是否看出什麼來了?
1、 引數列表的最後一列叫“可空”,N代表不允許為空,Y代表允許為空,結合上面的不可缺少引數與增加的有用引數來進行比較,不難發現,不可缺少的引數全是為N的。
2、 有些為Y的引數有一組,例如buyer_email、buyer_id,凡是遇到這種的一般都是二可選一也可都不選,或是二必選一。舉例說明:二必選一的是seller_email、seller_id,二選一的
是buyer_email、buyer_id。
所有的介面的引數如此分析就能判斷出哪些是重要引數哪些可不要,結合技術文件與程式介面來研究就能一目瞭然。
--------------------------------------------------------
四、 通知返回
a) 返回頁
傳遞給支付寶時的return_url引數所對應的頁面檔案。
具備的屬性:
1、支付介面中買家的購買流程已經走到支付寶裡且支付寶提示支付成功時,頁面會自動跳轉回自身網站的這個頁面裡來。
2、同步的,無時差
3、獲得引數的方法是用get方式獲取。
4、不論跳轉回來程式判斷是真還是假(if(sign = mysign and responseTxt = true))只跳轉回來一次,不重複。
5、這個並不是支付寶伺服器呼叫了該頁面,而是通過與組合拼接各引數形成的URL連結原理等同,拼接出來的URL連結,之後程式上做自動跳轉。
6、基於5的原因,該頁面的程式除錯可不必在伺服器上而是本機上除錯、執行。
b) 通知頁
傳遞給支付寶時的notify_url引數所對應的頁面檔案
具備的屬性:
1、這個通知頁就是被支付寶呼叫才能啟動的。
2、伺服器間的互動,不像返回頁肉眼可以看到,這個是看不到的。
3、獲得引數的方法是用POST方式獲取。
4、支付寶中的該筆交易存在,且該筆交易狀態發生了變更,就會被呼叫。
5、被呼叫程式判斷(if(sign = mysign and responseTxt = true)),若我們自己在該判斷中有做程式編寫,成功則不再被呼叫,不成功則會反覆被呼叫。
6、非同步的,第一次收到訂單資訊(以下都稱之為“通知”)是與返回頁近乎等同或等同的同步時間,在判斷不成功的情況下,會收到第二次第三次等次數的通知,時間間隔從最先的一兩分鐘,到後面的幾個小時。失效時間是4
8小時。
7、基於6的原因,該頁面的程式除錯必須在伺服器上除錯、執行。
8、程式編寫時必須採用程式執行成功,才寫頁面response.Write(“success”);,不成功則寫頁面response.Write(“fail”); 支付寶根據success來判定是否要重新再次傳送通知。
9、該頁面的Html頁面中必須是空白、無任何Html標籤、無任何空格、不允許做頁面跳轉。
以C# ASP.NET實物標準雙介面程式碼為例:
if (mysign == sign && responseTxt == "true")
{
if (Request.Form["trade_status"] == "WAIT_BUYER_PAY")// 判斷支付狀態_等待買家付款(文件中有列舉表可以參考)
{
//更新自己資料庫的訂單語句,請自己填寫一下
}
else if (Request.Form["trade_status"] == "WAIT_SELLER_SEND_GOODS")// 判斷支付狀態_買家付款成功,等待賣家發貨(文件中有列舉表可以參考)
{
//更新自己資料庫的訂單語句,請自己填寫一下
string strOrderNO = Request.Form["out_trade_no"];//訂單號
string strPrice = Request.Form["price"];//金額
string sql = "update order_table set order_status = '買家已付款,等待賣家發貨' where order_no = @out_trade_no";
Update(sql,para);
}
else if (Request.Form["trade_status"] == "WAIT_BUYER_CONFIRM_GOODS")// 判斷支付狀態_賣家已發貨等待買家確認(文件中有列舉表可以參考)
{
//更新自己資料庫的訂單語句,請自己填寫一下
string strOrderNO = Request.Form["out_trade_no"];//訂單號
string strPrice = Request.Form["price"];//金額
string sql = "update order_table set order_status = '賣家已發貨,等待買家確認收貨' where order_no = @out_trade_no";
Update(sql, para);
}
else if (Request.Form["trade_status"] == "TRADE_FINISHED")// 判斷支付狀態_交易成功結束(文件中有列舉表可以參考)
{
//更新自己資料庫的訂單語句,請自己填寫一下
string strOrderNO = Request.Form["out_trade_no"];//訂單號
string strPrice = Request.Form["price"];//金額
string sql = "update order_table set order_status = '交易成功' where order_no = @out_trade_no";
Update(sql, para);
}
else
{
//更新自己資料庫的訂單語句,請自己填寫一下
}
Response.Write("success");
}
else
{
Response.Write("fail");
}
c) 在支付寶的眾多介面中,不是所有的介面都擁有通知頁與返回頁的。
有的介面只有返回頁;有的介面有通知頁且用XML格式的內容顯示在當前頁面中;有的沒有通知頁也沒有返回頁僅僅只以XML格式的內容顯示在當前頁面中。所以,我們要根據各介面的技術文件與程式例項來做相應的資料處
理。
d) 大家這裡存在一個疑問,一般大家的做法都是把資料庫更新些在返回頁中,但是很多情況下出現了訂單不同步即掉單現象。這是為什麼?
答:返回頁是當前頁面自動跳轉的,這雖然跳轉的反應速度不錯,但人的手動關閉該頁面操作絕對可以使之在沒有跳轉回來之前就關掉了該頁面,此時原本該資料庫更新的程式並沒有被啟動,這樣直接導致了掉單,所以一般大商
戶,尤其是網路遊戲行業的即時到帳充值的技術做法是:返回頁中有訂單處理程式,通知頁中也有,當返回頁中的訂單沒做過處理時,通知頁中的資料處理程式便啟動;這樣即可近乎100%解決掉單問題(還有種掉單原因是大家自己的伺服器出現問題,比如MS3XML.DLL問題,這個問題至今沒有什麼可以解決的辦法,只能重灌或是更換伺服器,也有的伺服器因為中毒才導致的)。本文來源於 http://www.k686.com/
-------------------------------------------------
五、 除錯
接入部分做好了,通知返回部分也做好了,那麼開始除錯吧。
除錯也分成兩大部分來做。
a) 部分網站用了框架模式frame,但這個並不適用支付寶的介面程式,因此絕對不能把支付寶的介面頁面置於整個網站的框架之下。
b) 確定好要用POST還是GET方式來傳遞引數,二者不能混用。由於有些網站中不一定只有一個介面入口,所以整個網站都必須保持一致性,不能這個介面用POST,那個介面用GET,這樣直接導致後續出現一系列連查詢
原因都極其困難的現象。
c) 接入部分的除錯工作,則是輸入支付寶要求的格式的值,如subject、body的值不允許有非法字元、金額格式必須是小數點後兩位數或是正整數且不是金額格式(即$123.00),以及非常重要的一個原則,傳遞的引數要麼不傳遞這個引數(即傳遞的眾多引數中,這個引數完全不存在),要麼這個引數不允許為空。很多人在除錯時支付出現一系列“除錯錯誤”有很大的一部分原因就是參
數的設定存在問題。
d) 編碼格式一定要確認再確認,在支付時直接出現“除錯錯誤,SIGN不對”只有兩種原因,一是C部分已提到的引數的設定問題,另一個便是這個編碼格式的問題。編碼格式是非常重要的,絕對不能這個地方用GBK,另個地方用utf-8。
e) 通過介面走一次真實的操作,若是支付介面,則走一筆真實的交易,金額則是0.01元(支付寶是沒有測試環境的,所以請老實的使用自己簽約的號去走真實交易),不要覺得很麻煩,也不要把這個工作交個經理或者你的老闆
來做,因為它直接關係到你後續的操作步驟與除錯的順暢程度。
相關推薦
支付寶介面(掃碼支付的原理)使用文件說明 支付寶非同步通知(notify_url)與return_url.
支付寶介面使用文件說明 支付寶非同步通知(notify_url)與return_url. 現支付寶的通知有兩類。 A伺服器通知,對應的引數為notify_url,支付寶通知使用POST方式 B頁面跳轉通知,對應的引數為return_url,支
支付寶介面使用文件說明 支付寶非同步通知(notify_url)與return_url. .
支付寶介面使用文件說明 支付寶非同步通知(notify_url)與return_url. 現支付寶的通知有兩類。 A伺服器通知,對應的引數為notify_url,支付寶通知使用POST方式 B頁面跳轉通知,對應的引數為return_url,支付寶通知使用GET方式 (通知地
支付寶非同步通知notify_url 與 同步通知return_url的區別
常見問題:1.根據程式碼例項和開發文件熟悉介面,將程式碼例項的相關引數資訊填寫完整(可以虛擬引數),在本地測試(不上傳到伺服器)支付寶介面。如果沒有任何問題再將介面根據實際業務做到網站或者網站後臺。2.測試時您們需要兩個支付寶賬戶,其中一個必須實名認證並且保證有一定的金額,以便測試時使用。另外一個帳戶可以作為
支付(非同步通知notify_url 與 同步通知return_url的區別)
同步通知和非同步通知傳送的資料沒有本質的區別;同步通知有2個作用;第一是從支付寶的頁面上返回自己的網站繼續後續操作;第二是攜帶支付狀態的get引數;讓自己的網站用於驗證;同步通知後
支付寶介面使用文件說明 支付寶非同步通知
支付寶介面使用文件說明支付寶非同步通知(notify_url)與return_url. 現支付寶的通知有兩類。 A伺服器通知,對應的引數為notify_url,支付寶通知使用POST方式 B頁面跳轉通知,對應的引數為ret
微信支付介面開發_支付寶介面開發_銀行支付通道_企業對私低費率
1.準備工作 首先登入微信公眾平臺,獲取並配置以下微信開發配置: 開發者ID【AppID和AppSecret】伺服器配置 1.url伺服器地址設定 2.Token【自己設定,必須英文或數字】 3.EncodingAESKey[自己隨機生成,用於訊息加解密]然後登入微信商戶平
支付寶支付介面中 notify_url 與 return_url 的區別是什麼
一、return_url1、同步返回介面,作為引數傳遞給支付寶 2、使用者付款成功後,從支付寶跳轉到這個頁面 3、在這個頁面中加入相關業務處理,比如更新記錄,標記付款成功資訊。 4、需要對支付寶傳遞過
銀聯支付api相關文件
銀聯商務全民付移動支付 APP綜合支付 商戶接入介面規範 V1.0.1 銀聯商務有限公司 2017.07 版本控制資訊 版本 日期 修改人
銀企支付-概要設計文件
目錄 銀企支付-概要設計文件 1、背景 2、基本概念 3、銀企支付流程說明 4、參考文件 銀企支付-概要設計文件 1、背景 本文介紹一般銀企支付
銀企支付-詳細設計文件
目錄 銀企支付-詳細設計文件 1、定義說明 2、借款單 3、報銷單 4、銀企互聯 5、執行流程日誌 6、監控 7、差錯處理 8、
Swagger2整合springBoot,自動生成API介面文件
Swagger2整合springBoot 首先匯入jar包 <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swa
基於swagger進行介面文件的編寫 Maven + SpringMVC專案整合Swagger
0. 前言 近期忙於和各個銀行的代收介面聯調,根據遇到的問題,對之前編寫的介面進行了修改,需求收集和設計介面時想到了方方面面,生產環境下還是會遇到意想不到的問題,好在基本的執行邏輯已確定,因此只是對介面進行了一些微調,但是收錢無小事,之前在程式碼編寫時對引數進行了很多的校驗,程式碼修改之後一個引數的對不上都
介面文件的撰寫與生成
方法一:用命令實現(較為麻煩) 1.apiDoc的安裝 注意:在安裝apiDoc之前,需要先安裝Node.js,下載地址:https://nodejs.org/en/download/ npm install apidoc -g 生成api的終端命令:apidoc -i 程式
user-getter介面文件
概述 系統分為賬號管理與賬號池管理,通過賬號管理介面來進行賬號的新增、刪除、獲取等操作,通過賬號池管理介面來進行初始化、出隊、入隊等操作。 賬號管理 新增賬號 POST http://10.9.11.167:8081/users request
SpringBoot整合SwaggerUI自動生成介面文件
SpringBoot整合SwaggerUI自動生成介面文件 一、在pom.xml檔案裡新增SpringBoot的引用配置,程式碼如下: <dependency> <groupId>io.springfox</gro
用Swagger生成介面文件
Swagger簡介 在系統設計的時候,各個應用之間往往是通過介面進行互動的。因此介面的定義在整個團隊中就變得尤為重要。我們可以把介面的規範用介面描述語言進行描述,然後Swagger可以根據我們定義的介面規範生成對應的介面文件。它生成的介面文件提供了介面測試功能。我們只需要填上對應的引數,然後點選呼叫,
xxx專案介面文件模板
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
Swagger 生成 PHP API 介面文件
Swagger 生成 PHP API 介面文件 標籤(空格分隔): php 1、概況 有同學反饋寫幾十個介面文件需要兩天的工作量, 隨著多部門之間的協作越來越頻繁, 維護成本越來越高, 文件的可維護性越來越差, 需要一個工具來管理這些介面的文件, 並能夠充當mock server給呼叫方使用。 有
apidoc根據程式碼註釋生成介面文件過程
首先要確認你的系統安裝了nodejs,然後執行npm install -g apidoc即可。 配置apidoc,在你的專案下建立apidoc.json檔案 { "name": "測試APIs", "version": "1.0.0",
整合swagger2生成Restful Api介面文件 webapi文件描述-swagger
整合swagger2生成Restful Api介面文件 swagger Restful文件生成工具 2017-9-30 官方地址:https://swagger.io/docs/specification/about/ 官方Github:https://github.com/swagger-