
企业微信小程序支付流程
前提准备
首先企业结合上一篇文章,开通企业级Native支付。
可点开这个链接进行申请开通:https://pay.weixin.qq.com/index.php/extend/product/lists?tid=3
创建生成二维码的工具类
首先安装ZXing.Net
和ZXing.Net.Bindings.Windows.Compatibility
两个包。
<PackageReference Include="ZXing.Net" Version="0.16.9" />
<PackageReference Include="ZXing.Net.Bindings.Windows.Compatibility" Version="0.16.12" />
创建根据字符串生成二维码的工具类
public static class QRCodeHelper
{
public static void GenerateQRCode(string link,string path)
{
var writer = new BarcodeWriter<Bitmap>();
writer.Format = BarcodeFormat.QR_CODE;
QrCodeEncodingOptions options = new QrCodeEncodingOptions()
{
DisableECI = true, //设置内容编码
CharacterSet = "UTF-8", //设置二维码的宽度和高度
Width = 200,
Height = 200,
Margin = 1 //设置二维码的边距,单位不是固定像素
};
var render = new AlternateBitmapRenderer();
writer.Renderer = render;
writer.Options = options;
Bitmap map = writer.Write(link);
map.Save(path);
}
}
添加相关小程序信息
在appsettings.json
中添加小程序相关信息。
"WechatNativeOptions": {
"Accounts": [
{
"AppId": "你的appid",
"AppSecret": "相关secret"
}
],
"SucceedNotifyUrl": "接收通知的地址"
}
在OptionTenpays
目录下创建WechatNativeOptions
类实例。
public partial class WechatNativeOptions : IOptions<WechatNativeOptions>
{
WechatNativeOptions IOptions<WechatNativeOptions>.Value => this;
public Types.WechatAccount[] Accounts { get; set; } = Array.Empty<Types.WechatAccount>();
public string SucceedNotifyUrl { get; set; } = string.Empty;
}
public partial class WechatNativeOptions
{
public static class Types
{
public class WechatAccount
{
public string AppId { get; set; } = string.Empty;
public string AppSecret { get; set; } = string.Empty;
}
}
}
创建请求的金额实例
/// <summary>
/// 请求的金额
/// </summary>
public class CreateOrderByNativeRequest
{
public int Amount { get; set; }
}
在Program
中注入生成二维码对应的小程序信息的类型。
builder.Services.Configure<WechatNativeOptions>(builder.Configuration.GetSection(nameof(WechatNativeOptions)));
支付与通知
[HttpPost]
[Route("nativeweb2")]
public async Task<IActionResult> CreateOrderByNativeWeb2([FromBody] Models.CreateOrderByNativeRequest requestModel)
{
//读取微信支付配置文件
var tenpayAccountOptions = _wechatnativeOptions.Accounts?.FirstOrDefault();
var tenpayOptions = _tenpayOptions.Merchants?.FirstOrDefault();
var client = _wechatTenpayClientFactory.Create(tenpayOptions.MerchantId);
var request = new CreatePayTransactionNativeRequest()
{
OutTradeNumber = "SAMPLE_OTN_" + DateTimeOffset.Now.ToString("yyyyMMddHHmmssfff"),
AppId = tenpayAccountOptions.AppId,
Description = "演示订单",
NotifyUrl = _tenpayOptions.SucceedNotifyUrl,
Amount = new CreatePayTransactionNativeRequest.Types.Amount() { Total = requestModel.Amount }
};
var response = await client.ExecuteCreatePayTransactionNativeAsync(request, cancellationToken: HttpContext.RequestAborted);
if (!response.IsSuccessful())
{
_logger.LogWarning(
"Native 下单失败(状态码:{0},错误代码:{1},错误描述:{2})。",
response.GetRawStatus(), response.ErrorCode, response.ErrorMessage
);
return new JsonResult(response);
}
var guid = Guid.NewGuid().ToString()+".png";
QRCodeHelper.GenerateQRCode(response.QrcodeUrl, Path.Combine(_wwwrootpath,"wwwroot", guid));
var url = Request.Host.Value + "/" + guid;
return Ok(url);
}
[HttpGet]
[Route("nativenotify")]
public IActionResult GetNativeNotify()
{
var request = HttpContext.Request;
var fulljsondata = JsonConvert.SerializeObject(request);
// 这里可以添加更多的信息获取逻辑
Console.WriteLine("数据获取:");
Console.WriteLine(fulljsondata);
// 返回请求的信息或者根据需要进行处理
return Ok();
}
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739
评价
排名
2
文章
634
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 :
好是好,这个对效率影响大不大哇,效率高不高
一个bug让程序员走上法庭 索赔金额达400亿日元
剑轩 : 有点可怕
ASP.NET Core 服务注册生命周期
剑轩 :
http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:
50010702506256


欢迎加群交流技术