使用支付寶實現(xiàn)在線支付
18.2.3 使用支付寶實現(xiàn)在線支付(1)
在了解了在線支付及與支付寶相關(guān)的一些知識之后,,本節(jié)詳細講解在用戶網(wǎng)站中,,如何通過調(diào)用支付寶接口實現(xiàn)在線支付的功能,。
調(diào)用支付寶接口實現(xiàn)在線支付功能的具體實現(xiàn)如下所示,。
1.在項目中加入支付寶接口程序
在應用支付寶在線支付功能之前,首先需要將支付寶接口程序添加到網(wǎng)站工程中,具體實現(xiàn)的操作步驟如下所示。
(1)啟動Visual Studio 2010,,新建一個網(wǎng)站。
(2)在網(wǎng)站的根目錄下添加一個名稱為AliPay的類,,添加之后系統(tǒng)會自動將該類放置在App_Code目錄下,。
(3)在AliPay類中添加如下程序代碼,實現(xiàn)連接支付寶接口的功能,。 - using System;
- using System.Data;
- using System.Configuration;
- 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.Security.Cryptography;
- /// <summary>
- /// 實現(xiàn)支付寶接口程序的代碼
- /// </summary>
- namespace Gateway
- {
- public class AliPay
- {
- public static string GetMD5(string s, string _input_charset)
- {
- /// <summary>
- /// 與ASP兼容的MD5加密算法
- /// </summary>
- MD5 md5 = new MD5CryptoServiceProvider();
- byte[] t = md5.ComputeHash(Encoding.GetEncoding(_input_
- charset).GetBytes(s));
- StringBuilder sb = new StringBuilder(32);
- for (int i = 0; i < t.Length; i++)
- {
- sb.Append(t[i].ToString("x").PadLeft(2, '0'));
- }
- return sb.ToString();
- }
- public static string[] BubbleSort(string[] r)
- {
- /// <summary>
- /// 冒泡排序法
- /// </summary>
- int i, j; //交換標志
- string temp;
- bool exchange;
- for (i = 0; i < r.Length; i++) //最多做R.Length-1趟排序
- {
- exchange = false; //本趟排序開始前,,交換標志應為假
- for (j = r.Length - 2; j >= i; j--)
- {
- if (System.String.CompareOrdinal(r[j + 1], r[j]) < 0)
- //交換條件
- {
- //交換數(shù)組中的數(shù)據(jù)
- temp = r[j + 1];
- r[j + 1] = r[j];
- r[j] = temp;
- exchange = true; //發(fā)生了交換,故將交換標志置為真
- }
- }
- if (!exchange) //本趟排序未發(fā)生交換,,提前終止算法
- {
- break; //中斷
- }
- }
- return r; //返回數(shù)組
- }
- //定義字符串變量組
- public string CreatUrl(
- string gateway,
- string service,
- string partner,
- string sign_type,
- string out_trade_no,
- string subject,
- string body,
- string payment_type,
- string total_fee,
- string show_url,
- string seller_email,
- string key,
- string return_url,
- string _input_charset,
- string notify_url,
- string logistics_type,
- string logistics_fee,
- string logistics_payment,
- string logistics_type_1,
- string logistics_fee_1,
- string logistics_payment_1,
- string quantity
- )
- {
- int i;
- //構(gòu)造數(shù)組
- string[] Oristr ={
- "service="+service,
- "partner=" + partner,
- "subject=" + subject,
- "body=" + body,
- "out_trade_no=" + out_trade_no,
- "price=" + total_fee,
- "show_url=" + show_url,
- "payment_type=" + payment_type,
- "seller_email=" + seller_email,
- "notify_url=" + notify_url,
- "_input_charset="+_input_charset,
- "return_url=" + return_url,
- "quantity="+quantity,
- "logistics_type="+logistics_type,
- "logistics_fee="+logistics_fee ,
- "logistics_payment="+logistics_payment,
- "logistics_type_1="+logistics_type_1,
- "logistics_fee_1="+logistics_fee_1,
- "logistics_payment_1="+logistics_payment_1
- };
- //進行排序
- string[] Sortedstr = BubbleSort(Oristr);
- //構(gòu)造待md5摘要字符串
- StringBuilder prestr = new StringBuilder();
- for (i = 0; i < Sortedstr.Length; i++)
- {
- if (i == Sortedstr.Length - 1)
- {
- prestr.Append(Sortedstr[i]);
- }
- else
- {
- prestr.Append(Sortedstr[i] + "&");
- }
- }
- prestr.Append(key);
- //生成Md5摘要
- string sign = GetMD5(prestr.ToString(), _input_charset);
- //構(gòu)造支付Url
- char[] delimiterChars = { '='};
- StringBuilder parameter = new StringBuilder();
- parameter.Append(gateway);
- for (i = 0; i < Sortedstr.Length; i++)
- {
- parameter.Append(Sortedstr[i].Split(delimiterChars)[0] + "=" +
- HttpUtility.UrlEncode(Sortedstr[i].Split(delimiterChars)[1])
- + "&");
- }
- parameter.Append("sign=" + sign + "&sign_type=" + sign_type);
- return parameter.ToString(); //返回支付Url
- }
- }
- }
【代碼解析】在調(diào)用支付寶接口函數(shù)時,,首先通過MD5加密算法對客戶信息進行加密,,然后通過冒泡排序算法交換買家和賣家的數(shù)據(jù)信息構(gòu)造支付URL,,最后返回支付URL,完成在線支付交易,。
注意:通常情況下,,類文件都需要保存在App_Code目錄下,Visual Studio 2010可以自動編譯該目錄下的類文件,。
|