转自:http://www.cnblogs.com/essenroc/p/8630730.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 应用程序"项目,我将它命名为WeChatPaySample.

2. 引入安装Nuget包 "Essensoft.AspNetCore.Payment.WeChatPay". 目前(2018/03/29)版本为 1.2.1

3. 在Startup.cs文件内 添加依赖注入、设置参数(微信支付商户平台 - API安全)

代码:

         public void ConfigureServices(IServiceCollection services)
{
services.AddMvc(); // 添加微信支付客户端依赖注入
services.AddWeChatPay(); // 可在添加依赖注入时设置参数 一般设置 AppId、MchId、Key,其余默认即可.
// 退款、转账等需要双向证书的API 需要配置 Certificate 参数,将.p12证书文件转成base64串写入即可.
// 如:
//services.AddWeChatPay(opt =>
//{
// // 此处为 公众号AppId、小程序AppId、企业号corpid、微信开放平台应用AppId
// opt.AppId = ""; // // 微信支付商户号
// opt.MchId = ""; // // API密钥
// opt.Key = ""; // // .p12证书文件的base64串
// opt.Certificate = "";
//}); // 具体参数见 WeChatPayOptions // 注册配置实例
services.Configure<WeChatPayOptions>(Configuration.GetSection("WeChatPay")); // 两种方式设置注册配置实例参数 // 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 // 配置文件内容如下('...'为省略的项目其他配置内容,若有的情况下 -_-!): //{
// ...
// ...
//
// "WeChatPay": {
// "AppId": "",
// "MchId": "",
// "Key": ""
// "Certificate": ""
// }
//}
}

4. 添加一个控制器, 我将其命名为 WeChatPayController.cs

代码:

 using Essensoft.AspNetCore.Payment.WeChatPay;
using Essensoft.AspNetCore.Payment.WeChatPay.Notify;
using Essensoft.AspNetCore.Payment.WeChatPay.Request;
using Microsoft.AspNetCore.Mvc;
using System.Threading.Tasks; namespace WeChatPaySample.Controllers
{
public class WeChatPayController : Controller
{
// 微信支付请求客户端(用于处理请求与其响应)
private readonly WeChatPayClient _client = null; 14
15

// 微信支付通知客户端(用于解析异步通知)
private readonly WeChatPayNotifyClient _notifyClient = null; // 赋值依赖注入对象
public WeChatPayController(WeChatPayClient client, WeChatPayNotifyClient notifyClient)
{
_client = client;
_notifyClient = notifyClient;
} /// <summary>
/// 统一下单
/// </summary>
/// <param name="out_trade_no"></param>
/// <param name="body"></param>
/// <param name="total_fee"></param>
/// <param name="spbill_create_ip"></param>
/// <param name="notify_url"></param>
/// <param name="trade_type"></param>
/// <param name="openid"></param>
/// <returns></returns>
[HttpPost]
public async Task<IActionResult> UnifiedOrder(string out_trade_no, string body, int total_fee, string spbill_create_ip, string notify_url, string trade_type, string product_id, string openid)
{
var request = new WeChatPayUnifiedOrderRequest()
{
OutTradeNo = out_trade_no,
Body = body,
TotalFee = total_fee,
SpbillCreateIp = spbill_create_ip,
NotifyUrl = notify_url,
TradeType = trade_type,
ProductId = product_id,
OpenId = openid,
}; // 发起请求
var response = await _client.ExecuteAsync(request); // 将response.CodeUrl生成为二维码即可使用. return Ok(response.Body);
} /// <summary>
/// 支付结果通知
/// </summary>
/// <returns></returns>
[HttpPost]
public async Task<IActionResult> Notify()
{
try
{
// 以 WeChatPayUnifiedOrderNotifyResponse 类型 解析请求
var notify = await _notifyClient.ExecuteAsync<WeChatPayUnifiedOrderNotifyResponse>(Request);
if (!notify.IsError)
{
if (notify.ResultCode == "SUCCESS")
{
// 业务代码
// ...
// ... //返回给微信支付成功内容,停止继续通知
return Content("<xml><return_code><![CDATA[SUCCESS]]></return_code></xml>", "text/xml");
}
} // 订单其他状态均返回给微信支付空内容.
return NoContent();
}
catch
{
// 参数异常/验签失败均返回给微信支付空内容.
return NoContent();
}
} }
}

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

代码:

 @{
ViewData["Title"] = "Home Page";
} <div style="padding:24px 0">
<h3>微信支付 扫码支付 - <a href="https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_1" target="_blank">API文档</a></h3>
<hr />
<form asp-controller="WeChatPay" asp-action="UnifiedOrder" target="_blank">
<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>body:</label>
<input type="text" class="form-control" name="body" value="微信扫码支付测试详情">
</div>
<div class="form-group">
<label>total_fee:</label>
<input type="text" class="form-control" name="total_fee" value="">
</div>
<div class="form-group">
<label>spbill_create_ip:</label>
<input type="text" class="form-control" name="spbill_create_ip" value="127.0.0.1">
</div>
<div class="form-group">
<label>notify_url(通知Url需外网环境可访问):</label>
<input type="text" class="form-control" name="notify_url" value="http://xxx.com/wechatpay/notify">
</div>
<div class="form-group">
<label>trade_type:</label>
<input type="text" class="form-control" name="trade_type" value="NATIVE">
</div>
<div class="form-group">
<label>product_id:</label>
<input type="text" class="form-control" name="product_id" value="@DateTime.Now.ToString("yyyyMMddHHmmssfff")">
</div>
<button type="submit" class="btn btn-primary">提交</button>
</form>
</div>

实现页面如下:

