1. 程式人生 > >開源庫支付庫Magicodes.Pay釋出

開源庫支付庫Magicodes.Pay釋出

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目錄下的程式碼。

配置參考

相關配置請參考此程式碼:https://gitee.com/xl_wenqiang/Magicodes.Admin.Core/blob/develop/src/unity/Magicodes.Pay/Startup/PayStartup.cs

部分程式碼如下所示:

參考參考

支付相關程式碼可以參考:https://gitee.com/xl_wenqiang/Magicodes.Admin.Core/blob/develop/src/unity/Magicodes.Pay/Services/PayAppService.cs

配置介面參考

如下圖所示: 參考參考參考

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

回撥邏輯參考:

 回撥邏輯