




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、B2B對接支付寶接口轉接支付寶解決方案 大型網上購物系統除了能讓會員選擇貨到付款結賬方式外,還應該提供一些更方 便快捷的網上支付方式。如果網上商店沒有足夠的實力提供會員直接在中 建立 現金賬戶的功能,就可以將訂單信息轉接到支付寶, 讓會員從支付寶付款。當然 就算會員可以在上建立自己的現金賬戶,提供支付寶支付功能也不失為另一 種 方便快捷的支付方式,這可以給客戶提供更多可選的支付方式。首先,網上購物系統必須與支付寶公司簽訂合作協議,以確保從本購物上傳到支付寶上的訂單信息能被正確接收。當會員于購物上買下一系列商品并選擇支付寶付款方式后,購物系統即將會員購 物的訂單信息轉發到支付寶,頁面也會轉到支付
2、寶的付款頁面。 此時,支付寶頁 面會發送一個驗證信息到本以確認支付寶正確收到訂單信息。會員于支付寶付款完成后,頁面會重新跳回本購物,同時支付寶會將已付款的訂 單信息發回本以便對本購物的數據庫進行必要的修改操作。另外本還需要向支付寶發送一個返回信息,告知支付寶本系統已正確收到付款完畢的訂單信息并且 已經完成對數據的處理操作。支付寶蔡統合作商戶漿統向支付寶傳送訂單信息時主要參數的含義gateway :支付接口service:識別是何接口實現何功能的表示SelIer_email :商家簽約時的支付寶賬號,即收款的支付寶賬號key:安全校驗碼,與 Partner是一組Partner:商戶ID ,合作伙
3、伴IDsign_type:加密類型nPUt_CharSet編碼類型show_url :展示地址,即在支付寶頁面時商品名稱旁邊的 詳情”的地址out_trade_no會員訂單編號,訂單編號必須在本系統中保持唯一subject:商品名稱,也可稱為訂單名稱,該接口并不是單一的只能買一樣東西, 可把一次支付當作一次下訂單body:商品描述,即備注total_fee:商品價格,也可稱為訂單的總金額源碼分析 (C#):首先必須建立一個通知頁面(NOtify.aspx)和一個返回頁面(RetUrn.aspx)以接 受并驗證從支付寶返回的信息并對數據庫中相應的訂單信息做修改處理操作。Notify.aspx.c
4、s代碼Using System;Using System.Data;Using System.ConfigUration;Using System.Collections;Using System.Web;Using System.Web.SecUrity;Using System.Web.UI;Using System.Web.UI.WebControls;Using System.Web.UI.WebControls.WebParts;Using System.Web.UI.HtmlControls;Using System.Text;Using System.Collections.Sp
5、ecialized;Using System.IO;Using Gateway;/VSummary>III創建該頁面文件時,請留心該頁面文件中無任何HTML弋碼及空格。/該頁面稱作“通知頁”,是異步被支付寶服務器所調用。/當支付寶的訂單狀態改變時,支付寶服務器則會自動調用此頁面,因此請做 好自身訂單信息與支付寶上的訂單的同步工作/ <summary>PUbliC Partial class AIiPay_NOtify : SyStem.Web.UI.PagePrOteCted VOid Page_Load( object Sender, EVentArgs e) _Stri
6、ng alipayNotifyURL ="https:/.alipay./COOPerategateway.do?SerViCe=no tify_Verify"/string alipayNotifyURL ="n otify.alipay./trade/notify_query.do?"此路徑是在上面地址無法起作用時替換使用。String Partner ="" ;/partner合作伙伴 id (必須填寫)String key = "" ; /partner的對應交易安全校驗碼(必須填寫)String nPUt
7、_CharSet = "utf-8" ; /編碼類型,完全根據客戶自身的 項目的編碼格式而定,千萬不要填錯。否則極其容易造成MD5加密錯誤。alipayNotifyURL = alipayNotifyURL +"&Part ner=" + Part ner +"¬ify_id="+ ReqUeSt.Form "notify_id"/獲取支付寶ATN返回結果,true是正確的訂單信息,false是無效的Stri ng respo nseTxt = AliPay.Get_Http(alipayNo
8、tifyURL,120000);/*力口密簽名程序開始*int i;NameValueCollection coll;/Load Form VariabIeS into NameValueCollecti on Variable. coll = ReqUeSt.Form;/ Get names of all forms into a string array.String requestarr = coll.AllKeys;/ 進行排序;string Sortedstr = AliPay.BubbleSort(requestarr);/構造待md5®要字符串;StringBuilde
9、r prestr =newStringBuilder();for (i =0; i < Sortedstr.Length; i+)if (Request.FormSortedstri !="sign" && Sortedstri != "sign_type" )if (i = Sortedstr.Length -prestr.Append(Sortedstri + Request.FormSortedstri);elseprestr.Append(Sortedstri +Request.FormSortedstri +"&
10、amp;");1)"" && Sortedstri!=prestr.Append(key);string加密簽名程序結束 *mysign = AliPay.GetMD5(prestr.ToString(), _input_charset);string sign = Request.Form "sign" ;if (mysign = sign && responseTxt = "true" ) / 驗證支付發過來的消息, 簽名是否正確, 只要成功進如這個判斷里, 則表示該頁面已被支付寶服務器成
11、功 調用/ 但判斷出現自身編寫的程序相關錯誤導致通知給支付寶并不是發送 success 的消息或沒有更新客戶自身的數據庫的情況, 請自身程序編寫好應對措 施,否則查明原因時困難之極if (Request.Form "trade_status" = "WAIT_BUYER_PA)Y/" 判斷支付狀態 _等待買家付款(文檔中有枚舉表可以參考)/ 更新自己數據庫的訂單語句,請自己填寫一下string strOrderNO = Request.Form "out_trade_no" ; / 訂 單號string strPrice = Requ
12、est.Form "total_fee" ; / 金額 如果你申請了商家購物卷功能, 在返回信息里面請不要做金額的判斷, 否則會校 驗通過不了。else if (Request.Form "trade_status" = "TRADE_FINISHED|"|Request.Form "trade_status" = "TRADE_SUCCES)S/" 判斷支付狀態 _交易 成功結束(文檔中有枚舉表可以參考)/ 更新自己數據庫的訂單語句,請自己填寫一下string strOrderNO = Req
13、uest.Form "out_trade_no" ; / 訂單號string strPrice = Request.Form "total_fee" ; / 金額else/ 更新自己數據庫的訂單語句,請自己填寫一下Response.Write("success" ); / 返回給支付寶消息,成功,請不要改寫這個 success /success 與 fail 及其他字符的區別在于,支付寶的服務器若遇 到 success 時,則不再發送請求通知 (即不再調用該頁面, 讓該頁面再次運行起 來),/若不是 success ,則支付寶默認沒有
14、收到成功的信息,則會反復不停地調用該頁面直到失效,有效調用時間是 24 小時以。Zz最好寫TXT文件,以記錄下是否異步返回記錄。/ Z寫文本,紀錄支付寶返回消息,比對md5計算結果(如不支持 寫 txt 文件,可改成寫數據庫)/string TOEXCELLR = "MD5 結果 :mysign=" + mysign + ",sign=" + sign + ",responseTxt=" + responseTxt;/StreamWriter fs = new StreamWriter(Server.MapPath("Not
15、ify_DATA/" + DateTime.Now.ToString().Replace(":", "") + ".txt", false, System.Text.Encoding.Default);/fs.Write(TOEXCELLR);/fs.Close();elseResponse.Write( "fail" );/最好寫TXT文件,以記錄下是否異步返回記錄/寫文本,紀錄支付寶返回消息,比對 md5計算結果(如不支持寫txt文件,可 改成寫數據庫)Stri ng ToEXCELLR ="
16、;MD5 結果:mysig n=" + mysig n + ",sig n="+sign + ",responseTxt=" + responseTxt;StreamWriter fs =newStreamWriter(Server.MapPath( "Notify_DATA/" + DateTime.Now.ToString().Replace( ":" , "" ) + ".txt" , false , System.Text.Encoding.Default)
17、;fs.Write(ToEXCELLR);fs.Close();Return.aspx.cs代碼using System;using System.Data;using System.Configuration;using System.Collections;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;
18、using System.Text;using System.Collections.Specialized;using System.Io;using Gateway;/ <summary>/ 創建該頁面文件時, 請留心該頁面文件是可以對其進行美工處理的, 原因在 于支付完成以后,當前窗口會從支付寶的頁面跳轉回這個頁面。/ 該頁面稱作“返回頁”, 是同步被支付寶服務器所調用, 可當作是支付完成 后的提示信息頁,如“您的某某某訂單,多少金額已支付成功”/ vsummary>PubliC Partial class AIiPay_RetUrn : SyStem.Web.UI.P
19、age _PrOteCted VOid Page_Load( object Sender, EVentArgs e) _Stri ng alipayNotifyURL ="https:/.alipay./cooperate/gateway.do?SerViCe=no tify_Verify"/string alipayNotifyURL ="n otify.alipay./trade/notify_query.do?"此路徑是在上面地址無法起作用時替換使用。String key = "" ; /partner的對應交易安全校驗碼(必須
20、填寫)String Partner ="" ;/partner 合作伙伴 id (必須填寫)String nPUt_CharSet= "utf-8" ; /編碼類型,完全根據客戶自身的項目的編碼格式而定,千萬不要填錯。否則極其容易造成MD5加密錯誤。alipayNotifyURL = alipayNotifyURL +"&Part ner=" + Part ner +"&n otify_id="+ ReqUeSt.QueryStri ng"n otify_id"/獲取支付寶ATN
21、返回結果,true是正確的訂單信息,false是無效的Stri ng respo nseTxt = AliPay.Get_Http(alipayNotifyURL,120000);/*力口密簽名程序開始/*int i;NameValueCollection coll;/Load Form VariabIeS into NameValueCollecti on Variable. coll = ReqUeSt.QueryStri ng;/ Get names of all forms into a String array. Stri ng requestarr = coll.AllKeys;/
22、 進行排序;string Sortedstr = AliPay.BubbleSort(requestarr);/構造待md5®要字符串;newStringBuilder();StringBuilder prestr =for (i =0; i < Sortedstr.Length; i+)if (Request.FormSortedstri !="sign" && Sortedstri != "sign_type" )if (i = Sortedstr.Length -prestr.Append(Sortedstri +
23、Request.QueryStringSortedstri);elseprestr.Append(Sortedstri +Request.QueryStringSortedstri +"&");1)"" && Sortedstri!=prestr.Append(key);/生成Md5摘要;string mysign = AliPay.GetMD5(prestr.ToString(),input charset);加密簽名程序結束 *string sign = Request.QueryString/ Response.Write(
24、prestr.ToString(); / 完整路徑。"sign" ;調試用,支付寶服務器返回時的if (mysign = sign && responseTxt = "true" ) / 驗證支付發過 來的消息,簽名是否正確stringstrOrderNO = Request.QueryString"out_trade_no" ; /訂單號string strPrice = Request.QueryString string strTradeStatus = Request.QueryString "TRA
25、DE_STATUS;"/ 訂單狀態"total_fee" ; / 金額Response.Write(" 訂單號: " + strOrderNO + "<br> 金額: " + strPrice); 該頁面,提示信息else/ 成功,可美化Response.Write( "Response.Write(Response.Write(Response.Write(Response.Write( / 支付失敗,提示信息"<br>Result:responseTxt=");+ r
26、esponseTxt);"<br>Result:mysign=" + mysign); "<br>Result:sign=" + sign);" 支付失敗 ");/ 更新自己數據庫的訂單語句,請自己填寫一下 除此之外在 Notify.aspx 頁面和 Return.aspx 頁面公用的一些方法,可以提取出來 放在一個公共的類里面( Alipay.cs)Alipay.cs代碼using System.Web;using System.Text;using System.Security.Cryptography;
27、using System.IO;using System.Net;using System;/ <summary>/ New Interface for AliPay/ </summary> namespaceGatewaypublic class AliPay/ <summary>Ill與ASP兼容的MD5加密算法/ </summary>public static string GetMD5(string s, string _input_charset) MD5 md5 = newMD5CryptoServiceProvider(); byt
28、e t =md5.ComputeHash(Encoding.GetEncoding(_input_charset).GetBytes(s); StringBuilder sb =new StringBuilder(32);for ( int i = 0; i < t.Length; i+)sb.Append(ti.ToString("x" ).PadLeft( 2, '0' );return sb.ToString();/ <summary>/ 冒泡排序法Ill按照字母序列從a到Z的順序排列/ </summary>public
29、static string BubbleSort( string r) int i, j; ll 交換標志 string temp;bool exchange;for (i =0; i < r.Length; i+) ll 最多做 R.Length-1 趟排序 exchange =false ; ll 本趟排序開始前,交換標志應為假for (j = r.Length -2; j >= i; j-)ll 交換條件if (System.String.CompareOrdinal(rj +1, rj) <0)temp = rj + 1;rj + 1 = rj;rj = temp;e
30、xchange= true ; / 發生了交換,故將交換標志置為真 if (!exchange) / 本趟排序未發生交換,提前終止算法 break ;return r;/ <summary>Ill生成URL或加密結果/ </summary>lll <param name="para"> 參數加密數組 <lparam>lll <param name="_input_charset"> 編碼格式 <lparam>lll <param name="sign_type&quo
31、t;> 加密類型 <lparam>Ill VParam name="key">安全校驗碼 <param>Ill Vretums>字符串URL或加密結果<returns> public static string CreatUrl(llstring gateway,llGET 方式傳遞參數時請去掉注釋string para,string _input_charset,string sign_type, string key)int i;ll 進行排序;string Sortedstr = BubbleSort(para);
32、/構造待md5®要字符串;StringBuilder prestr =newStringBuilder();for (i =0; i < Sortedstr.Length; i+)if (i = Sortedstr.Length -1)prestr.Append(Sortedstri);elseprestr.Append(Sortedstri +"&");prestr.Append(key);/生成Md5摘要;string sign = GetMD5(prestr.ToString(), _input_charset);/以下是PoST方式傳遞參數
33、return sign;Zz以下是GET方式傳遞參數/ 構造支付 Url ;ZZchar delimiterChars = '='ZZStringBuilder parameter = new StringBuilder();ZZparameter.Append(gateway);ZZfor (i = 0; i < Sortedstr.Length; i+)ZZZZUTF-8格式的編碼轉換ZZparameter.Append(Sortedstri.Split(delimiterChars)0 + "=" +HttpUtility.UrlEncode(S
34、ortedstri.Split(delimiterChars)1) + "&");ZZZZZZparameter.Append("sign=" + sign + "&sign_type=" +sign_type);ZZZZ ZZ返回支付 Url ;ZZ return parameter.ToString();ZZ獲取遠程服務器ATN結果,驗證是否是支付寶服務器發來的請求public static string Get_Http( string a_strUrl, int timeout) string strResul
35、t;tryHttpWebRequest myReq = (HttpWebRequest)HttpWebRequest.Create(a_strUrl);myReq.Timeout = timeout;HttpWebResponse HttpWResp = (HttpWebResponse)myReq.GetResponse();Stream myStream = HttpWResp.GetResponseStream();StreamReader sr =newStreamReader(myStream,Encoding.Default);StringBuilder strBuilder =
36、newStringBuilder(); while (- 1 != sr.Peek() strBuilder.Append(sr.ReadLine();strResult= strBuilder.ToString();catch (Exception exp)strResult= " 錯誤: " + exp.Message; return strResult; 以上三個文件建之后, 就可以在需要的地方對支付寶接口進行調用以完成支付寶 支付的功能了( Default.aspx.cs)代碼using System;using System.Data;using System.C
37、onfiguration;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;using Gateway;public partial class _Default : System.Web.UI.Pageprotected void Page_Load( object sender, EventArgs e)p
38、rotected void BtnAlipay_Click( object sender, EventArgs e) / 業務參數賦值;string gateway = "https:/.alipay./cooperate/gateway.do?" / 支付接口string service = "create_direct_pay_by_user" ;/ 服務名稱,這個是識別是何接口實現何功能的標識,請勿修改string seller_email = "" ;/ 商家簽約時的支付寶,即收款的支付寶string sign_type =
39、"MD5"/ 加密類型 , 簽名方式“不用改”string key = "" ; / 安全校驗碼,與 partner 是一組,獲取方式是:用簽約時支付寶登陸支付寶 www.alipay. ,在商家服務我 的商家里即可查到。string partner = "" ; / 商戶 ID, 合作身份者ID ,合作伙伴IDstring _input_charset = "utf-8" ;/ 展示/ 編碼類型, 完全根據客戶自身的項目的編碼格式而定, 千萬不要填錯。 否則極 其容易造成MD5加密錯誤。string show_u
40、rl = ".alipay./" ;地址,即在支付頁面時,商品名稱旁邊的“詳情”的地址string out_trade_no = TxtOrderno.Text.Trim();/ 客戶自己的訂單號,訂單號必須在自身訂單系統中保持唯一性string subject = TxtSubject.Text.Trim();/ 商品名稱, 也可稱為訂單名稱, 該接口并不是單一的只能買一樣東西, 可把 次支付當作一次下訂單string body = TxtBody.Text.Trim();/ 商品描述,即備注string total_fee = TxtTotal_fee.Text.Tri
41、m();/ 商品價格,也可稱為訂單的總金額/ 服務器通知 url ( Alipay_Notify.aspx 文件所在路經) ,必須是完整的路徑地 址string notify_url = "localhost:8978/direct_vs2005_utf/Alipay_Notify.aspx" ;/ 服務器返回 url (Alipay_Return.aspx 文件所在路經) ,必須是完整 的路徑地址string return_url = "localhost:8978/direct_vs2005_utf/Alipay_Return.aspx" ;/ 構造
42、數組;/ 以下數組即是參與加密的參數, 若參數的值不允許為空, 若該參數為 空,則不要成為該數組的元素string para = "service=" +service, "partner=" + partner, "seller_email=" + seller_email, "out_trade_no=" + out_trade_no, "subject=" + subject, "body=" + body, "total_fee=" + total
43、_fee, "show_url=" + show_url, "payment_type=1" , "notify_url=" + notify_url, "return_url=" + return_url, "_input_charset=" +_input_charset;/支付URL生成string aliay_url = AliPay.CreatUrl( /gateway,/GET 方式傳遞參數時請去掉注釋 para,_input_charset,sign_type,key);/以下是G
44、ET方式傳遞參數/Response.Redirect(aliay_url);/以下是POST方式傳遞參數Response.Write("<form name='alipaysubmit' method='post'action='https:/.alipay./cooperate/gateway.do?_input_charset=utf-8'>" );Response.Write( service + ">" );Response.Write( partner + ">&
45、quot; );Response.Write( value=" + seller_email +Response.Write( value=" + out_trade_no +"<input type='hidden' name='service' value=""<input type='hidden' name='partner' value="IlIl<input type='hidden' name='seller_email' ">&q
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 4214.21-2025家用和類似用途電器噪聲測試方法第21部分:口腔衛生器具的特殊要求
- 化學藥品新注冊分類申報資料要求(80號文)培訓大綱
- 城市交通規劃合同管理項目管理咨詢重點基礎知識點
- 單位法律知識培訓專題大綱
- 《慢性阻塞性肺病治療與護理》課件
- 進門隔斷租房合同協議
- 車庫互換使用協議書范本
- 退職合同協議
- 安保安全培訓計劃
- 常州手房轉讓協議
- 2023-2023小升初語文文言文閱讀試題50篇及答案
- fakra線束生產工藝
- 2024奧數競賽6年級培訓題-答案版
- 房屋租賃的法律風險與防范培訓
- 為成果而管理
- 如何正確選擇和使用運動護具
- 武術禮儀:抱拳禮、手型、步型
- 標本溶血或凝血的應急預案
- 部編版六年級語文下冊第五單元《口語交際:辯論》范例《電腦時代需要不需要練字》
- 《用眼衛生》的教學設計
- (完整版)醫療器械網絡交易服務第三方平臺質量管理文件
評論
0/150
提交評論