zoukankan      html  css  js  c++  java
  • 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相关模块,则使用起来比较简单,具体您可以参考相关单元测试的编写。主要有以下步骤:

    1. 引用对应的Abp支付的Nuget包 如果仅需某个支付,仅需引用该支付的包。下面以通联支付为例,我们需要在工程中引用此包:

    2. 添加模块依赖 在对应工程的Abp的模块(AbpModule)中,添加对“AbpAllinpayModule”的依赖,如:

     [DependsOn(typeof(AbpAllinpayModule))]
    1. 在DbContext中添加名为“TransactionLogs”的DbSet 整个支付过程中(无论是支付成功还是出现异常),均会记录交易日志。交易日志会记录交易过程中的一些信息,比如客户端信息、交易参数、自定义参数以及异常信息。因此我们需要针对EF添加对TransactionLog的支持。需要在DbContext中添加的完整代码如下所示:

    public DbSet<TransactionLog> TransactionLogs { get; set; }
    1. 注册回调逻辑 我们需要实现“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不要重复。

    1. 向容器中注册回调逻辑

    我们可以将回调逻辑写在一个公共的程序集,然后使用以下代码进行注册:

     IocManager.IocContainer.Register(
                    //注册自定义支付回调逻辑
                    Classes.FromAssembly(typeof(ApplicationCoreModule).GetAssembly())
                        .BasedOn<IPaymentCallbackAction>()
                        .LifestyleTransient()
                        .Configure(component => component.Named(component.Implementation.FullName))
                        .WithServiceFromInterface()
                );

    除了上面的方式,我们还可以通过注入IPaymentManager对象,通过其RegisterCallbackAction方法来注册自定义的回调逻辑。

    1. 发起支付

    通过容器获得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相关模块的封装或者历史代码。

    官方订阅号

    关注“麦扣聊技术”订阅号免费获取:

    • 最新文章、教程、文档

    • 视频教程

    • 基础版免费授权

    • 模板

    • 解决方案

    • 编程心得和理念

    官方博客/文档站

    其他开源库地址

  • 相关阅读:
    zoj1589Professor John
    zoj1082Stockbroker Grapevine
    zoj1311Network
    zoj1060Sorting It All Out
    zoj1119SPF
    zju1085Alien Security
    zoj 2474Benny's Compiler
    zoj1068P,MTHBGWB
    what's next?
    ski for the first time~
  • 原文地址:https://www.cnblogs.com/codelove/p/11870743.html
Copyright © 2011-2022 走看看