07
2021
01

c# 实现的支付宝支付代码

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 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 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, 

     "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 

     }; 

    } 

 

   } 

   else 

   { 

    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, 

     "extra_common_param="+extra_common_param 

     }; 

    } 

    else 

    { 

     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 

     }; 

    } 

 

 

   } 

   //进行排序; 

   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 service, 

        string partner, 

        string sign_type, 

        string out_trade_no, 

        string key, 

        string _input_charset 

 

   ) 

  { 

   /// <summary> 

   /// created by sunzhizhi 2006.5.21,sunzhizhi@msn.com。 

   /// </summary> 

   int i; 

 

   //构造数组; 

   string[] Oristr ={ 

    "service="+service, 

    "partner=" + partner, 

    "out_trade_no=" + out_trade_no,  

    "_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, service, partner, sign_type, out_trade_no, subject, body, payment_type, 

           total_fee, show_url, seller_email, key, return_url, _input_charset, notify_url, 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, '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; 

  } 

  //获取远程服务器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; 

  } 

 

 } 

}


« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。