1. 程式人生 > >Magicodes.Pay,打造開箱即用的統一支付庫,已提供ABP模組封裝

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相關模組的封裝或者歷史程式碼。

官方訂閱號

關注“麥扣聊技術”訂閱號免費獲取:

  • 最新文章、教程、文件

  • 視訊教程

  • 基礎版免費授權

  • 模板

  • 解決方案

  • 程式設計心得和理念

官方部落格/文件站

  • http://www.cnblogs.com/codelove/

  • https://docs.xin-lai.com/

其他開源庫地址

  • https://gitee.com/magicodes/Magicodes.Admin.Core

  • https://github.com/xin-lai

&n