【转载】ASP.NET Core Web 支付功能接入 支付宝-电脑网页支付篇
转自:http://www.cnblogs.com/essenroc/p/8627775.html
这篇文章将介绍ASP.NET Core中使用 开源项目 Payment,实现接入支付宝-电脑网页支付接口及同步跳转及异步通知功能。
开发环境:Win 10 x64、VS2017 15.6.4、.NET Core SDK 2.1.101、.NET Core Runtime 2.0.6
1.新建"ASP.NET Core Web 应用程序"项目,我将它命名为AlipaySample.
2. 引入安装Nuget包 "Essensoft.AspNetCore.Payment.Alipay". 目前(2018/03/29)版本为 1.2.1
3. 在Startup.cs文件内 添加依赖注入、设置参数(蚂蚁金服开放平台 - 账户管理 - 密钥管理 - 开放平台密钥)
代码:

public void ConfigureServices(IServiceCollection services)
{
services.AddMvc(); // 添加支付宝客户端依赖注入
services.AddAlipay(); // 可在添加依赖注入时设置参数 一般设置 AppId、RsaPrivateKey、RsaPublicKey,其余默认即可.
// 如:
//services.AddAlipay(opt =>
//{
// //此处为蚂蚁金服开放平台上创建的APPID,而非老版本的商户号
// opt.AppId = ""; // // 这里的公私钥 默认均为支付宝官方推荐使用的RSAWithSHA256.
// // 商户私钥
// opt.RsaPrivateKey = "";
// // 支付宝公钥
// opt.RsaPublicKey = "";
//}); // 具体参数见 AlipayOptions // 注册配置实例
services.Configure<AlipayOptions>(Configuration.GetSection("Alipay")); // 两种方式设置注册配置实例参数 // 1.默认配置文件(开发环境/正式环境):
// appsettings.Development.json / appsettings.json // 2.用户机密配置文件(VS2017 15.6.4 中,右键项目 => 管理用户机密):
// Windows: % APPDATA %\microsoft\UserSecrets\< userSecretsId >\secrets.json
// Linux: ~/.microsoft / usersecrets /< userSecretsId >/ secrets.json
// macOS: ~/.microsoft / usersecrets /< userSecretsId >/ secrets.json // 配置文件内容如下('...'为省略的项目其他配置内容,若有的情况下 -_-!): //{
// ...
// ...
//
// "Alipay": {
// "AppId": "",
// "RsaPublicKey": "",
// "RsaPrivateKey": ""
// }
//}
}

4. 添加一个控制器, 我将其命名为 AlipayController.cs
代码:

using Essensoft.AspNetCore.Payment.Alipay;
using Essensoft.AspNetCore.Payment.Alipay.Domain;
using Essensoft.AspNetCore.Payment.Alipay.Notify;
using Essensoft.AspNetCore.Payment.Alipay.Request;
using Microsoft.AspNetCore.Mvc;
using System.Threading.Tasks; namespace AlipaySample.Controllers
{
public class AlipayController : Controller
{
// 支付宝请求客户端(用于处理请求与其响应)
private readonly AlipayClient _client = null; // 支付宝通知客户端(用于解析异步通知或同步跳转)
private readonly AlipayNotifyClient _notifyClient = null; // 赋值依赖注入对象
public AlipayController(AlipayClient client, AlipayNotifyClient notifyClient)
{
_client = client;
_notifyClient = notifyClient;
} [HttpPost]
public async Task<IActionResult> PagePay(string out_trade_no, string subject, string total_amount, string body, string product_code, string notify_url, string return_url)
{
// 组装模型
var model = new AlipayTradePagePayModel()
{
Body = body,
Subject = subject,
TotalAmount = total_amount,
OutTradeNo = out_trade_no,
ProductCode = product_code,
}; var req = new AlipayTradePagePayRequest(); // 设置请求参数
req.SetBizModel(model); // 设置异步通知URL
req.SetNotifyUrl(notify_url); // 设置同步跳转URL
req.SetReturnUrl(return_url); // 页面请求处理 传入 'GET' 返回的 response.Body 为 URL, 'POST' 返回的 response.Body 为 HTML.
var response = await _client.PageExecuteAsync(req, null, "GET"); // 重定向到支付宝电脑网页支付页面.
return Redirect(response.Body);
} /// <summary>
/// 电脑网页支付-同步跳转
/// 常用于展示订单支付状态页,建议在异步通知统一做业务处理,而不是在此处.
/// </summary>
/// <returns></returns>
[HttpGet]
public async Task<IActionResult> PagePayReturn()
{
try
{
// 以 AlipayTradePagePayReturnResponse 类型 解析
var notify = await _notifyClient.ExecuteAsync<AlipayTradePagePayReturnResponse>(Request);
return Content("成功:" + notify.OutTradeNo);
}
catch
{
return Content("参数异常/验签失败");
}
} /// <summary>
/// 电脑网页支付-异步通知
/// 常用于订单业务处理
/// </summary>
/// <returns></returns>
[HttpPost]
public async Task<IActionResult> PagePayNotify()
{
try
{
// 以 AlipayTradePagePayNotifyResponse 类型 解析
var notify = await _notifyClient.ExecuteAsync<AlipayTradePagePayNotifyResponse>(Request);
if ("TRADE_SUCCESS" == notify.TradeStatus) // 订单是否交易完成
{
// 业务代码
// ...
// ... //返回给支付宝成功内容,停止继续通知
return Content("success", "text/plain");
}
// 订单其他状态均返回给支付宝空内容.
return NoContent();
}
catch
{
// 参数异常/验签失败均返回给支付宝空内容.
return NoContent();
}
}
}
}