有疑问可以在 https://github.com/Essensoft/Payment 提交Issue ,也可以加入Payment 交流群:522457525

本篇文章到此结束,具体效果可自行测试。感谢各位观看。

【转载】ASP.NET Core Web 支付功能接入 微信-扫码支付篇的更多相关文章

  1. ASP.NET Core Web 支付功能接入 微信-扫码支付篇

    这篇文章将介绍ASP.NET Core中使用 开源项目 Payment,实现接入微信-扫码支付及异步通知功能. 开发环境:Win 10 x64.VS2017 15.6.4..NET Core SDK ...

  2. ASP.NET Core Web 支付功能接入 微信-扫码支付篇(转)

    原文 https://www.cnblogs.com/essenroc/p/8630730.html // 随着版本更迭,新版本可能无法完全适用,请参考仓库内的示例. 这篇文章将介绍ASP.NET C ...

  3. 【移动支付】.NET微信扫码支付接入(模式二-NATIVE)

    一.前言       经过两三天的琢磨总算完成了微信扫码支付功能,不得不感叹几句: 微信提供的DEMO不错,直接复制粘贴就可以跑起来了: 微信的配置平台我真是服了.公众平台.商户平台.开放平台,一个平 ...

  4. C# 微信扫码支付API (微信扫码支付模式二)

    一.SDK下载地址:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=11_1,下载.NET C#版本: 二.微信相关设置:(微信扫码 ...

  5. PHP PC端微信扫码支付【模式二】详细教程-附带源码(转)

    博主写这破玩意儿的时候花了大概快两天时间才整体的弄懂逻辑,考虑了一下~还是把所有代码都放出来给大家~抱着开源大无私的精神!谁叫我擅长拍黄片呢?同时也感谢我刚入行时候那些无私帮过我的程序员们! 首先还是 ...

  6. thinkphp.2 thinkphp5微信支付 微信公众号支付 thinkphp 微信扫码支付 thinkphp 微信企业付款5

    前面已经跑通了微信支付的流程,接下来吧微信支付和微信企业付款接入到thinkphp中,版本是3.2 把微信支付类.企业付款类整合到一起放到第三方类库,这里我把微信支付帮助类和企业付款类放到同一个文件了 ...

  7. asp.net core 微信扫码支付(扫码支付,H5支付,公众号支付,app支付)之1

    2018-08-13更新生成二维码的方法 在做微信支付前,首先要了解你需要什么方式的微信支付,目前本人做过的支付包含扫码支付.H5支付.公众号支付.App支付等,本人使用的是asp.net mvc c ...

  8. JAVA微信扫码支付模式二功能实现完整例子

    概述 本例子实现微信扫码支付模式二的支付功能,应用场景是,web网站微信扫码支付.实现从点击付费按钮.到弹出二维码.到用户用手机微信扫码支付.到手机上用户付费成功.web网页再自动调整到支付成功后的页 ...

  9. 微信扫码支付PHP接入总结

    微信扫码支付分为两种模式, 模式一比较复杂,需要公众号配置回调地址. 模式二比较简单,只需要在代码中配置回调地址就可以了. 我这次使用的是模式二. 需要配置参数, const APPID = 'xxx ...

随机推荐

  1. BZOJ.4842.[NEERC2016]Delight for a Cat(费用流)

    BZOJ 参考这儿. 首先如果一个活动的时间满足条件,那么另一个活动也一定满足.还有就是这题就是费用流没有为什么.不妨假设最初所有时间都用来睡觉,那么我们要对每个\(k\)大小区间选出\([t2,k- ...

  2. Openjudge — 7624 山区建小学

    问题描述 政府在某山区修建了一条道路,恰好穿越总共m个村庄的每个村庄一次,没有回路或交叉,任意两个村庄只能通过这条路来往.已知任意两个相邻的村庄之间的距离为di(为正整数),其中,0 < i & ...

  3. [微信跳转链接]之WAP跳转微信内指定页面

    由于微信覆盖太全面了,几乎所有人都使用微信APP,但是对于做产品的公司来说,所有的产品几乎都离不开微信的推广,然而微信属于封闭式的一个社交应用,大部分只能在今日头条,百度,等等...如果你在推广页面上 ...

  4. MyBatis返回map数据

    (1)接口中编写方法 //单行 public Map<String, Object> getEmpReturnMap(Integer id); //多行 @MapKey("id& ...

  5. CDI Features

    概述 如果说EJB,JPA是之前JEE(JEE5及JEE5之前)中里程碑式的规范,那么在JEE6,JEE7中CDI可以与之媲美,CDI(Contexts and Dependency Injectio ...

  6. SSM框架mapper.xml模糊查询语句

    SSM框架mapper.xml模糊查询语句 在用SSM框架时,如果想要实现模糊查询,可以在mapper.xml文件中进行数据库语句的书写,方法有很多种,在这里我选择了两种介绍: 方法1: <se ...

  7. python学习:利用循环语句完善输入设置

    利用循环语句完善输入设置 使用for循环: 代码1:_user = "alex"_password = "abc123" for i in range(3): ...

  8. Linux系统下,在文件中查找某个字符串

    在normal模式下按下/即可进入查找模式,输入要查找的字符串并按下回车. Vim会跳转到第一个匹配.按下n查找下一个,按下N查找上一个. Vim查找支持正则表达式,例如/vim$匹配行尾的" ...

  9. typescript 安装

    1,全局安装 cnpm install typescript -g (tsc -v) 2,初始化 tsc --init 3,自动编译(hbuilder) 工具-插件安装-浏览eclipse插件市场-搜 ...

  10. JAVA_AesCBC纯净例子

    import java.io.UnsupportedEncodingException; import java.security.InvalidAlgorithmParameterException ...