Magicodes.Pay,打造開箱即用的統一支付庫,已提供ABP模塊封裝

Magicodes.Pay,打造開箱即用的統一支付庫,已提供ABP模塊封裝

簡介

Magicodes.Pay,是心萊科技團隊提供的統一支付庫,相關庫均使用.NET標準庫編寫,支持.NET Framework以及.NET Core。目前已提供Abp模塊的封裝,支持開箱即用。git

Nuget

新的包

 

 

已棄用的包,再也不更新

 

 

主要功能

Magicodes.Pay,是心萊科技團隊提供的統一支付庫,相關庫均使用.NET標準庫編寫,支持.NET Framework以及.NET Core。目前已提供Abp模塊的封裝,支持開箱即用。目前支持如下支付方式和功能:github

  • 支付寶支付編程

    • APP支付小程序

    • Wap支付微信

  • 支付寶國際支付async

    • 支持分帳函數

  • 微信支付單元測試

    • 小程序支付測試

    • 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相關模塊的封裝或者歷史代碼。

官方訂閱號

關注「麥扣聊技術」訂閱號免費獲取:

  • 最新文章、教程、文檔

  • 視頻教程

  • 基礎版免費受權

  • 模板

  • 解決方案

  • 編程心得和理念

官方博客/文檔站

其餘開源庫地址

相關文章
相關標籤/搜索