支付宝工具类

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#版本相关推荐

  1. springBoot项目实现支付宝扫码支付(完整篇)

    准备工作,让老板准备好支付宝的商户号,支付宝私钥,支付宝公钥. 说明: 注意重点 一点要看 支付宝扫码支付跟微信扫码支付是不一样的,微信我们是调用微信那边,微信给我们返回二维码链接,然后前端生成二维码 ...

  2. 支付宝扫码支付,回调和退款(沙箱环境配置和完整代码)

    支付宝扫码支付 最近重构项目时,负责了支付模块,微信扫码支付(NATIVE)和 支付宝扫码支付,也是第一次接触,虽然根据官方文档和一些博客写出来了,但是遇到的问题却很多,走了很多弯路,浪费了很多精力和 ...

  3. 支付宝扫码支付-PC版(沙箱环境)

    前言 最近开发了PC端支付宝扫码支付的功能,使用的是沙箱环境.所谓的沙箱环境,其实就是支付宝提供的测试环境(毕竟正式环境需要营业执照等信息进行注册,注册通过后还有一些流程,才能进行正式的扫码支付.对于 ...

  4. 支付宝--扫码支付流程

    1.首次知道,原来(支付宝支付接口)需要去蚂蚁金服开发者帮助文档(尴尬). 附带链接地址:https://docs.open.alipay.com 2.创建自己的应用,我选的是[自研接入](这是一个坑 ...

  5. C# Winform窗体实现支付宝扫码支付

    C# Winform窗体项目实现支付宝扫码支付 一.内容介绍 啪嗒!( 搬好小板凳 ) 大家好,本次学习的内容是在博主大一winform窗体项目中实现的一个功能--支付宝扫码支付: 主要功能通过支付宝 ...

  6. java调用支付宝扫码支付接口

    说明: 由于没有商户账号,所以本文使用的是沙箱账号,本质跟真实账号是一样的,是支付宝为了方便开发人员开发调试而推出的策略.在真实开发中将商户公钥等修改为真实的商户即可. 支付基本流程 用户下单 商户账 ...

  7. 【SpringBoot深入浅出系列】SpringBoot之实现支付宝扫码支付(沙箱环境编码实现)

    目录 一.准备工作 1.应用 APPID 2.商户私钥,即应用私钥 3.支付宝公钥 4.签名方式 5.字符编码格式 6.支付宝网关 二.沙箱环境编码实现 1.项目说明 2.创建 Spring Init ...

  8. Java-Spring Boot支付宝扫码支付以及支付回调

    前言:最近开发支付宝支付功能,总结一下做个分享 官方文档:https://opendocs.alipay.com/apis 支付宝沙箱地址: https://openhome.alipay.com/p ...

  9. html+css+js实现微信和支付宝扫码支付前端

    本章教程,主要利用html+css+js技术实现微信和支付宝扫码支付前端页面. 目录 一.效果图预览 (1)支付宝扫码支付 (2)微信扫码支付 二.项目部分源码文件 (1)目录结构 (2)alipay ...

  10. Java PC端微信、支付宝扫码支付(二)

    Java PC端微信.支付宝扫码支付(二) 前几天写了微信支付,附上链接 https://blog.csdn.net/qq_43494610/article/details/90411391 ,今天抽 ...

最新文章

  1. 80 年代以来的操作系统 GUI 设计进化史
  2. 01012_计算机常用单词
  3. mysql 集群备份脚本_MysqlBackup
  4. update se_Java SE 7 Update 25 –发行说明进行了解释。
  5. php dos,防止用户利用PHP代码DOS造成用光网络带宽
  6. php瀑布墙,phpwind Next增加“瀑布流”图墙展示模式
  7. 通过组策略批量安装Lync 2010客户端
  8. python使用有道翻译API翻译
  9. 我靠这个数据分析利器,3年当上运营主管
  10. 第三方库自动安装脚本(复习)
  11. mvc VIEW部分介绍
  12. JDK9的安装与配置
  13. Springboot中常用的注解
  14. java几种远程服务调用协议的比较
  15. 【版本控制】git学习笔记(一)
  16. 源于《赘婿》电视剧 拼多多申请“拼刀刀”商标
  17. Mac安装ffmpeg时 Failed to download resource quot;texi2htmlquot; 的解决办法
  18. #神仙见了会流泪之#getElementsByTagName的用法
  19. STM32之USART:RXD和TXD管脚互换、接收和发送的电平极性反转、支持数据高位与低位反序发送或接收
  20. URAL 1517. Freedom of choice (后缀数组)

热门文章

  1. 阿里云部署.NET后端
  2. snapchat忘记账户_如何恢复忘记的Snapchat密码
  3. 简练网软考知识点整理-易混概念项目绩效评估与团队绩效评价
  4. 关于各种网站音频mp3的外链地址,真实的外链播放地址
  5. 如何用命令行的形式进行仿真及do脚本的使用(仿真工具使用技巧)【Modesim/Questasim】
  6. 考研小作文真题、范文及讲解
  7. Spring Boot(一)之入门篇
  8. java 端口流量统计_java—流量统计源码 | 学步园
  9. java商城如何防止超卖_电商中怎么防止超卖
  10. unit怎么发音_“unit”怎么读?