通过nuget首先引用AopSdk.dll 包

下面写的是 Asp.Net MVC 下相关的支付接口

APP支付

配置客户端相关的参数,配置成自己的代码就可以了

        private string APPID = string.Empty;
private string APP_PRIVATE_KEY = string.Empty;
private string ALIPAY_PUBLIC_KEY = string.Empty;
private string CHARSET = string.Empty;
IAopClient client;

在支付接口构造函数中初始化Client信息

 client = new DefaultAopClient("https://openapi.alipay.com/gateway.do", APPID, APP_PRIVATE_KEY, "json", "1.0", "RSA2", ALIPAY_PUBLIC_KEY, CHARSET, false);

APP发起支付请求

 /// <summary>
/// App发起支付请求
/// </summary>
/// <param name="tradeno">外部订单号,商户网站订单系统中唯一的订单号</param>
/// <param name="subject">订单名称</param>
/// <param name="totalAmout">付款金额</param>
/// <param name="itemBody">商品描述</param>
[HttpPost]
public JObject AppPayRequest(string tradeno, string subject, string totalAmout, string itemBody)
{ AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
//SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。
AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
model.Body = itemBody;
model.Subject = subject;
model.TotalAmount = totalAmout;
model.ProductCode = "quick_msecurity_pay";
model.OutTradeNo = "20170216test01";
model.TimeoutExpress = "30m";
request.SetBizModel(model);
request.SetNotifyUrl("https://xxxxxx/callback"); //这里和普通的接口调用不同,使用的是sdkExecute
AlipayTradeAppPayResponse response = client.SdkExecute(request);
//HttpUtility.HtmlEncode是为了输出到页面时防止被浏览器将关键参数html转义,实际打印到日志以及http传输不会有这个问题
return JObject.Parse(HttpUtility.HtmlEncode(response.Body));
//页面输出的response.Body就是orderString 可以直接给客户端请求,无需再做处理。 }

Web支付调用

        /// <summary>
///Web发起支付请求
/// </summary>
/// <param name="tradeno">外部订单号,商户网站订单系统中唯一的订单号</param>
/// <param name="subject">订单名称</param>
/// <param name="totalAmout">付款金额</param>
/// <param name="itemBody">商品描述</param>
[HttpPost]
public JObject WebPayRequest(string tradeno, string subject, string totalAmout, string itemBody)
{ AlipayTradePayRequest request = new AlipayTradePayRequest();
//SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。
AlipayTradePayModel model = new AlipayTradePayModel();
model.Body = itemBody;
model.Subject = subject;
model.TotalAmount = totalAmout;
model.ProductCode = "quick_msecurity_pay";
model.OutTradeNo = "20170216test01";
model.TimeoutExpress = "30m";
request.SetBizModel(model);
request.SetNotifyUrl("https://xxxxxx/callback");
AlipayTradePayResponse response = client.pageExecute(request); //返回表单信息,js submit
return JObject.Parse(HttpUtility.HtmlEncode(response.Body)); }

支付回调地址

/// <summary>
/// 异步POST回调
/// </summary>
/// <returns></returns>
public async Task<JObject> NotifyPostAsync()
{
int i = ;
IDictionary<string, string> sArray = new Dictionary<string, string>();
NameValueCollection coll;
coll = await Request.Content.ReadAsFormDataAsync();
String[] requestItem = coll.AllKeys; for (i = ; i < requestItem.Length; i++)
{
sArray.Add(requestItem[i], coll.Get(requestItem[i]));
}
//1、获取交易号 在去支付宝校验知否存在该交易号 以及该交易号的支付状态 //2、验证是否是 我们自己商户 回调的订单信息 //3、验证知否金额是否是订单金额 //4、业务通知成功 要告知支付宝 不要继续发动通知回调 ,如果业务处理有异常 记录订单日志 //5、最后返回相关信息
return null;
}

订单退款

/// <summary>
/// 订单退款
/// </summary>
/// <param name="tradeno">商户订单号</param>
/// <param name="alipayTradeNo">支付宝交易号</param>
/// <param name="refundAmount">退款金额</param>
/// <param name="refundReason">退款原因</param>
/// <param name="refundNo">退款单号</param>
/// <returns></returns>
public JObject OrderBackMoney(string tradeno, string alipayTradeNo, string refundAmount, string refundReason, string refundNo)
{
AlipayTradeRefundModel model = new AlipayTradeRefundModel();
model.OutTradeNo = tradeno;
model.TradeNo = alipayTradeNo;
model.RefundAmount = refundAmount;
model.RefundReason = refundReason;
model.OutRequestNo = refundNo; AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();
request.SetBizModel(model); var response = client.Execute(request);
return JObject.Parse(HttpUtility.HtmlEncode(response.Body));
}

退款查询

 /// <summary>
/// 退款查询
/// </summary>
/// <param name="tradeno">商户订单号</param>
/// <param name="alipayTradeNo">支付宝交易号</param>
/// <param name="refundNo">退款单号</param>
/// <returns></returns>
[HttpPost]
public JObject OrderBackMoneyQuery(string tradeno, string alipayTradeNo, string refundNo)
{
if (string.IsNullOrEmpty(refundNo))
{
refundNo = tradeno;
} AlipayTradeFastpayRefundQueryModel model = new AlipayTradeFastpayRefundQueryModel();
model.OutTradeNo = tradeno;
model.TradeNo = alipayTradeNo;
model.OutRequestNo = refundNo; AlipayTradeFastpayRefundQueryRequest request = new AlipayTradeFastpayRefundQueryRequest();
request.SetBizModel(model); var response = client.Execute(request);
return JObject.Parse(HttpUtility.HtmlEncode(response.Body));
}

关闭订单

/// <summary>
/// 关闭订单
/// </summary>
/// <param name="tradeno">商户订单号</param>
/// <param name="alipayTradeNo">支付宝交易号</param>
/// <returns></returns>
[HttpPost]
public JObject OrderClose(string tradeno, string alipayTradeNo)
{ AlipayTradeCloseModel model = new AlipayTradeCloseModel();
model.OutTradeNo = tradeno;
model.TradeNo = alipayTradeNo; AlipayTradeCloseRequest request = new AlipayTradeCloseRequest();
request.SetBizModel(model); var response = client.Execute(request);
return JObject.Parse(HttpUtility.HtmlEncode(response.Body));
}

ASP.NET Core 下面的支付,还是使用此SDK, 把DefaultAopClient 封装配置下Options 扩展到 IServiceCollection 方法注册服务即可,后期有时间补上这块的代码

ASP.NET MVC 下使用支付宝支付接口 以及 ASP.NET Core 下相关改造支付的更多相关文章

  1. ASP.NET MVC 学习笔记-7.自定义配置信息 ASP.NET MVC 学习笔记-6.异步控制器 ASP.NET MVC 学习笔记-5.Controller与View的数据传递 ASP.NET MVC 学习笔记-4.ASP.NET MVC中Ajax的应用 ASP.NET MVC 学习笔记-3.面向对象设计原则

    ASP.NET MVC 学习笔记-7.自定义配置信息   ASP.NET程序中的web.config文件中,在appSettings这个配置节中能够保存一些配置,比如, 1 <appSettin ...

  2. 【ASP.NET MVC系列】浅谈jqGrid 在ASP.NET MVC中增删改查

    ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...

  3. asp.net mvc 接入最新支付宝支付+退款 alipay-sdk-NET-20170615110549

    第1步: https://openhome.alipay.com/developmentDocument.htm 第2步:下载sdk和demo https://docs.open.alipay.com ...

  4. UnionPay,ChinaPay 最新 银联支付接口C#\Asp.net\MVC 版本

    1.概念普及 一.理解什么是UnionPay.ChinaPay 这两个概念如果搞不清楚,绝对够你瞎折腾一段时间的. UnionPay:中国银联,最大的机构:他本身也提供系统接口但都是B2B的,对于单个 ...

  5. asp.net mvc 如何调用微信jssdk接口:分享到微信朋友(圈)| 分享到qq空间

    如何在asp.net mvc 项目里, 调用微信jssdk接口,现实功能: 分享到微信朋友(圈)| 分享到qq空间 1 创建一个Action,准备一些数据,初始化数据(签名): /// <sum ...

  6. ASP.NET MVC 中的IResolver<T> 接口

    在ASP.NET MVC 的源码一些实体对象(比如 ControllerBuilder,ControllerFactory, Filters, ViewEngines 等)不再直接通过关键字new来创 ...

  7. 【Pro ASP.NET MVC 3 Framework】.学习笔记.11.ASP.NET MVC3的细节:概览MVC项目

    书Adam The Definitive Guide to HTML5 Adam Applied ASP.NET 4 in Context and Pro ASP.NET 4 到此为止,我们已经学了为 ...

  8. 4、ASP.NET MVC入门到精通——NHibernate构建一个ASP.NET MVC应用程序

    下周就去办理离职手续了,之前没有使用过NHibernate,只知道NHibernate是一种ORM框架,但是听说新公司是使用NHibernate在做项目,所以,我就网上找资料学习一下NHibernat ...

  9. Asp.net Mvc 第一回 安装,并使ASP.NET MVC页面运行起来

    直接上图吧: 1.到官方网站下载:http://www.asp.net/mvc/ Codeplex开源站点:http://www.codeplex.com/aspnet(下载源代码及Futures包) ...

随机推荐

  1. java servlet 初学笔记

    1. 页面HTML标签中的中文乱码 在 doGet 或者 doPost 等方法内的第一行添加: response.setCharacterEncoding("gbk"); 2. 避 ...

  2. IntelliJ IDEA2018激活码

    使用前提: 在hosts文件里面添加一行,hosts文件在Windows系统中的路径:C:\Windows\System32\drivers\etc\,Linux系统存放在/etc目录下. 0.0.0 ...

  3. Java面试题:Java中的集合及其继承关系

    关于集合的体系是每个人都应该烂熟于心的,尤其是对我们经常使用的List,Map的原理更该如此.这里我们看这张图即可: 1.List.Set.Map是否继承自Collection接口? List.Set ...

  4. 有两个CIDR地址块208.128/11和208.130.28/22。是否有那一个地址块包含了另一个地址?如果有,请指出,并说明理由。

    有两个CIDR地址块208.128/11和208.130.28/22.是否有那一个地址块包含了另一个地址?如果有,请指出,并说明理由. 208.128/11的前缀为:11010000 100: 208 ...

  5. 【新手篇】搭建DCN漏洞靶机及简单的SQL手工注入

    很多新手小白入门后发现想要学好“网安”技术,除了掌握基础理论知识,更需要经常模拟不同的漏洞环境,但是如果使用外网服务器练习,会存在一定风险,因此能够搭建一个本地的模拟环境去测试漏洞将是一个不错的方案. ...

  6. i春秋四周年庆典狂欢丨价值6000元的Web安全课程免费送啦

    重磅好消息 i春秋四周年庆典狂欢 感恩回馈新老用户 5888元的Web安全线上提高班 988元的Web安全线上入门班 免费送啦 快来围观 活动详情 1.活动时间:6月17日—6月30日 2.活动规则: ...

  7. 章节十四、9-Actions类鼠标悬停、滚动条、拖拽页面上的元素

    一.鼠标悬停 1.在web网站中,有一些页面元素只需要我们将鼠标指针放在上面就会出现被隐藏的下拉框或者其它元素,在自动化的过程中我们使用Actions类对鼠标进行悬停操作. 2.案例演示 packag ...

  8. LeeCode——Combine Two Tables

    Table: Person +-------------+---------+ | Column Name | Type | +-------------+---------+ | PersonId ...

  9. Jmeter吞吐量控制器

    吞吐量控制器 场景: 假如有两个业务分别是A, B在同一线程组内有10并发, 7个做A业务, 3个做B业务,吞吐量控制器比较推荐使用. 添加吞吐量控制器 ​ 用法1: Percent Executio ...

  10. linux时间校对

    在虚拟机中查看安装的linux时间,总是不对,于是查阅资料,有很多解决办法,我个人比较倾向于用ntpdate的方式更新时间. 感觉比较好用的一个方法: 输入date查看时间,发现不对,相差甚远!(当前 ...