IT程式員開發必備-各類資源下載清單,史上最全IT資源,個人收藏總結。
最近需要為網站加入支付寶的儲值介面,而目前關於支付寶介面開發的資料比較雜亂,這裡就我此次開發所用到的資料進行匯總整理,希望能夠協助需要的朋友。
開發步驟: 1. 確定簽約類型
支付寶的介面有多種類型,所以首先你要確定簽約的合約類型,確定使用的是哪個介面,不至於走錯了道道。
此步驟中,可以參考文檔:支付寶介面操作教程 2. 下載開發文檔
如果是即時到賬的開發,請先下載並仔細閱讀:標準快速付款介面文檔
文檔中比較詳細的介紹了邏輯流程,時序圖以及枚舉定義等,最好在看範例程式碼之前通讀之 3. 擷取簽約帳號的支付寶安全校正碼(key)和合作id:partner
支付寶樣本程式的調試需要商戶號和相應的密鑰,否則無法進行程式的調試,具體擷取方法請查看官方協助,不再贅述 4. 下載支付寶樣本程式
asp 即時到賬介面代碼執行個體:點此下載 (31.62 KB)
php_GBK 即時到賬介面代碼執行個體:點此下載 (22.02 KB)
php_UTF-8 即時到賬介面代碼執行個體:點此下載 (22.02 KB)
net_05_GBK(post方式) 即時到賬介面代碼執行個體:點此下載 (12.03 KB)
net_05_UTF-8(post方式) 即時到賬介面代碼執行個體: 點此下載 (10.72 KB)
java_GBK(get方式) 即時到賬介面代碼執行個體:點此下載 (136.54 KB)
java_UTF-8 (get方式)即時到賬介面代碼執行個體:點此下載 (112.67 KB) 5. 支付寶樣本程式的解讀
下面內容轉自http://dev.alipay.com/devclub/mvnforum/viewthread_thread,161_offset,0
大家想必都有這種困惑——拿到支付寶的介面代碼後,儘管裡面的程式有注釋,介面程式碼封裝中也附有開發說明,但還是不知道該如何入手。這不難想象是什麼原因,因為自己並不瞭解這個介面的工作原理是什麼。
那麼這篇文章就是要向大家全面展示關於支付寶介面的所有東西,以便大家能快速上手把介面接入自己的項目中,也能協助那些已經對支付寶介面有所瞭解的程式開發人員們更瞭解支付寶的一些通用規則、特殊用途等。
正題開始——
一、 結構
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 = "aaaa@126.com";
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 = "