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

小说:不是缺点,是特点作者:乙戏更新时间:2019-03-23字数:26119

“你学会了通灵之术吧,不过我还没有输,我来这里为的就是要见识一下这个东西,现在好不容易将他给逼出来,我怎么能让给你,一尾守鹤,你千万别让我失望啊。”刘皓一扫之前的郁闷,豪气纵生,让一边的手鞠和春野樱看的美目时不时闪过一阵阵异彩。

护肤必备手册之(二)周期护理

这一次的考核成绩比上次好了不少,有些男兵几乎是跟真上战场拼命一样,除了几个实在是因为身体素质等原因外,其余的都通过了考核,韩非大喜,也没有为难那几个通不过考核的国军兄弟们,给他们每人发了几块大洋让他们回去各自的部队,告诉他们,只要以后身体允许,欢迎他们再来特务连!
静室也就是密室,四面无窗,墙壁都是厚实的青石,四周几个房间都空置,不准任何人进入,一般的权贵人家都有这样的密室,以保证隐秘话题的安全。

不过叶扬笑着笑着,便想到了自己被那个吸血鬼女郎强行上了的事情,他顿时再也笑不出来了。就连看那个酒保的时候,都觉得他那笑容很讨厌。

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


这篇文章将介绍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.WeChatPay". 目前(2018/03/23)版本为 1.1.0

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

代码:

 1         public void ConfigureServices(IServiceCollection services)
 2         {
 3             services.AddMvc();
 4 
 5             // 添加微信支付客户端依赖注入
 6             services.AddWeChatPay();
 7 
 8             // 可在添加依赖注入时设置参数 一般设置 AppId、MchId、Key,其余默认即可.
 9             // 退款、转账等需要双向证书的API 需要配置 Certificate 参数,将.p12证书文件转成base64串写入即可.
10             // 如:
11             //services.AddWeChatPay(opt =>
12             //{
13             //    // 此处为 公众号AppId、小程序AppId、企业号corpid、微信开放平台应用AppId
14             //    opt.AppId = "";
15 
16             //    // 微信支付商户号
17             //    opt.MchId = "";
18 
19             //    // API密钥
20             //    opt.Key = "";
21 
22             //    // .p12证书文件的base64串
23             //    opt.Certificate = "";
24             //});
25 
26             // 具体参数见 WeChatPayOptions
27 
28             // 注册配置实例
29             services.Configure<WeChatPayOptions>(Configuration.GetSection("WeChatPay"));
30 
31             // 两种方式设置注册配置实例参数
32 
33             // 1.默认配置文件(开发环境/正式环境):
34             // appsettings.Development.json / appsettings.json
35 
36             // 2.用户机密配置文件(VS2017 15.6.4 中,右键项目 => 管理用户机密):
37             // Windows: % APPDATA %microsoftUserSecrets< userSecretsId >secrets.json
38             // Linux: ~/.microsoft / usersecrets /< userSecretsId >/ secrets.json
39             // macOS: ~/.microsoft / usersecrets /< userSecretsId >/ secrets.json
40 
41             // 配置文件内容如下("..."为省略的项目其他配置内容,若有的情况下 -_-!):
42 
43             //{
44             // ...
45             // ...
46             //
47             //  "WeChatPay": {
48             //    "AppId": "",
49             //    "MchId": "",
50             //    "Key": ""
51             //    "Certificate": ""
52             //  }
53             //}
54         }

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

代码:

 1 using Essensoft.AspNetCore.WeChatPay;
 2 using Essensoft.AspNetCore.WeChatPay.Notify;
 3 using Essensoft.AspNetCore.WeChatPay.Request;
 4 using Microsoft.AspNetCore.Mvc;
 5 using System.Threading.Tasks;
 6 
 7 namespace WeChatPaySample.Controllers
 8 {
 9     public class WeChatPayController : Controller
10     {
11         // 微信支付请求客户端(用于处理请求与其响应)
12         private readonly WeChatPayClient _client = null;
13 
14         // 微信证书请求客户端(用于处理双向证书请求与其响应)
15         // private readonly WeChatPayCertificateClient _certClient = null;
16 
17         // 微信支付通知客户端(用于解析异步通知)
18         private readonly WeChatPayNotifyClient _notifyClient = null;
19 
20         // 赋值依赖注入对象
21         public WeChatPayController(WeChatPayClient client, WeChatPayNotifyClient notifyClient)
22         {
23             _client = client;
24             _notifyClient = notifyClient;
25         }
26 
27         /// <summary>
28         /// 统一下单
29         /// </summary>
30         /// <param name="out_trade_no"></param>
31         /// <param name="body"></param>
32         /// <param name="total_fee"></param>
33         /// <param name="spbill_create_ip"></param>
34         /// <param name="notify_url"></param>
35         /// <param name="trade_type"></param>
36         /// <param name="openid"></param>
37         /// <returns></returns>
38         [HttpPost]
39         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)
40         {
41             var request = new WeChatPayUnifiedOrderRequest()
42             {
43                 OutTradeNo = out_trade_no,
44                 Body = body,
45                 TotalFee = total_fee,
46                 SpbillCreateIp = spbill_create_ip,
47                 NotifyUrl = notify_url,
48                 TradeType = trade_type,
49                 ProductId = product_id,
50                 OpenId = openid,
51             };
52 
53             // 发起请求
54             var response = await _client.ExecuteAsync(request);
55 
56             // 将response.CodeUrl生成为二维码即可使用.
57 
58             return Ok(response.Body);
59         }
60 
61         /// <summary>
62         /// 支付结果通知
63         /// </summary>
64         /// <returns></returns>
65         [HttpPost]
66         public async Task<IActionResult> Notify()
67         {
68             try
69             {
70                 // 以 WeChatPayUnifiedOrderNotifyResponse 类型 解析请求
71                 var notify = await _notifyClient.ExecuteAsync<WeChatPayUnifiedOrderNotifyResponse>(Request);
72                 if (!notify.IsError)
73                 {
74                     if (notify.ResultCode == "SUCCESS")
75                     {
76                         // 业务代码
77                         // ...
78                         // ...
79 
80                         //返回给微信支付成功内容,停止继续通知
81                         return Content("<xml><return_code><![CDATA[SUCCESS]]></return_code></xml>", "text/xml");
82                     }
83                 }
84 
85                 // 订单其他状态均返回给微信支付空内容.
86                 return NoContent();
87             }
88             catch
89             {
90                 // 参数异常/验签失败均返回给微信支付空内容.
91                 return NoContent();
92             }
93         }
94 
95     }
96 }

 

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

代码:

 1 @{
 2     ViewData["Title"] = "Home Page";
 3 }
 4 
 5 <div style="padding:24px 0">
 6     <h3>微信支付 扫码支付 - <a href="https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_1" target="_blank">API文档</a></h3>
 7     <hr />
 8     <form asp-controller="WeChatPay" asp-action="UnifiedOrder" target="_blank">
 9         <div class="form-group">
10             <label>out_trade_no:</label>
11             <input type="text" class="form-control" name="out_trade_no" value="@DateTime.Now.ToString("yyyyMMddHHmmssfff")">
12         </div>
13         <div class="form-group">
14             <label>body:</label>
15             <input type="text" class="form-control" name="body" value="微信扫码支付测试详情">
16         </div>
17         <div class="form-group">
18             <label>total_fee:</label>
19             <input type="text" class="form-control" name="total_fee" value="1">
20         </div>
21         <div class="form-group">
22             <label>spbill_create_ip:</label>
23             <input type="text" class="form-control" name="spbill_create_ip" value="127.0.0.1">
24         </div>
25         <div class="form-group">
26             <label>notify_url(通知Url需外网环境可访问):</label>
27             <input type="text" class="form-control" name="notify_url" value="http://xxx.com/wechatpay/notify">
28         </div>
29         <div class="form-group">
30             <label>trade_type:</label>
31             <input type="text" class="form-control" name="trade_type" value="NATIVE">
32         </div>
33         <div class="form-group">
34             <label>product_id:</label>
35             <input type="text" class="form-control" name="product_id" value="@DateTime.Now.ToString("yyyyMMddHHmmssfff")">
36         </div>
37         <button type="submit" class="btn btn-primary">提交</button>
38     </form>
39 </div>

实现页面如下:

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

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

 

当前文章:http://zxqss.com/news/2019022186483/index.html

发布时间:2019-03-23 11:50:11

一下剩出七个 《彭博市场》评出2015年全球50大最具影响力人物 报复方舟子的肖传国被自己的欲望锤倒了! 随喜放生、功德无量,消灾纳福、转危为安 父亲:我们认识吗? 千年之恋 不伦恋之父亲爱上了女儿的同学 征服你的面试官

触目惊心的当代“官赌” 喜欢的东西想占为己有,是正常的儿童心理发展的现象 从什么时候起,我开始害怕送花的人! 女人的速度 玩你的招聘企业,你看出来了吗? 年轻人,不要把时间浪费在股市上 我的情人观 悄悄影响我们一生的十种食物 中国互联网企业退市潮来了? 自卑与自欺 如何向心爱之人表白 没有爸,妈又不喜欢,丈夫还发脾气骂人。我该怎么办? 一个人先性感,两个人就性福! 小升初:不学奥数,到底能不能上市重点?(上) 将男人挂在树枝上 罗李华语录 抢我爱人的贱人,我要怎么收拾她 看完你会知道结婚是什么感觉,值得未婚的我们去了解 《琅琊榜》“泰”有味,秒杀韩国欧巴

编辑:乙平通

我要说两句: (0人参与)

发布