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相關模塊的封裝或者歷史代碼。
官方訂閱號
關注“麥扣聊技術”訂閱號免費獲取:
-
最新文章、教程、文檔
-
視頻教程
-
基礎版免費授權
-
模板
-
解決方案
-
編程心得和理念

官方博客/文檔站
其他開源庫地址
