Chains API (マーケットプレイス)
Chains APIは、マーケットプレイスおよびプラットフォームビジネスが、プラットフォームと加盟店間で支払いを分割することを可能にします。自動手数料処理を備えた複数当事者間の支払いフローを構築できます。
利用可能なエンドポイント
- チェーン課金の作成 - POST /charges (with destination)
- チェーン送金の作成 - POST /transfers (with merchant_id)
- チェーン一覧の取得 - GET /chains
- チェーン送金の取得 - GET /chains/:id/transfer
概要
Chains(Omise Linkとも呼ばれる)により以下が可能になります:
- 支払い分割 - プラットフォームと加盟店間で自動分割
- 手数料処理 - 加盟店への支払い前にプラットフ ォーム手数料を控除
- 複数加盟店への課金 - 顧客に課金し、複数の受取人に分配
- マーケットプレイスフロー - Uber、Airbnb、Shopifyスタイルの支払いフローを構築
- 透明な追跡 - 課金から送金までの支払いチェーン全体を追跡
Chainsの仕組み
- 顧客が支払う - 送金先(受取人)を指定して課金を作成
- プラットフォームが受け取る - 全額がプラットフォームアカウントに入金
- 手数料が控除される - プラットフォーム手数料が自動計算
- 加盟店が受け取る - 残額が受取人に送金
- チェーンを追跡 - フロー全体がチェーンIDで連携
前提条件
- チェーン対応アカウント - マーケットプレイス機能を有効にするにはOmiseにお問い合わせください
- 認証済み受取人 - 送金を受け取る前に受取人が認証されている必要があります
- KYCコンプライアンス - 受取人は本人確認を完了する必要があります
認証
すべてのChains APIエンドポイントはシークレットキーを使用した認証が必要です。
手数料計算
プラットフォーム手数料は固定金額および/またはパーセンテージで指定できます:
固定手数料
{
"platform_fee": {
"fixed": 50000
}
}
加盟店への支払いから฿500.00(50,000サタン)を控除します。
パーセンテージ手数料
{
"platform_fee": {
"percentage": 10.5
}
}
加盟店への支払いから10.5%を控除します。
複合手数料
{
"platform_fee": {
"fixed": 10000,
"percentage": 5
}
}
加盟店への支払いから฿100 + 5%を控除します。
計算例
課金金額: ฿10,000 (1,000,000サタン) プラットフォーム手数料: ฿100固定 + 5% = ฿100 + ฿500 = ฿600 加盟店受取額: ฿10,000 - ฿600 = ฿9,400
実装例
チェーン課金の作成
// Node.js example
const charge = await omise.charges.create({
amount: 1000000, // ฿10,000
currency: 'thb',
card: 'tokn_test_123',
description: 'Order #1234 - Platform Marketplace',
// Destination merchant
destination: {
amount: 950000, // ฿9,500 (after ฿500 platform fee)
recipient: 'recp_test_merchant_456'
},
// Platform fee
platform_fee: {
fixed: 50000 // ฿500
},
metadata: {
order_id: '1234',
merchant_id: 'merchant_456',
customer_email: 'customer@example.com'
}
});
console.log('Chain ID:', charge.id);
console.log('Status:', charge.status);
重要な注意事項
- destination.amountは課金金額からプラットフォーム手数料を引いた額以下である必要があります
- 送金先金額の合計は課金金額を超えることはできません
- プラットフォーム手数料は送金先金額から控除されます
- 送金が開始されるまで、資金はプラットフォームアカウントに保持されます
チェーンステータスのライフサイクル
チェーンは以下の段階を経て進行します:
- 課金作成 - 顧客の支払いが処理される
- 課金成功 - 支払いが確認される
- 送金保留中 - 送金スケジュールを待機中
- 送金作成 - 加盟店への送金が開始される
- 送金済み - 資金が受取人の銀行に送金される
- 支払完了 - 加盟店が資金を受け取る
複数受取人
複数の加盟店に支払いを分割できます:
{
amount: 1000000, // ฿10,000
destinations: [
{
amount: 400000, // ฿4,000 to merchant A
recipient: 'recp_test_merchant_a'
},
{
amount: 350000, // ฿3,500 to merchant B
recipient: 'recp_test_merchant_b'
}
],
platform_fee: {
fixed: 250000 // ฿2,500 platform keeps
}
}
Webhookイベント
Webhookでチェーンの進行状況を監視します:
charge.complete- 顧客の支払いが成功transfer.create- 加盟店への送金が開始transfer.sent- 加盟店への資金が送金transfer.paid- 加盟店が資金を受け取る
エラー処理
| エラー | 説明 | 解決策 |
|---|---|---|
chain_not_enabled | アカウントでチェーンが有効になっていない | サポートに連絡して有効化 |
invalid_destination | 受取人が見つからないか非アクティブ | 受取人が存在しアクティブであることを確認 |
destination_amount_exceeds_charge | 送金先合計 > 課金金額 | 送金先金額を減らす |
insufficient_balance | 送金に十分な残高がない | 送金前に課金を完了させる |
ベストプラクティス
1. 事前に受取人を確認
チェーン課金を作成する前に、すべての受取人が認証されていることを確認します:
const recipient = await omise.recipients.retrieve('recp_test_123');
if (recipient.verified === false) {
throw new Error('Recipient not verified');
}