完整版本支付宝扫码支付 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#版本相关推荐
- springBoot项目实现支付宝扫码支付(完整篇)
准备工作,让老板准备好支付宝的商户号,支付宝私钥,支付宝公钥. 说明: 注意重点 一点要看 支付宝扫码支付跟微信扫码支付是不一样的,微信我们是调用微信那边,微信给我们返回二维码链接,然后前端生成二维码 ...
- 支付宝扫码支付,回调和退款(沙箱环境配置和完整代码)
支付宝扫码支付 最近重构项目时,负责了支付模块,微信扫码支付(NATIVE)和 支付宝扫码支付,也是第一次接触,虽然根据官方文档和一些博客写出来了,但是遇到的问题却很多,走了很多弯路,浪费了很多精力和 ...
- 支付宝扫码支付-PC版(沙箱环境)
前言 最近开发了PC端支付宝扫码支付的功能,使用的是沙箱环境.所谓的沙箱环境,其实就是支付宝提供的测试环境(毕竟正式环境需要营业执照等信息进行注册,注册通过后还有一些流程,才能进行正式的扫码支付.对于 ...
- 支付宝--扫码支付流程
1.首次知道,原来(支付宝支付接口)需要去蚂蚁金服开发者帮助文档(尴尬). 附带链接地址:https://docs.open.alipay.com 2.创建自己的应用,我选的是[自研接入](这是一个坑 ...
- C# Winform窗体实现支付宝扫码支付
C# Winform窗体项目实现支付宝扫码支付 一.内容介绍 啪嗒!( 搬好小板凳 ) 大家好,本次学习的内容是在博主大一winform窗体项目中实现的一个功能--支付宝扫码支付: 主要功能通过支付宝 ...
- java调用支付宝扫码支付接口
说明: 由于没有商户账号,所以本文使用的是沙箱账号,本质跟真实账号是一样的,是支付宝为了方便开发人员开发调试而推出的策略.在真实开发中将商户公钥等修改为真实的商户即可. 支付基本流程 用户下单 商户账 ...
- 【SpringBoot深入浅出系列】SpringBoot之实现支付宝扫码支付(沙箱环境编码实现)
目录 一.准备工作 1.应用 APPID 2.商户私钥,即应用私钥 3.支付宝公钥 4.签名方式 5.字符编码格式 6.支付宝网关 二.沙箱环境编码实现 1.项目说明 2.创建 Spring Init ...
- Java-Spring Boot支付宝扫码支付以及支付回调
前言:最近开发支付宝支付功能,总结一下做个分享 官方文档:https://opendocs.alipay.com/apis 支付宝沙箱地址: https://openhome.alipay.com/p ...
- html+css+js实现微信和支付宝扫码支付前端
本章教程,主要利用html+css+js技术实现微信和支付宝扫码支付前端页面. 目录 一.效果图预览 (1)支付宝扫码支付 (2)微信扫码支付 二.项目部分源码文件 (1)目录结构 (2)alipay ...
- Java PC端微信、支付宝扫码支付(二)
Java PC端微信.支付宝扫码支付(二) 前几天写了微信支付,附上链接 https://blog.csdn.net/qq_43494610/article/details/90411391 ,今天抽 ...
最新文章
- 80 年代以来的操作系统 GUI 设计进化史
- 01012_计算机常用单词
- mysql 集群备份脚本_MysqlBackup
- update se_Java SE 7 Update 25 –发行说明进行了解释。
- php dos,防止用户利用PHP代码DOS造成用光网络带宽
- php瀑布墙,phpwind Next增加“瀑布流”图墙展示模式
- 通过组策略批量安装Lync 2010客户端
- python使用有道翻译API翻译
- 我靠这个数据分析利器,3年当上运营主管
- 第三方库自动安装脚本(复习)
- mvc VIEW部分介绍
- JDK9的安装与配置
- Springboot中常用的注解
- java几种远程服务调用协议的比较
- 【版本控制】git学习笔记(一)
- 源于《赘婿》电视剧 拼多多申请“拼刀刀”商标
- Mac安装ffmpeg时 Failed to download resource quot;texi2htmlquot; 的解决办法
- #神仙见了会流泪之#getElementsByTagName的用法
- STM32之USART:RXD和TXD管脚互换、接收和发送的电平极性反转、支持数据高位与低位反序发送或接收
- URAL 1517. Freedom of choice (后缀数组)
热门文章
- 阿里云部署.NET后端
- snapchat忘记账户_如何恢复忘记的Snapchat密码
- 简练网软考知识点整理-易混概念项目绩效评估与团队绩效评价
- 关于各种网站音频mp3的外链地址,真实的外链播放地址
- 如何用命令行的形式进行仿真及do脚本的使用(仿真工具使用技巧)【Modesim/Questasim】
- 考研小作文真题、范文及讲解
- Spring Boot(一)之入门篇
- java 端口流量统计_java—流量统计源码 | 学步园
- java商城如何防止超卖_电商中怎么防止超卖
- unit怎么发音_“unit”怎么读?