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