Magicodes.Pay,是心萊科技團隊提供的統一支付庫,相關庫均使用.NET標准庫編寫,支持.NET Framework以及.NET Core。目前支持以下支付方式和功能:
-
支付寶APP支付
-
支付寶Wap支付
-
支付寶國際支付
-
支持分賬
-
微信小程序支付
-
微信APP支付
-
統一支付回調處理
-
支持日志函數注入(不依賴日志庫)
-
支持支付配置函數注入,以便於支持自定義配置獲取邏輯,以應用於不同的場景(比如從配置文件、用戶設置獲取配置,或者多租戶支持)
目前此庫我們在很多項目上已經進行了驗證,由於項目趕工,許多功能我們並沒有添加、遷移或者重構過來,在后續的過程中,我們會逐步來完成這些工作。同時,在Magicodes.Admin開源庫中,我們也編寫了相關的Demo和實現。
Magicodes.Pay開源庫地址:
https://github.com/xin-lai/magicodes.pay
Magicodes.Admin開源庫地址:https://gitee.com/xl_wenqiang/Magicodes.Admin.Core
整個支付實現這塊,我們在Magicodes.Admin開源庫中已經提供了統一支付的Demo,而且我們將會提供根據請求頭來自動調用相關支付的功能。如下圖所示:
在各個業務支付場景中,我們可以非常方便的調用此統一支付,如下圖所示:
VNext
這是目前的下個版本的規划:
-
支付寶PC支付
-
微信H5支付
-
提供默認的回調管理邏輯,支持回調處理函數的注入
具體功能我們會根據項目的情況來迭代,如果你有好的建議或者意見,可以關注我們的公眾號“magiccodes”來提交您的意見或者意見。
如何配置
相關庫的配置相對比較簡單,一般均使用相關Builder類來配置自定義日志邏輯、配置獲取邏輯等,具體可以查閱Builder目錄下的代碼。
配置參考
部分代碼如下所示:
配置界面參考
Demo
微信支付Demo
if (WeChatPayApi == null) { throw new UserFriendlyException("支付未開放,請聯系管理員!"); } var appPayInput = new WeChat.Pay.Dto.AppPayInput { Body = input.Body, OutTradeNo = input.OutTradeNo, Attach = input.CustomData, TotalFee = input.TotalAmount, SpbillCreateIp = _clientInfoProvider?.ClientIpAddress }; try { var appPayOutput = WeChatPayApi.AppPay(appPayInput); return Task.FromResult(appPayOutput); } catch (Exception ex) { throw new UserFriendlyException(ex.Message); }
支付寶支付Demo
if (AlipayAppService == null) { throw new UserFriendlyException("支付未開放,請聯系管理員!"); } var appPayInput = new Alipay.Dto.AppPayInput { Body = input.Body, Subject = input.Subject, TradeNo = input.OutTradeNo, PassbackParams = input.CustomData, TotalAmount = input.TotalAmount }; try { var appPayOutput = await AlipayAppService.AppPay(appPayInput); return appPayOutput.Response.Body; } catch (Exception ex) { throw new UserFriendlyException(ex.Message); }
支付寶國際支付Demo
if (GlobalAlipayAppService == null) { throw new UserFriendlyException("支付未開放,請聯系管理員!"); } var payInput = new Alipay.Global.Dto.PayInput { Body = input.Body, Subject = input.Subject, TradeNo = input.OutTradeNo, //PassbackParams = input.CustomData, TotalFee = input.TotalAmount, }; try { return await GlobalAlipayAppService.Pay(payInput); } catch (Exception ex) { throw new UserFriendlyException(ex.Message); }
國際支付寶分賬參考界面
支付回調
目的
統一回調處理邏輯和回調處理地址
代碼參考
上圖的PayAction參考:
void PayAction(string key, string outTradeNo, string transactionId, int totalFee, JObject data) { using (var paymentCallbackManagerObj = iocManager.ResolveAsDisposable<PaymentCallbackManager>()) { var paymentCallbackManager = paymentCallbackManagerObj?.Object; if (paymentCallbackManager == null) { throw new ApplicationException("支付回調管理器異常,無法執行回調!"); } AsyncHelper.RunSync(async () => await paymentCallbackManager.ExecuteCallback(key, outTradeNo, transactionId, totalFee, data)); } }
完整回調代碼請參考此代碼:https://gitee.com/xl_wenqiang/Magicodes.Admin.Core/blob/develop/src/unity/Magicodes.Pay/Startup/PayStartup.cs
回調邏輯參考: