简介
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/ https://www.cnblogs.com/codelove/
- https://docs.xin-lai.com/
- https://gitee.com/magicodes/Magicodes.Admin.Core
- https://github.com/xin-lai
来源: http://www.bubuko.com/infodetail-3289907.html