软件编程
位置:首页>> 软件编程>> C#编程>> C#支付宝扫码支付代码完整版

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

作者:牟鹏  发布时间:2021-07-19 18:48:08 

标签: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 + "&not;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 + "&not;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;
   }

}
}

来源:https://blog.csdn.net/for12/article/details/50772034

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com