前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Magicodes.Pay,打造开箱即用的统一支付库,已提供ABP模块封装

Magicodes.Pay,打造开箱即用的统一支付库,已提供ABP模块封装

作者头像
心莱科技雪雁
发布2019-11-07 16:20:36
4570
发布2019-11-07 16:20:36
举报
文章被收录于专栏:雪雁的专栏雪雁的专栏

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包 如果仅需某个支付,仅需引用该支付的包。下面以通联支付为例,我们需要在工程中引用此包:
  1. 添加模块依赖 在对应工程的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相关模块的封装或者历史代码。

官方订阅号

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

  • 最新文章、教程、文档
  • 视频教程
  • 基础版免费授权
  • 模板
  • 解决方案
  • 编程心得和理念

官方博客/文档站

  • http://www.cnblogs.com/codelove/
  • https://docs.xin-lai.com/

其他开源库地址

  • https://gitee.com/magicodes/Magicodes.Admin.Core
  • https://github.com/xin-lai

本文版权归作者和湖南心莱信息科技有限公司共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 麦扣聊技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Magicodes.Pay,打造开箱即用的统一支付库,已提供ABP模块封装
    • 简介
      • Nuget
        • 新的包
        • 已弃用的包,不再更新
      • 主要功能
        • 开始使用
          • 非ABP集成
            • 官方订阅号
              • 官方博客/文档站
                • 其他开源库地址
                相关产品与服务
                容器服务
                腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档