分割払い
MSIおよびMCIキャンペーンを設定し、注文に適用されるオプションを取得し、顧客の正確な選択と支払いを行います。
分割キャンペーンは、DEUNAが特定の注文とカードに対して表示できる、商人のルールを支払いオプションに変換します。キャンペーンは顧客に直接料金を請求しません。キャンペーンは、どの条件が有効かを定義します。チェックアウトは、これらの条件を取得し、購入は顧客が選択した正確なオプションを送信します。
分割キャンペーンとは?#
キャンペーンは、商人のスコープで定義された、有効性と価格のルールです。DEUNA Adminで、キャンペーンの種類、通貨、有効期間、支払いプロバイダ、分割条件、およびカードブランドのルールを選択します。各カードブランドのルールは、分割あたりの最小および最大金額と適用される金利または商人のコストを定義できます。
チェックアウト時に、DEUNAはキャンペーンをライブな支払いコンテキストと組み合わせて使用します。オプションは、関連する条件が満たされた場合にのみ返されます。
| キャンペーンまたは支払いコンテキスト | 結果への影響 |
|---|---|
| 商人の情報、ストア、ステータス、および日付 | キャンペーンは、商人の所有で、注文のストアに適用され、有効であり、有効期間内にある必要があります。ストアのオーバーライドがないキャンペーンは、 all. |
| 通貨 | キャンペーンの通貨は、注文の通貨と一致する必要があります。 |
| カードブランド | DEUNAは、提供されたBINまたは保存されたカードからブランドを抽出し、対応するブランドルールを適用します。 |
| 分割あたりの金額範囲 | 計算された分割金額は、その期間とブランドに対して設定された最小およびオプションの最大金額を満たす必要があります。 |
| 支払いプロバイダー | キャンペーンに設定された少なくとも1つのプロセッサが有効である必要があります。 |
| ルーティング制約 | スマートまたは動的なルーティングは、有効でないプロセッサまたは分割条件を削除できます。 |
キャンペーンから支払いへ#
DEUNA Widgetsの場合、サポートされているチェックアウトエクスペリエンスは、適用可能なオプションを取得して表示します。Direct API統合の場合、チェックアウトはオプションの取得、表示、およびV2 Purchaseで選択の送信を行います。
1. キャンペーンを設定#
開きます DEUNA AdminでInstallments設定を開きます。. ユーザーは、分割キャンペーンの表示権限が必要です。キャンペーンの作成、編集、有効化、または無効化には、対応する編集権限が必要です。
- Choose
MSIまたはMCIキャンペーン名、および通貨を確認します。 - オプションで開始日と終了日を設定するか、キャンペーンに有効期限を設定しない。
- 互換性のある支払いプロバイダーを1つ以上選択する。
- キャンペーンに分割払いオプションを追加する。
- 各オプションに対して、対応するカードブランドを選択し、分割あたりの金額範囲と利率またはコストを設定する。
- キャンペーンを保存して有効にする。
プロバイダーのサポート、商用契約、およびアカウント設定によって、利用可能なプロセッサが決まる。サポートされていないものや、市場固有の要件については、DEUNAのテクニカルアカウントマネージャー(TAM)にご確認ください。
2. 関連するオプションを取得#
注文トークンとカードBINを使用して、新しいカードのオプションを取得します。保存されたカードフローでは、対応するカード識別子を使用できます。注文に基づいて有効になるため、支払い前に分割払いを表示するDirect APIリクエストには、注文トークンが必要です。
curl --request GET \
--url 'https://api.sandbox.deuna.io/merchants/transactions/orders/ORDER_TOKEN/installments?bin=411111' \
--header 'X-Api-Key: YOUR_PRIVATE_API_KEY' \
--header 'X-Merchant-ID: YOUR_MERCHANT_ID'const response = await fetch("https://api.sandbox.deuna.io/merchants/transactions/orders/ORDER_TOKEN/installments?bin=411111", {
method: "GET",
headers: {
"X-Api-Key": "YOUR_PRIVATE_API_KEY",
"X-Merchant-ID": "YOUR_MERCHANT_ID"
}
});
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
const data = await response.json();import requests
response = requests.request(
"GET",
"https://api.sandbox.deuna.io/merchants/transactions/orders/ORDER_TOKEN/installments?bin=411111",
headers={
"X-Api-Key": "YOUR_PRIVATE_API_KEY",
"X-Merchant-ID": "YOUR_MERCHANT_ID"
},
)
response.raise_for_status()
data = response.json()<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sandbox.deuna.io/merchants/transactions/orders/ORDER_TOKEN/installments?bin=411111",
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"X-Api-Key: YOUR_PRIVATE_API_KEY",
"X-Merchant-ID: YOUR_MERCHANT_ID"
]
]);
$response = curl_exec($curl);
curl_close($curl);import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.sandbox.deuna.io/merchants/transactions/orders/ORDER_TOKEN/installments?bin=411111"))
.header("X-Api-Key", "YOUR_PRIVATE_API_KEY")
.header("X-Merchant-ID", "YOUR_MERCHANT_ID")
.method("GET", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = HttpClient.newHttpClient().send(
request, HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}package main
import (
"fmt"
"io"
"net/http"
)
func main() {
request, err := http.NewRequest("GET", "https://api.sandbox.deuna.io/merchants/transactions/orders/ORDER_TOKEN/installments?bin=411111", nil)
if err != nil { panic(err) }
request.Header.Set("X-Api-Key", "YOUR_PRIVATE_API_KEY")
request.Header.Set("X-Merchant-ID", "YOUR_MERCHANT_ID")
response, err := http.DefaultClient.Do(request)
if err != nil { panic(err) }
defer response.Body.Close()
body, _ := io.ReadAll(response.Body)
fmt.Println(string(body))
}参照 分割オプションを一覧表示 完全なエンドポイント契約を確認する。
返されたオプションには、チェックアウトで表示し、保存する必要がある値が含まれます。
{
"installments": [
{
"installments": 6,
"installments_amount": 16667,
"display_installments_amount": "MXN 166.67",
"installment_rate": 0,
"display_installment_label": "6 payments of MXN 166.67 without interest",
"plan_option_id": "a4756a5f-7f9b-414d-8712-e3a9da2be337",
"installment_total_amount": 100000,
"display_installment_total_amount": "MXN 1,000.00"
}
]
}金額は、通貨の最小単位で表示されます。顧客向けに表示するフィールドには、返された値を、計算や調整に使用する数値フィールドには、元の値を設定してください。
3. 選択したオプションを送信#
送信 両方の 同じレスポンス要素からの値:
payment_source.card_info.installments: 選択された分割回数。payment_source.card_info.installment.plan_option_id: その選択されたオプションの正確なID。
{
"order_token": "ORDER_TOKEN",
"payer_info": {
"email": "customer@example.com"
},
"payment_source": {
"method_type": "credit_card",
"card_info": {
"card_id": "CARD_ID",
"installments": 6,
"installment": {
"plan_option_id": "a4756a5f-7f9b-414d-8712-e3a9da2be337"
}
}
}
}分割回数とIDは同じオプションを記述する必要があります。DEUNAはオプションIDを使用して、解決されたプランと利用可能なプロセッサを特定し、選択された接続を通じて送信される支払いリクエストで分割回数を使用します。
APIと顧客アクションのライフサイクルを実装するために、 決済を作成する フル・パーチャーズV2契約用。
実装チェックリスト#
- 現在の注文とカードコンテキストに対して返されたオプションのみを表示。
- 保持
plan_option_idおよび対応するinstallmentsvalue. - MCIの場合、確認前に返された総額と分割金額を表示。
- 注文金額、通貨、カード、または関連する支払いコンテキストが変更された場合に、オプションを再度取得します。
- 空のオプションリストを「利用可能なキャンペーンオプションがない」と解釈し、支払い失敗とはみなさないでください。
- 設定されたキャンペーンで承認されたカードと支払いプロバイダーを使用してテストしてください。