5. 修改 Views/Home/Index 页面,用于网站提交支付请求.
代码:

@{
ViewData["Title"] = "Home Page";
} <div style="padding:24px 0">
<h3>支付宝 电脑网站支付 - <a href="https://docs.open.alipay.com/270/alipay.trade.page.pay" target="_blank">API文档</a></h3>
<hr />
<form asp-controller="Alipay" asp-action="PagePay" target="_blank">
<div class="form-group">
<label>body:</label>
<input type="text" class="form-control" name="body" value="支付宝网站支付测试详情">
</div>
<div class="form-group">
<label>subject:</label>
<input type="text" class="form-control" name="subject" value="支付宝网站支付测试">
</div>
<div class="form-group">
<label>total_amount:</label>
<input type="text" class="form-control" name="total_amount" value="0.01">
</div>
<div class="form-group">
<label>out_trade_no:</label>
<input type="text" class="form-control" name="out_trade_no" value="@DateTime.Now.ToString("yyyyMMddHHmmssfff")">
</div>
<div class="form-group">
<label>product_code:</label>
<input type="text" class="form-control" name="product_code" value="FAST_INSTANT_TRADE_PAY">
</div>
<div class="form-group">
<label>notify_url(通知Url需外网环境可访问):</label>
<input type="text" class="form-control" name="notify_url" value="http://xxx.com/alipay/pagepaynotify">
</div>
<div class="form-group">
<label>return_url:</label>
<input type="text" class="form-control" name="return_url" value="http://xxx.com/alipay/pagepayreturn">
</div>
<button type="submit" class="btn btn-primary">提交</button>
</form>
</div>

