tnblog
首页
视频
资源
登录

.net6开发企业二维码微信支付

1708人阅读 2024/4/15 17:45 总访问:3467190 评论:0 收藏:0 手机
分类: .net后台框架

企业微信小程序支付流程

前提准备


首先企业结合上一篇文章,开通企业级Native支付。
可点开这个链接进行申请开通:https://pay.weixin.qq.com/index.php/extend/product/lists?tid=3

创建生成二维码的工具类


首先安装ZXing.NetZXing.Net.Bindings.Windows.Compatibility两个包。

  1. <PackageReference Include="ZXing.Net" Version="0.16.9" />
  2. <PackageReference Include="ZXing.Net.Bindings.Windows.Compatibility" Version="0.16.12" />


创建根据字符串生成二维码的工具类

  1. public static class QRCodeHelper
  2. {
  3. public static void GenerateQRCode(string link,string path)
  4. {
  5. var writer = new BarcodeWriter<Bitmap>();
  6. writer.Format = BarcodeFormat.QR_CODE;
  7. QrCodeEncodingOptions options = new QrCodeEncodingOptions()
  8. {
  9. DisableECI = true, //设置内容编码
  10. CharacterSet = "UTF-8", //设置二维码的宽度和高度
  11. Width = 200,
  12. Height = 200,
  13. Margin = 1 //设置二维码的边距,单位不是固定像素
  14. };
  15. var render = new AlternateBitmapRenderer();
  16. writer.Renderer = render;
  17. writer.Options = options;
  18. Bitmap map = writer.Write(link);
  19. map.Save(path);
  20. }
  21. }

添加相关小程序信息


appsettings.json中添加小程序相关信息。

  1. "WechatNativeOptions": {
  2. "Accounts": [
  3. {
  4. "AppId": "你的appid",
  5. "AppSecret": "相关secret"
  6. }
  7. ],
  8. "SucceedNotifyUrl": "接收通知的地址"
  9. }


OptionTenpays目录下创建WechatNativeOptions类实例。

  1. public partial class WechatNativeOptions : IOptions<WechatNativeOptions>
  2. {
  3. WechatNativeOptions IOptions<WechatNativeOptions>.Value => this;
  4. public Types.WechatAccount[] Accounts { get; set; } = Array.Empty<Types.WechatAccount>();
  5. public string SucceedNotifyUrl { get; set; } = string.Empty;
  6. }
  7. public partial class WechatNativeOptions
  8. {
  9. public static class Types
  10. {
  11. public class WechatAccount
  12. {
  13. public string AppId { get; set; } = string.Empty;
  14. public string AppSecret { get; set; } = string.Empty;
  15. }
  16. }
  17. }


创建请求的金额实例

  1. /// <summary>
  2. /// 请求的金额
  3. /// </summary>
  4. public class CreateOrderByNativeRequest
  5. {
  6. public int Amount { get; set; }
  7. }


Program中注入生成二维码对应的小程序信息的类型。

  1. builder.Services.Configure<WechatNativeOptions>(builder.Configuration.GetSection(nameof(WechatNativeOptions)));

支付与通知

  1. [HttpPost]
  2. [Route("nativeweb2")]
  3. public async Task<IActionResult> CreateOrderByNativeWeb2([FromBody] Models.CreateOrderByNativeRequest requestModel)
  4. {
  5. //读取微信支付配置文件
  6. var tenpayAccountOptions = _wechatnativeOptions.Accounts?.FirstOrDefault();
  7. var tenpayOptions = _tenpayOptions.Merchants?.FirstOrDefault();
  8. var client = _wechatTenpayClientFactory.Create(tenpayOptions.MerchantId);
  9. var request = new CreatePayTransactionNativeRequest()
  10. {
  11. OutTradeNumber = "SAMPLE_OTN_" + DateTimeOffset.Now.ToString("yyyyMMddHHmmssfff"),
  12. AppId = tenpayAccountOptions.AppId,
  13. Description = "演示订单",
  14. NotifyUrl = _tenpayOptions.SucceedNotifyUrl,
  15. Amount = new CreatePayTransactionNativeRequest.Types.Amount() { Total = requestModel.Amount }
  16. };
  17. var response = await client.ExecuteCreatePayTransactionNativeAsync(request, cancellationToken: HttpContext.RequestAborted);
  18. if (!response.IsSuccessful())
  19. {
  20. _logger.LogWarning(
  21. "Native 下单失败(状态码:{0},错误代码:{1},错误描述:{2})。",
  22. response.GetRawStatus(), response.ErrorCode, response.ErrorMessage
  23. );
  24. return new JsonResult(response);
  25. }
  26. var guid = Guid.NewGuid().ToString()+".png";
  27. QRCodeHelper.GenerateQRCode(response.QrcodeUrl, Path.Combine(_wwwrootpath,"wwwroot", guid));
  28. var url = Request.Host.Value + "/" + guid;
  29. return Ok(url);
  30. }
  1. [HttpGet]
  2. [Route("nativenotify")]
  3. public IActionResult GetNativeNotify()
  4. {
  5. var request = HttpContext.Request;
  6. var fulljsondata = JsonConvert.SerializeObject(request);
  7. // 这里可以添加更多的信息获取逻辑
  8. Console.WriteLine("数据获取:");
  9. Console.WriteLine(fulljsondata);
  10. // 返回请求的信息或者根据需要进行处理
  11. return Ok();
  12. }

欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

评价

.net6 Ocelot 与 Kubernetes

.Net6 Ocelot 与 Kubernetes[TOC] 前言这玩意太坑人了。浪费了我一天的时间。先看我们想实现的效果流程: 首先我们请求sv...

.net core发布出来swagger无法访问。docker 发布.net6 webapi swagger访问不到

因为代码里边设置swagger的代码是: if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); app.Use...

.net6 指定时区

.Net6 指定时区[TOC] 最近相当忙!忙着学这学那的,各种考试。以及项目上也有很多改动。还有这恶心的时间问题(特别注意当...

.net6 AsyncEx 异步锁

.Net6 AsyncEx[TOC] 简单来讲就是可以通过异步方式实现锁。安装&lt;PackageReference Include=&quot;Nito.AsyncEx&quot; V...

Kubernetes .net6 集群管理(一)

Kubernetes .Net6 集群管理(一)[TOC] 对于Kubernetes集群的管理,.net提供了KubernetesClient库,可以对k8s集群通过简单...

Kubernetes .net6 Webhook

Kubernetes .Net6 Webhook[TOC] 本文主要是学习陈计节大佬讲的 使用 .NET Core 开发 Kubernetes 基础组件记录的笔记。 Ad...

.net6 设置信任自签证书(浏览器可信任)

.Net6 设置信任自签证书(浏览器可信任)[TOC] 先决条件确保本地windows上拥有openssl,没有的自己去:http://slproweb.com...

Kubernetes .net6 CRD

Kubernetes .Net6 CRD[TOC] CRD介绍简单来说就是自定义资源,像Pod、Service、Deployment一样。创建自定义资源的资源类型...

linux批量执行命令脚本。linux脚本执行docker镜像打包运行.net6项目等

linux批量执行命令脚本1:创建一个.sh后缀的文件vi run.sh 2:在文件开头添加内容#!/bin/bash 3:在文件里边输入想要执行...

docker发布.net6项目。制作发布的批量脚本一键发布脚本

docker 发布.net core项目可以参考:https://www.tnblog.net/aojiancc2/article/details/5030 docker发布.net6项目简单的d...

.net6 连接mysql报错Unable to connect to any of the specified MySQL hosts.

.net5/6 连接mysql报错Unable to connect to any of the specified MySQL hosts. 不能使用点.连接 server=.;uid=root;pwd...

.net6使用nacos作为配置中心

consul+.net core实现配置中心:https://www.tnblog.net/aojiancc2/article/details/6815nacos的安装参考:https://www.tnbl...

.net6使用session

先在Program.cs中引入 使用存储 HttpContext.Session.SetString(&quot;nickname&quot;,&quot;test&quot;); 读取 string...

.net6使用nacos实现服务注册与服务发现

.net6使用nacos作为配置中心:https://www.tnblog.net/aojiancc2/article/details/7870docker安装nacos v2.1.2:https://www...

.net6.net core获取服务器上所有网卡的IP地址

代码如下: //获取服务器上所有网卡的IP地址 NetworkInterface[] networks = NetworkInterface.GetAllNetworkInterfaces(...

.net6使用nacos 集群部署,负载均衡调用 。docker swarm 集群部署.net6项目

我们这里的k8s测试环境暂时用不了了,这里先使用docker swarm来进行一下集群部署。.net6使用nacos实现服务注册与服务发现:h...
这一世以无限游戏为使命!
排名
2
文章
634
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 : 好是好,这个对效率影响大不大哇,效率高不高
ASP.NET Core 服务注册生命周期
剑轩 : http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术