Magicodes.Pay,是心萊科技團隊提供的統一支付庫,相關庫均使用.NET標準庫編寫,支持.NET Framework以及.NET Core。目前已提供Abp模塊的封裝,支持開箱即用。git
Magicodes.Pay,是心萊科技團隊提供的統一支付庫,相關庫均使用.NET標準庫編寫,支持.NET Framework以及.NET Core。目前已提供Abp模塊的封裝,支持開箱即用。目前支持如下支付方式和功能:github
支付寶支付編程
APP支付小程序
Wap支付微信
支付寶國際支付async
支持分帳函數
微信支付單元測試
小程序支付測試
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相關模塊的封裝或者歷史代碼。
關注「麥扣聊技術」訂閱號免費獲取:
最新文章、教程、文檔
視頻教程
基礎版免費受權
模板
解決方案
編程心得和理念