栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C# > C#教程

C#支付宝扫码支付代码完整版

C#教程 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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) 
    { 
 
      ///  
      /// 与ASP兼容的MD5加密算法 
      ///  
 
      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) 
    { 
      ///  
      /// 冒泡排序法 
      ///  
 
      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 = "" 
      ) 
    { 
      ///  
      ///2015年11月17日14:08:00 
      ///  
      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 
 
     ) 
    { 
      ///  
      /// created by sunzhizhi 2006.5.21,sunzhizhi@msn.com。 
      ///  
      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 
  { 
    ///  
    /// 支付页面 
    ///  
    ///  
    ///  
    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); 
 
 
    } 
 
 
    ///  
    /// 返回通知页面 
    ///  
    ///  
    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("
Result:responseTxt=" + responseTxt); Response.Write("
Result:mysign=" + mysign); Response.Write("
Result:sign=" + sign); } return View(); } /// /// 支付回调页面 /// /// 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("
Result:responseTxt=" + responseTxt); Response.Write("
Result:mysign=" + mysign); Response.Write("
Result:sign=" + sign); } return View(); } public static string GetMD5(string s, string _input_charset) { /// /// 与ASP兼容的MD5加密算法 /// 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) { /// /// 与ASP兼容的MD5加密算法 /// 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) { /// /// 冒泡排序法 /// 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; } } }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/122913.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号