開源庫支付庫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

回調邏輯參考:

 回調邏輯

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM