欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#支付寶掃碼支付代碼完整版

 更新時(shí)間:2018年05月30日 09:25:28   作者:牟鵬  
這篇文章主要為大家詳細(xì)介紹了C#支付寶掃碼支付代碼的完整版本,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了C#支付寶掃碼支付示的具體代碼,供大家參考,具體內(nèi)容如下

支付寶工具類(lèi)

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; //交換標(biāo)志  
      string temp; 
 
      bool exchange; 
 
      for (i = 0; i < r.Length; i++) //最多做R.Length-1趟排序  
      { 
        exchange = false; //本趟排序開(kāi)始前,交換標(biāo)志應(yīng)為假 
 
        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; //發(fā)生了交換,故將交換標(biāo)志置為真  
          } 
        } 
 
        if (!exchange) //本趟排序未發(fā)生交換,提前終止算法  
        { 
          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; 
      //構(gòu)造數(shù)組; 
      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 
          }; 
        } 
 
 
      } 
      //進(jìn)行排序; 
      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); 
 
 
      //返回支付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; 
 
      //構(gòu)造數(shù)組; 
      string[] Oristr ={  
        "service="+service,  
        "partner=" + partner, 
        "out_trade_no=" + out_trade_no,    
        "_input_charset="+_input_charset      
 
        }; 
 
      //進(jìn)行排序; 
      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); 
 
 
      //返回支付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; 
    } 
 
  } 
} 

頁(yè)面處理

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> 
    /// 支付頁(yè)面 
    /// </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";         //支付類(lèi)型  
      string show_url = "http://www.letao.com"; 
      string seller_email = "";       //賣(mài)家賬號(hào) 
      string key = "";       //partner賬戶(hù)的支付寶安全校驗(yàn)碼 
      string return_url = "http://localhost:1396/ApliayDemo/ApliyReturn"; //服務(wù)器通知返回接口 
      string notify_url = "http://localhost:1396/ApliayDemo/AlipayNotify"; //服務(wù)器通知返回接口 
      string _input_charset = "utf-8"; 
      string extra_common_param = "COD2MOTOPAY";//表示快捷支付  
      string token = string.Empty; 
      if (string.IsNullOrEmpty(token)) 
        token = ""; 
      string subject = "康康體檢套餐"; // subject商品名稱(chēng) 
      string body = "測(cè)試商品"; //商品描述   
      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> 
    /// 返回通知頁(yè)面 
    /// </summary> 
    /// <returns></returns> 
    public ActionResult ApliyReturn() 
    { 
 
      string alipayNotifyURL = "https://mapi.alipay.com/gateway.do?"; 
      string key = ""; //partner 的對(duì)應(yīng)交易安全校驗(yàn)碼(必須填寫(xiě)) 
      string _input_charset = "utf-8"; 
      string partner = "";    //partner合作伙伴id(必須填寫(xiě)) 
 
      alipayNotifyURL = alipayNotifyURL + "service=notify_verify" + "&partner=" + partner + "¬ify_id=" + Request.QueryString["notify_id"]; 
 
      //獲取支付寶ATN返回結(jié)果,true是正確的訂單信息,false 是無(wú)效的 
      string responseTxt = Get_Http(alipayNotifyURL, 120000); 
 
      int i; 
      NameValueCollection coll; 
      coll = Request.QueryString; 
      String[] requestarr = coll.AllKeys; 
      //進(jìn)行排序; 
      string[] Sortedstr = BubbleSort(requestarr); 
 
      //構(gòu)造待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")  //驗(yàn)證支付發(fā)過(guò)來(lái)的消息,簽名是否正確 
      { 
        string order_amount = Request.QueryString["total_fee"].ToString().Trim(); 
        string order_code = Request.QueryString["out_trade_no"].ToString().Trim(); 
 
        
        //updateOrder(order_code);//更新訂單狀態(tài) 
        Response.Redirect(""); //跳轉(zhuǎn)到支付成功頁(yè)面 
      } 
      else 
      { 
 
        Response.Write("支付失敗。"); 
        Response.Write("<br>Result:responseTxt=" + responseTxt); 
        Response.Write("<br>Result:mysign=" + mysign); 
        Response.Write("<br>Result:sign=" + sign); 
      } 
      return View(); 
    } 
 
 
    /// <summary> 
    /// 支付回調(diào)頁(yè)面 
    /// </summary> 
    /// <returns></returns> 
    public ActionResult AlipayNotify() 
    { 
 
 
      string alipayNotifyURL = "https://mapi.alipay.com/gateway.do?"; 
      string partner = "";    //partner合作伙伴id(必須填寫(xiě)) 
      string key = ""; //partner 的對(duì)應(yīng)交易安全校驗(yàn)碼(必須填寫(xiě)) 
 
      alipayNotifyURL = alipayNotifyURL + "service=notify_verify" + "&partner=" + partner + "¬ify_id=" + Request.Form["notify_id"]; 
 
      //獲取支付寶ATN返回結(jié)果,true是正確的訂單信息,false 是無(wú)效的 
      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; 
      //進(jìn)行排序; 
      string[] Sortedstr = BubbleSort(requestarr); 
      //構(gòu)造待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")  //驗(yàn)證支付發(fā)過(guò)來(lái)的消息,簽名是否正確 
      { 
        string order_amount = Request.QueryString["total_fee"].ToString().Trim(); 
        string order_code = Request.QueryString["out_trade_no"].ToString().Trim(); 
 
 
        
        // updateOrder(order_code);//更新訂單狀態(tài) 
        Response.Redirect(""); //跳轉(zhuǎn)到支付成功頁(yè)面 
      } 
      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; //交換標(biāo)志  
      string temp; 
 
      bool exchange; 
 
      for (i = 0; i < r.Length; i++) //最多做R.Length-1趟排序  
      { 
        exchange = false; //本趟排序開(kāi)始前,交換標(biāo)志應(yīng)為假 
 
        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; //發(fā)生了交換,故將交換標(biāo)志置為真  
          } 
        } 
 
        if (!exchange) //本趟排序未發(fā)生交換,提前終止算法  
        { 
          break; 
        } 
 
      } 
      return r; 
    } 
    //獲取遠(yuǎn)程服務(wù)器ATN結(jié)果 
    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 = "錯(cuò)誤:" + exp.Message; 
      } 
 
      return strResult; 
    } 
 
  } 
} 

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C#設(shè)計(jì)模式之觀察者模式實(shí)例講解

    C#設(shè)計(jì)模式之觀察者模式實(shí)例講解

    這篇文章主要介紹了C#設(shè)計(jì)模式之觀察者模式實(shí)例講解,本文詳細(xì)講解了觀察者模式的定義、優(yōu)缺點(diǎn)、代碼實(shí)例等,需要的朋友可以參考下
    2014-10-10
  • C#給Word不同頁(yè)面設(shè)置不同背景

    C#給Word不同頁(yè)面設(shè)置不同背景

    這篇文章主要介紹了C#給Word不同頁(yè)面設(shè)置不同背景,文章圖文講解的很清晰,有對(duì)于這方面不懂得同學(xué)可以學(xué)習(xí)下
    2021-02-02
  • C#中static靜態(tài)變量的用法實(shí)例

    C#中static靜態(tài)變量的用法實(shí)例

    這篇文章主要介紹了C#中static靜態(tài)變量的用法,實(shí)例分析了C#中static靜態(tài)變量的含義及具體用法,非常具有參考借鑒價(jià)值,需要的朋友可以參考下
    2014-11-11
  • C#編程實(shí)現(xiàn)連接SQL SERVER數(shù)據(jù)庫(kù)實(shí)例詳解

    C#編程實(shí)現(xiàn)連接SQL SERVER數(shù)據(jù)庫(kù)實(shí)例詳解

    這篇文章主要介紹了C#編程實(shí)現(xiàn)連接SQL SERVER數(shù)據(jù)庫(kù)的方法,以實(shí)例形式較為詳細(xì)的分析了C#連接SQL SERVER數(shù)據(jù)庫(kù)的相關(guān)步驟與具體實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2015-11-11
  • 淺談C# 9.0 新特性之只讀屬性和記錄

    淺談C# 9.0 新特性之只讀屬性和記錄

    這篇文章主要介紹了C# 9.0 新特性之只讀屬性和記錄的的相關(guān)資料,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以參考下
    2020-06-06
  • c#類(lèi)的使用示例

    c#類(lèi)的使用示例

    這篇文章主要介紹了c#類(lèi)的使用示例,還有我學(xué)習(xí)時(shí)的筆記,需要的朋友可以參考下
    2014-04-04
  • c#取得控制臺(tái)應(yīng)用程序根目錄

    c#取得控制臺(tái)應(yīng)用程序根目錄

    編寫(xiě)程序的時(shí)候,經(jīng)常需要用的項(xiàng)目根目錄?,F(xiàn)在把方法總結(jié)如下分享給大家
    2014-01-01
  • C#實(shí)現(xiàn)圖表中鼠標(biāo)移動(dòng)并顯示數(shù)據(jù)

    C#實(shí)現(xiàn)圖表中鼠標(biāo)移動(dòng)并顯示數(shù)據(jù)

    這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)圖表中鼠標(biāo)移動(dòng)并顯示數(shù)據(jù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • 在C#中如何使用ResNet50v2進(jìn)行圖像識(shí)別

    在C#中如何使用ResNet50v2進(jìn)行圖像識(shí)別

    ONNX?運(yùn)行時(shí)推理可以實(shí)現(xiàn)更快的客戶(hù)體驗(yàn)和更低的成本,支持來(lái)自深度學(xué)習(xí)框架如?PyTorch和TensorFlow/Keras以及經(jīng)典機(jī)器學(xué)習(xí)庫(kù)如?scikit-learn、LightGBM、XGBoost?等的模型,這篇文章主要介紹了在C#中如何使用ResNet50v2進(jìn)行圖像識(shí)別,需要的朋友可以參考下
    2024-07-07
  • 詳解C#中的泛型以及編程中使用泛型的優(yōu)點(diǎn)

    詳解C#中的泛型以及編程中使用泛型的優(yōu)點(diǎn)

    這篇文章主要介紹了詳解C#中的泛型以及編程中使用泛型的優(yōu)點(diǎn),對(duì)泛型的支持時(shí)C#語(yǔ)言中的重要特性,需要的朋友可以參考下
    2016-02-02

最新評(píng)論