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

  }
} 

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

(0)

相关推荐

  • C# MVC 微信支付教程系列之扫码支付代码实例

    今天,我们来一起探讨一下这个微信扫码支付.何为扫码支付呢?这里面,扫的码就是二维码了,就是我们经常扫一扫的那种二维码图片,例如,我们自己添加好友的时候,可以通过输入对方的微信号,也可以扫一扫对方的二维码.扫码支付,作为,微信支付里面,不可或缺的一个功能,对商品的支付提供了极为方便的体验,用途也非常的多. 例如我们在地铁.公交站常见的那些自动售货机(不错,就是那种投硬币,就可以自动出货的那种机器)中都用到.微信(支付宝)的扫码支付的出现,大大的减少了这方面的风险,近些年来,二维码的应用越来越广,甚

  • c#版在pc端发起微信扫码支付的实例

    等了好久,微信官方终于发布了.net的demo. 主要代码: /** * 生成直接支付url,支付url有效期为2小时,模式二 * @param productId 商品ID * @return 模式二URL */ public string GetPayUrl(string productId, string body, string attach, int total_fee, string goods_tag) { Log.Info(this.GetType().ToString(), "

  • 基于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

  • ASP.NET Core 2.0 支付宝扫码支付的实现代码

    前言 自从微软更换了CEO以后,微软的战略方向有了相当大的变化,不再是那么封闭,开源了许多东西,拥抱开源社区,.NET实现跨平台,收购xamarin并免费提供给开发者等等.我本人是很喜欢.net的,并希望.net core能够崛起.我是从.net core 1.1的时候开始使用的,到现在的.net core 2.0..net core 2.0比1.1有了一些改变,api也增加了很多,用着更顺手了,最近在做asp.net core 对接支付宝,百度了一下没找到关于core的支付宝支付相关资料,所以

  • Java中Spring Boot支付宝扫码支付及支付回调的实现代码

    前言:最近开发支付宝支付功能,总结一下做个分享 官方文档:https://opendocs.alipay.com/apis 支付宝沙箱地址: https://openhome.alipay.com/platform/appDaily.htm?tab=info 支付宝支付流程: 准备工作:获取支付宝沙箱数据(APPID,支付宝网关,RSA2秘,沙箱支付账号等) 集成SpringBoot,使用Java代码发起支付请求 支付宝收到支付请求后,返回HTML代码片段,用于前端展示二维码 扫码支付成功后,支

  • Spring使用支付宝扫码支付

    前一段一直在研究支付宝的扫码支付,不得不说,支付宝的文档写的真是一个烂(起码在下刚开始看的时候是mengbi的).文档上面的示例和demo里面的示例长的完全不一样.往往文档上面的例子很简单,而demo的代码写的很复杂,所以一开始就不知道该采用哪个代码,后来仔细看了一下demo的那些包里面的代码,发现也是调用的文档示例的那些接口,这才明白它们原来是一个东西,只不过demo对文档的接口进行了一些包装而已. 首先申请一个企业的支付宝账号,这个账号有个pid,需要向这个账号里面添加应用,每个应用都有一个

  • java实现在SSM下使用支付宝扫码支付功能

    本文实例为大家分享了java使用支付宝扫码支付的具体代码,供大家参考,具体内容如下 准备工作 首先开通支付宝沙箱的测试账号,里面会有消费者账户和收款方账户 手机扫码下载手机端app 基础配置 所需jar包 AlipayConfig package com.alipay.config; import java.io.FileWriter; import java.io.IOException; import java.util.ResourceBundle; /* * *类名:AlipayConf

  • PHP 接入微信扫码支付总结(总结篇)

    微信扫码支付分为两种模式, 模式一比较复杂,需要公众号配置回调地址. 模式二比较简单,只需要在代码中配置回调地址就可以了. 我这次使用的是模式二. 需要配置参数, const APPID = 'xxx'; const MCHID = 'xxx'; const KEY = 'xxx'; const APPSECRET = 'xxx'; 配置公众号的appid,appsecret.以及微信支付的mchid与key. 生成二维码,这个页面需要自己去美化,不像支付宝那样自带效果. require_onc

  • Java SpringMVC实现PC端网页微信扫码支付(完整版)

    一:前期微信支付扫盲知识 前提条件是已经有申请了微信支付功能的公众号,然后我们需要得到公众号APPID和微信商户号,这个分别在微信公众号和微信支付商家平台上面可以发现.其实在你申请成功支付功能之后,微信会通过邮件把Mail转给你的,有了这些信息之后,我们就可以去微信支付服务支持页面:https://pay.weixin.qq.com/service_provider/index.shtml 打开这个页面,点击右上方的链接[开发文档]会进入到API文档说明页面,看起来如下 选择红色圆圈的扫码支付就

  • 支付宝支付开发——当面付条码支付和扫码支付实例

    本文介绍支付宝中当面付下属的条码支付.扫码支付.订单查询.退款申请的集成开发过程. 本文分为以下五个部分: 条码支付和扫码支付介绍 申请应用 密钥生成及配置 API及SDK集成 条码支付.扫码支付.订单查询.退款申请  一.条码支付及二维码支付介绍 1. 条码支付 条码支付是支付宝给到线下传统行业的一种收款方式.商家使用扫码枪等条码识别设备扫描用户支付宝钱包上的条码/二维码,完成收款.用户仅需出示付款码,所有收款操作由商家端完成.其使用场景如下: 业务流程: 使用步骤: 用户登陆支付宝钱包,点击

随机推荐