Magicodes.Pay,打造开箱即用的统一支付库,已提供ABP模块封装
Magicodes.Pay,打造开箱即用的统一支付库,已提供ABP模块封装
简介
Magicodes.Pay,是笔者封装的统一支付库,相关库均使用.NET标准库编写,支持.NET Framework以及.NET Core。目前已提供Abp模块的封装,支持开箱即用。
Nuget
新的包
已弃用的包,不再更新
主要功能
Magicodes.Pay,是心莱科技团队提供的统一支付库,相关库均使用.NET标准库编写,支持.NET Framework以及.NET Core。目前已提供Abp模块的封装,支持开箱即用。目前支持以下支付方式和功能:
-
支付宝支付
-
APP支付
-
Wap支付
-
支付宝国际支付
-
支持分账
-
微信支付
-
小程序支付
-
APP支付
-
订单查询
-
企业付款(提现)
-
退款申请
-
普通红包
-
通联支付
-
小程序支付
-
统一支付回调处理
-
支持日志函数注入(不依赖支付库)
-
支持支付配置函数注入,以便于支持自定义配置获取逻辑,以应用于不同的场景(比如从配置文件、用户设置获取配置,或者多租户支持)
-
针对ABP提供模块封装,添加模块依赖即可立即使用。主要包括:
-
支付渠道注册(IPaymentRegister)
-
支付回调逻辑处理(IPaymentCallbackAction)
-
统一支付服务实现(IToPayService)
-
统一支付服务封装(见IPayAppService)
-
支付管理器封装(IPaymentManager),包含:
-
交易日志封装,自动记录客户端信息以及自动异常处理和记录
-
仅需编写一次回调逻辑,即可支持多个支付渠道
-
业务参数支持更大长度(500)
开始使用
如果使用Abp相关模块,则使用起来比较简单,具体您可以参考相关单元测试的编写。主要有以下步骤:
-
引用对应的Abp支付的Nuget包 如果仅需某个支付,仅需引用该支付的包。下面以通联支付为例,我们需要在工程中引用此包:
-
添加模块依赖 在对应工程的Abp的模块(AbpModule)中,添加对“AbpAllinpayModule”的依赖,如:
[DependsOn(typeof(AbpAllinpayModule))]
-
在DbContext中添加名为“TransactionLogs”的DbSet 整个支付过程中(无论是支付成功还是出现异常),均会记录交易日志。交易日志会记录交易过程中的一些信息,比如客户端信息、交易参数、自定义参数以及异常信息。因此我们需要针对EF添加对TransactionLog的支持。需要在DbContext中添加的完整代码如下所示:
public DbSet<TransactionLog> TransactionLogs { get; set; }
-
注册回调逻辑 我们需要实现“IPaymentCallbackAction”接口来编写自定义的回调逻辑。如以下示例所示:
public class TestPaymentCallbackAction : IPaymentCallbackAction { /// <summary> /// 业务Key /// </summary> public string Key { get; set; } = "缴费支付"; /// <summary> /// 执行回调 /// </summary> /// <returns></returns> public async Task Process(IUnitOfWorkManager unitOfWork, TransactionLog transactionLog) { var data = transactionLog.CustomData.FromJsonString<JObject>(); //业务处理 await Task.FromResult(0); } }
注意Key不要重复。
-
向容器中注册回调逻辑
我们可以将回调逻辑写在一个公共的程序集,然后使用以下代码进行注册:
IocManager.IocContainer.Register( //注册自定义支付回调逻辑 Classes.FromAssembly(typeof(ApplicationCoreModule).GetAssembly()) .BasedOn<IPaymentCallbackAction>() .LifestyleTransient() .Configure(component => component.Named(component.Implementation.FullName)) .WithServiceFromInterface() );
除了上面的方式,我们还可以通过注入IPaymentManager对象,通过其RegisterCallbackAction方法来注册自定义的回调逻辑。
-
发起支付
通过容器获得IPayAppService,然后调用Pay方法即可。也可以自行封装:
public async Task<object> Payment(PaymentInput input) { return await _payAppService.Pay(new PayInputBase() { Body = $"{input.Name} {input.ChargeProjectName}", CustomData = input.ToJsonString(), Key = "缴费支付", OpenId = input.OpenId, Subject = input.ChargeProjectName, TotalAmount = input.Amount, PayChannel = input.PayChannel }); }
通过IPayAppService统一支付有如下好处:
-
统一支付(无论支付宝还是微信各种端的支付,均可统一)
-
自动记录交易日志以及进行相关逻辑处理
-
自定义数据依赖交易日志进行存储,而不依赖支付渠道,因此支持无业务参数的支付渠道,也支持存储更多自定义数据
非ABP集成
请参考Abp相关模块的封装或者历史代码。
官方订阅号
关注“麦扣聊技术”订阅号免费获取:
-
最新文章、教程、文档
-
视频教程
-
基础版免费授权
-
模板
-
解决方案
-
编程心得和理念
官方博客/文档站
其他开源库地址
出处:http://www.cnblogs.com/codelove/
沟通渠道:编程交流群<85318032> 产品交流群<897857351>
如果喜欢作者的文章,请关注【麦扣聊技术】订阅号以便第一时间获得最新内容。本文版权归作者和湖南心莱信息科技有限公司共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
静听鸟语花香,漫赏云卷云舒。

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架