实现页面如下:
本篇文章到此结束,具体效果可自行测试。感谢各位观看。
【转载】ASP.NET Core Web 支付功能接入 支付宝-电脑网页支付篇的更多相关文章
- ASP.NET Core Web 支付功能接入 支付宝-电脑网页支付篇
这篇文章将介绍ASP.NET Core中使用 开源项目 Payment,实现接入支付宝-电脑网页支付接口及同步跳转及异步通知功能. 开发环境:Win 10 x64.VS2017 15.6.4..NET ...
- 【转载】ASP.NET Core Web 支付功能接入 微信-扫码支付篇
转自:http://www.cnblogs.com/essenroc/p/8630730.html 这篇文章将介绍ASP.NET Core中使用 开源项目 Payment,实现接入微信-扫码支付及异步 ...
- ASP.NET Core Web 支付功能接入 微信-扫码支付篇
这篇文章将介绍ASP.NET Core中使用 开源项目 Payment,实现接入微信-扫码支付及异步通知功能. 开发环境:Win 10 x64.VS2017 15.6.4..NET Core SDK ...
- ASP.NET Core Web 支付功能接入 微信-扫码支付篇(转)
原文 https://www.cnblogs.com/essenroc/p/8630730.html // 随着版本更迭,新版本可能无法完全适用,请参考仓库内的示例. 这篇文章将介绍ASP.NET C ...
- 手机网站支付如何接入支付宝简易版支付功能PHP版
接入支付宝准备工作:(关于账号可以是个体商户也可以是企业账号但必须有营业执照) 1.登录蚂蚁金服开放平台 2.创建应用,应用分类网页应用和移动应用.应用提交审核审核通过后得到Appid才能调用相应的 ...
- asp.net core web的导入导出excel功能
这里主要记录下asp.net core web页面上进行导入导出excel的操作. 主要是导入,因为现在使用的很多前端框架(例如kendo ui)本身就有导出的功能. 这里使用到EPPlus.Core ...
- ASP.NET Core Web API下事件驱动型架构的实现(一):一个简单的实现
很长一段时间以来,我都在思考如何在ASP.NET Core的框架下,实现一套完整的事件驱动型架构.这个问题看上去有点大,其实主要目标是为了实现一个基于ASP.NET Core的微服务,它能够非常简单地 ...
- Asp.Net Core Web应用程序—探索
前言 作为一个Windows系统下的开发者,我对于Core的使用机会几乎为0,但是考虑到微软的战略规划,我觉得,Core还是有先了解起来的必要. 因为,目前微软已经搞出了两个框架了,一个是Net标准( ...
- [转帖]ASP.NET Core Web服务器 Kestrel和Http.sys 特性详解
ASP.NET Core Web服务器 Kestrel和Http.sys 特性详解 https://www.cnblogs.com/vipyoumay/p/7525478.html ASP.NET C ...
随机推荐
- JSPatch 热更新
JSPatch 是一个 iOS 动态更新框架,只需在项目中引入极小的引擎,就可以使用 JavaScript 调用任何 Objective-C/Swift 原生接口. 获得脚本语言的优势,为项目动态添加 ...
- 微信跳转,网页跳转微信app跳转公众号关注页面[转载]
[微信跳转链接]之跳转公众号关注页面如何做到在微信内部在这里插入代码片浏览器打开的webview页面中,跳转到微信公众号的关注页面呢!我们可以通过访问微信提供的URL协议(weixin://)来实现这 ...
- 五、JAVA反射、线程
第五节:Java反射.线程 线程 1.进程:进程是程序的基本执行实体,进程是线程的容器. 线程:被称为轻量进程,是程序执行流的最小单元.线程是进程中的一个实 ...
- Prometheus 企业微信报警/inhibit抑制 /静默(二)
创建企业微信应用 注册企业微信:访问https://work.weixin.qq.com/,注册企业,随便填,不需要认证 创建应用 创建告警配置 vim /usr/local/prometheus-2 ...
- [LeetCode] Bus Routes 公交线路
We have a list of bus routes. Each routes[i] is a bus route that the i-th bus repeats forever. For e ...
- 微信测试号开发入门配置问题java
这个测试号配置弄了好几天了,入了无数坑,终于解决了...辛苦我了,手动安慰一下自己.. 为了萌新们以后不要再浪费时间绕半天做无用功.看看楼楼的艰苦历程吧. 此教程针对没有云服务器,没有自己的域名的.没 ...
- maven的安装及配置
学习的目标 1.能够掌握Maven的安装 2.能够配置Maven仓库 3.理解Maven的依赖传递 4.能够掌握Maven工程的创建 准备工作 1.需要的资料(apache-maven-3.5.2,本 ...
- Redis安装完整步骤
安装: 1.获取redis资源 wget http://download.redis.io/releases/redis-4.0.8.tar.gz 2.解压 tar xzvf redis-4.0.8. ...
- js-day06-jQuery事件和DOM操作-练习题
jQuery事件绑定 js中绑定事件,三种方式: 方式1: 直接在元素上,增加onXxx事件属性. <button onclick="alert(1);">点我< ...
- TCP协议学习总结(上)
在计算机领域,数据的本质无非0和1,创造0和1的固然伟大,但真正百花齐放的还是基于0和1之上的各种层次之间的组合(数据结构)所带给我们人类各种各样的可能性.例如TCP协议,我们的生活无不无时无刻的站在 ...