c# 實現的支付寶支付
阿新 • • 發佈:2021-01-07
C#支付寶掃碼支付示的具體程式碼,供大家參考,具體內容如下
using System; using System.Collections.Generic; using System.Linq; using System.Security.Cryptography; using System.Text; using System.Web; namespace ZK_ECommerce.Shop.pay.alipay { 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) //交換條件 { temp = r[j + 1]; r[j + 1] = r[j]; r[j] = temp; exchange = true; //發生了交換,故將交換標誌置為真 } } if (!exchange) //本趟排序未發生交換,提前終止演算法 { break; } } return r; } 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 extra_common_param = "" ) { return CreatUrl( gateway,service,partner,sign_type,out_trade_no,subject,body,payment_type,total_fee,show_url,seller_email,key,return_url,_input_charset,notify_url,"",extra_common_param); } public string CreatUrl( string gateway,string token,string extra_common_param = "" ) { /// <summary> ///2015年11月17日14:08:00 /// </summary> int i; string[] Oristr; //構造陣列; if (!string.IsNullOrEmpty(token)) { if (extra_common_param == "COD2MOTOPAY") { Oristr = new[]{ "service="+service,"partner=" + partner,"subject=" + subject,"body=" + body,"out_trade_no=" + out_trade_no,"total_fee=" + 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,"token="+token,"extra_common_param="+extra_common_param }; } else { Oristr = new[]{ "service="+service,"total_fee=" +total_fee,"token="+token }; } } else { if (extra_common_param == "COD2MOTOPAY") { Oristr = new[]{ "service="+service,"total_fee="+total_fee,"return_url=" + return_url }; } } //進行排序; string[] Sortedstr = BubbleSort(Oristr); //構造待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); //構造支付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); //返回支付Url; return parameter.ToString(); } public string CreatUrl_MissPayments( string gateway,string _input_charset ) { /// <summary> /// created by sunzhizhi 2006.5.21,[email protected]。 /// </summary> int i; //構造陣列; string[] Oristr ={ "service="+service,"_input_charset="+_input_charset }; //進行排序; string[] Sortedstr = BubbleSort(Oristr); //構造待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); //構造支付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); //返回支付Url; return parameter.ToString(); } public static string GetTranSign(string TranData) { if (string.IsNullOrWhiteSpace(TranData)) return null; string sign = GetMD5(TranData + "alskdjfaow;fjel;asdjf","utf-8"); return sign; } } }
頁面處理:
using System; using System.Collections.Generic; using System.Collections.Specialized; using System.IO; using System.Linq; using System.Net; using System.Security.Cryptography; using System.Text; using System.Web; using System.Web.Mvc; using ZK_ECommerce.Shop.pay.alipay; namespace Alipay.Controllers { public class ApliayDemoController : Controller { /// <summary> /// 支付頁面 /// </summary> /// <param name="ordercode"></param> /// <returns></returns> public ActionResult Index(string ordercode) { string out_trade_no = ordercode; string gateway = "https://mapi.alipay.com/gateway.do?"; //支付介面 string service = "create_direct_pay_by_user"; string partner = ""; //partner合作伙伴ID保留欄位 string sign_type = "MD5"; string payment_type = "1"; //支付型別 string show_url = "http://www.letao.com"; string seller_email = ""; //賣家賬號 string key = ""; //partner賬戶的支付寶安全校驗碼 string return_url = "http://localhost:1396/ApliayDemo/ApliyReturn"; //伺服器通知返回介面 string notify_url = "http://localhost:1396/ApliayDemo/AlipayNotify"; //伺服器通知返回介面 string _input_charset = "utf-8"; string extra_common_param = "COD2MOTOPAY";//表示快捷支付 string token = string.Empty; if (string.IsNullOrEmpty(token)) token = ""; string subject = "康康體檢套餐"; // subject商品名稱 string body = "測試商品"; //商品描述 string total_fee = "0.01"; AliPay ap = new AliPay(); string aliay_url = ap.CreatUrl(gateway,token,extra_common_param); return Redirect(aliay_url); } /// <summary> /// 返回通知頁面 /// </summary> /// <returns></returns> public ActionResult ApliyReturn() { string alipayNotifyURL = "https://mapi.alipay.com/gateway.do?"; string key = ""; //partner 的對應交易安全校驗碼(必須填寫) string _input_charset = "utf-8"; string partner = ""; //partner合作伙伴id(必須填寫) alipayNotifyURL = alipayNotifyURL + "service=notify_verify" + "&partner=" + partner + "¬ify_id=" + Request.QueryString["notify_id"]; //獲取支付寶ATN返回結果,true是正確的訂單資訊,false 是無效的 string responseTxt = Get_Http(alipayNotifyURL,120000); int i; NameValueCollection coll; coll = Request.QueryString; String[] requestarr = coll.AllKeys; //進行排序; string[] Sortedstr = BubbleSort(requestarr); //構造待md5摘要字串 ; StringBuilder prestr = new StringBuilder(); for (i = 0; i < Sortedstr.Length; i++) { if (Request.Form[Sortedstr[i]] != "" && Sortedstr[i] != "sign" && Sortedstr[i] != "sign_type") { if (i == Sortedstr.Length - 1) { prestr.Append(Sortedstr[i] + "=" + Request.QueryString[Sortedstr[i]]); } else { prestr.Append(Sortedstr[i] + "=" + Request.QueryString[Sortedstr[i]] + "&"); } } } prestr.Append(key); string mysign = GetMD5(prestr.ToString(),_input_charset); string sign = Request.QueryString["sign"]; string trade_status = Request.QueryString["trade_status"]; if (mysign == sign && responseTxt == "true" && trade_status == "TRADE_SUCCESS") //驗證支付發過來的訊息,簽名是否正確 { string order_amount = Request.QueryString["total_fee"].ToString().Trim(); string order_code = Request.QueryString["out_trade_no"].ToString().Trim(); //updateOrder(order_code);//更新訂單狀態 Response.Redirect(""); //跳轉到支付成功頁面 } else { Response.Write("支付失敗。"); Response.Write("<br>Result:responseTxt=" + responseTxt); Response.Write("<br>Result:mysign=" + mysign); Response.Write("<br>Result:sign=" + sign); } return View(); } /// <summary> /// 支付回撥頁面 /// </summary> /// <returns></returns> public ActionResult AlipayNotify() { string alipayNotifyURL = "https://mapi.alipay.com/gateway.do?"; string partner = ""; //partner合作伙伴id(必須填寫) string key = ""; //partner 的對應交易安全校驗碼(必須填寫) alipayNotifyURL = alipayNotifyURL + "service=notify_verify" + "&partner=" + partner + "¬ify_id=" + Request.Form["notify_id"]; //獲取支付寶ATN返回結果,true是正確的訂單資訊,false 是無效的 string responseTxt = Get_Http(alipayNotifyURL,120000); int i; NameValueCollection coll; //Load Form variables into NameValueCollection variable. coll = Request.Form; // Get names of all forms into a string array. String[] requestarr = coll.AllKeys; //進行排序; string[] Sortedstr = BubbleSort(requestarr); //構造待md5摘要字串 ; StringBuilder prestr = new StringBuilder(); for (i = 0; i < Sortedstr.Length; i++) { if (Request.Form[Sortedstr[i]] != "" && Sortedstr[i] != "sign" && Sortedstr[i] != "sign_type") { if (i == Sortedstr.Length - 1) { prestr.Append(Sortedstr[i] + "=" + Request.QueryString[Sortedstr[i]]); } else { prestr.Append(Sortedstr[i] + "=" + Request.QueryString[Sortedstr[i]] + "&"); } } } prestr.Append(key); string mysign = GetMD5(prestr.ToString()); string sign = Request.QueryString["sign"]; string trade_status = Request.QueryString["trade_status"]; if (mysign == sign && responseTxt == "true" && trade_status == "TRADE_SUCCESS") //驗證支付發過來的訊息,簽名是否正確 { string order_amount = Request.QueryString["total_fee"].ToString().Trim(); string order_code = Request.QueryString["out_trade_no"].ToString().Trim(); // updateOrder(order_code);//更新訂單狀態 Response.Redirect(""); //跳轉到支付成功頁面 } else { Response.Write("支付失敗。"); Response.Write("<br>Result:responseTxt=" + responseTxt); Response.Write("<br>Result:mysign=" + mysign); Response.Write("<br>Result:sign=" + sign); } return View(); } 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 GetMD5(string s) { /// <summary> /// 與ASP相容的MD5加密演算法 /// </summary> MD5 md5 = new MD5CryptoServiceProvider(); byte[] t = md5.ComputeHash(Encoding.GetEncoding("utf-8").GetBytes(s)); StringBuilder sb = new StringBuilder(32); for (int i = 0; i < t.Length; i++) { sb.Append(t[i].ToString("x").PadLeft(2,r[j]) < 0) //交換條件 { temp = r[j + 1]; r[j + 1] = r[j]; r[j] = temp; exchange = true; //發生了交換,故將交換標誌置為真 } } if (!exchange) //本趟排序未發生交換,提前終止演算法 { break; } } return r; } //獲取遠端伺服器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; } } }
以上就是c# 實現的支付寶支付的詳細內容,更多關於c# 支付寶支付的資料請關注我們其它相關文章!