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相關模組,則使用起來比較簡單,具體您可以參考相關單元測試的編寫。主要有以下步驟:
-
引用對應的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://docs.xin-lai.com/
其他開源庫地址
-
https://gitee.com/magicodes/Magicodes.Admin.Core
-
https://github.com/xin-lai
&n