.NET向け統一支払いライブラリMagicodes.Payの概要と実装

Magicodes.Payは、.NET Standardで実装されたクロスプラットフォーム対応の統一支払いライブラリです。.NET Frameworkと.NET Coreの両環境で動作し、以下の支払い方式と機能をサポートしています。

  • アリペイアプリ内決済

  • アリペイWap決済

  • アリペイ国際決済

  • 収益分配機能

  • WeChatミニアプリ決済

  • WeChatアプリ決済

  • 統一支払いコールバック処理

  • ログ関数の注入(ロギングライブラリ非依存)

  • 設定取得ロジックのカスタマイズ可能な注入(設定ファイル、ユーザー設定、マルチテナント対応など)

本ライブラリは多数のプロジェクトで実績があり、Magicodes.Adminオープンソースプロジェクトで実装例を公開しています。

Magicodes.Payリポジトリ: https://github.com/xin-lai/magicodes.pay

Magicodes.Adminリポジトリ: https://gitee.com/xl_wenqiang/Magicodes.Admin.Core

今後の開発計画として、以下の機能追加を予定しています:

  • アリペイPC決済
  • WeChat H5決済
  • デフォルトコールバック管理ロジックの提供

設定方法

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

実装例

WeChat支払い実装

if (WeChatPaymentService == null)
{
    throw new InvalidOperationException("支払いサービスが利用できません");
}

var paymentRequest = new WeChatPaymentRequest
{
    Description = input.Description,
    OrderNumber = input.OrderNumber,
    CustomData = input.Metadata,
    Amount = input.TotalAmount,
    ClientIP = _networkInfoProvider?.ClientIP
};

try
{
    var paymentResult = WeChatPaymentService.ProcessPayment(paymentRequest);
    return Task.FromResult(paymentResult);
}
catch (Exception ex)
{
    throw new BusinessException(ex.Message);
}

アリペイ支払い実装

if (AlipayPaymentService == null)
{
    throw new InvalidOperationException("支払いサービスが利用できません");
}

var alipayRequest = new AlipayPaymentRequest
{
    Description = input.Description,
    Title = input.Title,
    OrderNumber = input.OrderNumber,
    Metadata = input.Metadata,
    Amount = input.TotalAmount
};

try
{
    var alipayResult = await AlipayPaymentService.ProcessPayment(alipayRequest);
    return alipayResult.ResponseBody;
}
catch (Exception ex)
{
    throw new BusinessException(ex.Message);
}

国際アリペイ実装

if (GlobalAlipayService == null)
{
    throw new InvalidOperationException("国際支払いサービスが利用できません");
}

var globalRequest = new GlobalPaymentRequest
{
    Description = input.Description,
    Title = input.Title,
    OrderNumber = input.OrderNumber,
    Amount = input.TotalAmount
};

try
{
    return await GlobalAlipayService.ProcessPayment(globalRequest);
}
catch (Exception ex)
{
    throw new BusinessException(ex.Message);
}

支払いコールバック処理

目的

コールバック処理ロジックとエンドポイントの統一

実装例

void ProcessPaymentCallback(string providerKey, string orderNumber, string transactionId, int amount, JObject payload)
{
    using (var callbackManager = _serviceProvider.GetRequiredService<PaymentCallbackManager>())
    {
        if (callbackManager == null)
        {
            throw new SystemException("支払いコールバックマネージャーの初期化に失敗しました");
        }
        
        AsyncHelper.RunSync(async () => 
            await callbackManager.ProcessCallback(providerKey, orderNumber, transactionId, amount, payload));
    }
}

完全なコールバック実装は以下を参照: https://gitee.com/xl_wenqiang/Magicodes.Admin.Core/blob/develop/src/unity/Magicodes.Pay/Startup/PayStartup.cs

タグ: Magicodes.Pay .NET Standard alipay WeChat Pay 支払い統合

7月19日 21:30 投稿