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;
  } 

 }
}

以上就是c# 实现的支付宝支付的详细内容,更多关于c# 支付宝支付的资料请关注我们其它相关文章!

(0)

相关推荐

  • C#支付宝新版支付请求接口调用

    本文实例为大家分享了C#支付宝新版支付请求接口调用的具体代码,供大家参考,具体内容如下 因为支付宝已经集成了完整的SDK,所以可以使用SDK直接调用API,这里获取SDK源码. 首先我们需要引用支付宝SDK集成 AopSdk.dll. 添加相关引用: using Aop.Api; using Aop.Api.Domain; using Aop.Api.Request; using Aop.Api.Response; 需要用到商户私钥,支付宝公钥,请求地址等公共参数,所以可以新建一个config文

  • 基于C#实现微信支付宝扫码支付功能

    为公司系统业务需要,这几天了解了一下微信和支付宝扫码支付的接口,并用c#实现了微信和支付宝扫码支付的功能. 微信支付分为6种支付模式:1.付款码支付,2.native支付,3.jsapi支付,4.app支付,5.h5支付,6.小程序支付 我在这里用到的是native支付,就是网页生成二维码让用户扫码支付,再调用回调接口判断用户是否支付成功. 支付宝支付api也挺多的,我只使用了一些我在系统中能够用到的,现在将代码简单记录在这里,先从微信支付开始. 微信支付 先上后台代码: 传入参数(总金额一定要

  • 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 { p

  • .NET C#支付宝条码支付接口详解

    支付宝条码支付接口使用,供大家参考,具体内容如下 应用场景实例 收银员使用扫码设备读取用户支付宝钱包"付款码"后,将二维码或条码信息通过本接口上送至支付宝发起支付. SDK下载 支付宝提供3种开发语言的SDK,选择自己的开发语言下载,项目中会有很多示例.本文选择.NET2010版本. 将SDK项目中的AopSdk.dll文件引用到自己的项目中. 支付类代码 简略版 数据需自行获取 public class ToAlipayBLL { private static readonly To

  • iOS动画解析之支付宝支付打钩动画的实现方法

    前言 我们平时在用支付宝付款时,会有一个支付中的动画和一个支付完成的动画.这篇博客主要分析一下这种动画效果,效果如下: 支付宝支付动画 一.动画解析 为了方便观察,放慢了动画的速度并添加辅助线: 放慢后的动画 从图中可以看出:加载圆弧运动轨迹可分为前半段和后半段:并且圆弧的起始角度(StartAngle)和结束角度(EndAngle)在做有规律的变化: 前半段: 从-0.5π到π,这一段运动中速度较快:StartAngle不变,始终未-0.5π:EndAngle在匀速上升,一直到π:前半段中圆弧

  • 支付宝支付开发IOS图文教程案例

    前言:继上次<微信支付开发IOS图文教程案例>以来,一直没有太多时间,更新总结详细支付这样的长篇大论,很抱歉.今天,推出支付宝支付的详细流程. 1.开始下载和查看支付宝支付的Demo. 我们直接进入支付宝的支付平台参考来进行集成支付宝支付: https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.jIUkAQ&treeId=59&articleId=103675&docType=1 集成过程基本

  • iOS开发支付宝支付成功返回字符串的处理操作

    { memo=""; result="partner=\"311811\"&seller_id=\"nse@gmail.com\"&out_trade_no=\"S005372\"&subject=\"\U522b\U5885\U8ba2\U5355\"&body=\"\U5885\"&total_fee=\"0.1\"

  • iOS支付宝支付方法详解

    支付宝SDK下载地址:https://doc.open.alipay.com/doc2/detail?treeId=54&articleId=103419&docType=1 支付宝集成 在支付宝集成的过程中,会遇到一些报错,下面就碰到的报错,和大家一起解决. 集成参考官方文档: 导入代码文档:https://doc.open.alipay.com/doc2/detail.htm?spm=0.0.0.0.RiFaVa&treeId=59&articleId=103676&a

  • IOS 仿支付宝支付屏幕亮度变化机制

    1.首先,在需要实现的界面viewDidLoad中先保存亮度没有变化之前的亮度,因为这个界面消失之后还要变回原来的亮度,变化亮度也相当于用户的一种设置,所以也要保存一下这个状态,因为之后当APP在active和非active切换时候需要知道是否需要为用户做这个功能 // 保存原来的亮度 [[NSUserDefaults standardUserDefaults] setObject:@([UIScreen mainScreen].brightness) forKey:@"brightness&q

  • 基于JS实现类似支付宝支付密码输入框

    本文实现的是一个类似支付宝支付密码的界面,只可以输入数字,且只可以输入6位 首先给大家展示下效果图,如果感觉不错,请参考实现代码. 1.样式表 .wrap{ margin: 10px auto; width: 329px; height: 640px; padding-top: 200px; } .inputBoxContainer{ width: 240px; height: 50px; margin: 0 auto; position: relative; } .inputBoxContai

  • PHP后台微信支付和支付宝支付开发

    关于支付的流程之类的就不做解释,大家可以自行搜索! 微信支付 项目前提:本人用的是tp框架,PHP语言 下载到微信平台提供的微信支付接口文件,放在了tp第三方类库vendor,命名为WxpayAPI WxpayAPI/lib/WxPay.Api.php 接口访问类; WxpayAPI/lib/WxPay.Config.php 配置账号信息; WxpayAPI/lib/WxPay.Data.php 数据对象基础类; WxpayAPI/lib/WxPay.Exception.php 微信支付API异

  • Android支付宝支付的示例代码

    上一篇,我们已经详细讲解了Android微信支付,今天接着为大家带来支付宝支付,支付宝支付相对微信支付要简单一些,吐槽一下,而且支付宝文档确实比微信的文档好了不少,下面开始讲解支付流程. 1.首先给出官方文档的地址 Android集成支付宝流程 2.在开始集成和开发前,首先了解一下常用的接入方式和架构建议: 支付流程.png 在开始下一步之前,给大家看看网上的很多操作. 网上的代码.png 这一大堆代码,后面还有,百来行吧,而且支付宝Demo貌似也是这么干的,估计一些新司机就有点懵逼了,至于吗?

  • Android支付宝支付设计开发

    在移动支付领域,支付宝支付占用巨大份额,根据艾瑞咨询公布的报告数据:2014Q3,支付宝斩获了82.6%的市场份额,在移动支付的霸主地位越来越稳固.财付通支付的发力点在微信支付和手Q支付,在移动支付格局中取得了10.0%的市场份额,排名第二. 支付宝在移动支付领域的统治地位,使得我们有必要梳理支付宝移动开发流程.本文写作的目的就是梳理支付流程,从架构层面讲述如何在移动应用中嵌入支付宝支付功能,以及指出哪些地方存在开发陷阱. 准备       按照说明,首先需要申请支付宝支付账号.这方面根据网站说

  • Android仿支付宝支付密码输入框

    本文实例为大家分享了Android实现一个仿支付宝支付密码的输入框,主要实现如下: PasswordView.java package com.jackie.alipay.password; import android.annotation.TargetApi; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphic

随机推荐