curl --request POST \
--url https://api.sandbox.zafapay.com/v1/payments \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"amount": 17.62,
"currency": "usd",
"external_id": "order_12345",
"flow_id": "flow_abc123",
"payment_method": "card",
"metadata": {},
"save_card": true,
"payment_method_id": "pmi_abc123",
"name": "山田 太郎",
"customer_id": "cust_abc123",
"email": "customer@example.com",
"tel": "090-1234-5678",
"token": "tok_xxxxxxxxxxxxxxxxxxxxxx",
"return_url": "https://your-site.com/payment-complete"
}
'import requests
url = "https://api.sandbox.zafapay.com/v1/payments"
payload = {
"amount": 17.62,
"currency": "usd",
"external_id": "order_12345",
"flow_id": "flow_abc123",
"payment_method": "card",
"metadata": {},
"save_card": True,
"payment_method_id": "pmi_abc123",
"name": "山田 太郎",
"customer_id": "cust_abc123",
"email": "customer@example.com",
"tel": "090-1234-5678",
"token": "tok_xxxxxxxxxxxxxxxxxxxxxx",
"return_url": "https://your-site.com/payment-complete"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
amount: 17.62,
currency: 'usd',
external_id: 'order_12345',
flow_id: 'flow_abc123',
payment_method: 'card',
metadata: {},
save_card: true,
payment_method_id: 'pmi_abc123',
name: '山田 太郎',
customer_id: 'cust_abc123',
email: 'customer@example.com',
tel: '090-1234-5678',
token: 'tok_xxxxxxxxxxxxxxxxxxxxxx',
return_url: 'https://your-site.com/payment-complete'
})
};
fetch('https://api.sandbox.zafapay.com/v1/payments', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sandbox.zafapay.com/v1/payments",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'amount' => 17.62,
'currency' => 'usd',
'external_id' => 'order_12345',
'flow_id' => 'flow_abc123',
'payment_method' => 'card',
'metadata' => [
],
'save_card' => true,
'payment_method_id' => 'pmi_abc123',
'name' => '山田 太郎',
'customer_id' => 'cust_abc123',
'email' => 'customer@example.com',
'tel' => '090-1234-5678',
'token' => 'tok_xxxxxxxxxxxxxxxxxxxxxx',
'return_url' => 'https://your-site.com/payment-complete'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.sandbox.zafapay.com/v1/payments"
payload := strings.NewReader("{\n \"amount\": 17.62,\n \"currency\": \"usd\",\n \"external_id\": \"order_12345\",\n \"flow_id\": \"flow_abc123\",\n \"payment_method\": \"card\",\n \"metadata\": {},\n \"save_card\": true,\n \"payment_method_id\": \"pmi_abc123\",\n \"name\": \"山田 太郎\",\n \"customer_id\": \"cust_abc123\",\n \"email\": \"customer@example.com\",\n \"tel\": \"090-1234-5678\",\n \"token\": \"tok_xxxxxxxxxxxxxxxxxxxxxx\",\n \"return_url\": \"https://your-site.com/payment-complete\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.sandbox.zafapay.com/v1/payments")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"amount\": 17.62,\n \"currency\": \"usd\",\n \"external_id\": \"order_12345\",\n \"flow_id\": \"flow_abc123\",\n \"payment_method\": \"card\",\n \"metadata\": {},\n \"save_card\": true,\n \"payment_method_id\": \"pmi_abc123\",\n \"name\": \"山田 太郎\",\n \"customer_id\": \"cust_abc123\",\n \"email\": \"customer@example.com\",\n \"tel\": \"090-1234-5678\",\n \"token\": \"tok_xxxxxxxxxxxxxxxxxxxxxx\",\n \"return_url\": \"https://your-site.com/payment-complete\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sandbox.zafapay.com/v1/payments")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"amount\": 17.62,\n \"currency\": \"usd\",\n \"external_id\": \"order_12345\",\n \"flow_id\": \"flow_abc123\",\n \"payment_method\": \"card\",\n \"metadata\": {},\n \"save_card\": true,\n \"payment_method_id\": \"pmi_abc123\",\n \"name\": \"山田 太郎\",\n \"customer_id\": \"cust_abc123\",\n \"email\": \"customer@example.com\",\n \"tel\": \"090-1234-5678\",\n \"token\": \"tok_xxxxxxxxxxxxxxxxxxxxxx\",\n \"return_url\": \"https://your-site.com/payment-complete\"\n}"
response = http.request(request)
puts response.read_body{
"id": "req_abc123",
"status": "pending",
"amount": 17.62,
"currency": "usd",
"external_id": "order_12345",
"metadata": {},
"flow_id": "flow_default",
"payment_type": "single",
"payment_url": "https://pay.sandbox.zafapay.com/checkout/req_abc123?token=xxxxxxxx",
"redirect_url": "https://pay.sandbox.zafapay.com/3ds/req_abc123?token=xxxxxxxx",
"created_at": "2025-01-01T00:00:00.000Z"
}{
"status": "failed",
"error": {
"code": "card_declined",
"category": "soft_decline",
"message": "カードが拒否されました",
"recommended_action": "use_different_card"
},
"id": "req_abc123",
"transaction_id": "tx_xyz789",
"payment_type": "token"
}{
"error": {
"type": "invalid_request_error",
"code": "validation_error",
"message": "Invalid request parameters",
"param": "amount",
"details": [
{
"path": [
"<string>"
],
"message": "<string>"
}
],
"request_id": "req_abc123xyz789"
}
}{
"error": {
"type": "invalid_request_error",
"code": "validation_error",
"message": "Invalid request parameters",
"param": "amount",
"details": [
{
"path": [
"<string>"
],
"message": "<string>"
}
],
"request_id": "req_abc123xyz789"
}
}{
"error": {
"type": "invalid_request_error",
"code": "validation_error",
"message": "Invalid request parameters",
"param": "amount",
"details": [
{
"path": [
"<string>"
],
"message": "<string>"
}
],
"request_id": "req_abc123xyz789"
}
}決済作成
新しい決済を作成します
curl --request POST \
--url https://api.sandbox.zafapay.com/v1/payments \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"amount": 17.62,
"currency": "usd",
"external_id": "order_12345",
"flow_id": "flow_abc123",
"payment_method": "card",
"metadata": {},
"save_card": true,
"payment_method_id": "pmi_abc123",
"name": "山田 太郎",
"customer_id": "cust_abc123",
"email": "customer@example.com",
"tel": "090-1234-5678",
"token": "tok_xxxxxxxxxxxxxxxxxxxxxx",
"return_url": "https://your-site.com/payment-complete"
}
'import requests
url = "https://api.sandbox.zafapay.com/v1/payments"
payload = {
"amount": 17.62,
"currency": "usd",
"external_id": "order_12345",
"flow_id": "flow_abc123",
"payment_method": "card",
"metadata": {},
"save_card": True,
"payment_method_id": "pmi_abc123",
"name": "山田 太郎",
"customer_id": "cust_abc123",
"email": "customer@example.com",
"tel": "090-1234-5678",
"token": "tok_xxxxxxxxxxxxxxxxxxxxxx",
"return_url": "https://your-site.com/payment-complete"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
amount: 17.62,
currency: 'usd',
external_id: 'order_12345',
flow_id: 'flow_abc123',
payment_method: 'card',
metadata: {},
save_card: true,
payment_method_id: 'pmi_abc123',
name: '山田 太郎',
customer_id: 'cust_abc123',
email: 'customer@example.com',
tel: '090-1234-5678',
token: 'tok_xxxxxxxxxxxxxxxxxxxxxx',
return_url: 'https://your-site.com/payment-complete'
})
};
fetch('https://api.sandbox.zafapay.com/v1/payments', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sandbox.zafapay.com/v1/payments",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'amount' => 17.62,
'currency' => 'usd',
'external_id' => 'order_12345',
'flow_id' => 'flow_abc123',
'payment_method' => 'card',
'metadata' => [
],
'save_card' => true,
'payment_method_id' => 'pmi_abc123',
'name' => '山田 太郎',
'customer_id' => 'cust_abc123',
'email' => 'customer@example.com',
'tel' => '090-1234-5678',
'token' => 'tok_xxxxxxxxxxxxxxxxxxxxxx',
'return_url' => 'https://your-site.com/payment-complete'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.sandbox.zafapay.com/v1/payments"
payload := strings.NewReader("{\n \"amount\": 17.62,\n \"currency\": \"usd\",\n \"external_id\": \"order_12345\",\n \"flow_id\": \"flow_abc123\",\n \"payment_method\": \"card\",\n \"metadata\": {},\n \"save_card\": true,\n \"payment_method_id\": \"pmi_abc123\",\n \"name\": \"山田 太郎\",\n \"customer_id\": \"cust_abc123\",\n \"email\": \"customer@example.com\",\n \"tel\": \"090-1234-5678\",\n \"token\": \"tok_xxxxxxxxxxxxxxxxxxxxxx\",\n \"return_url\": \"https://your-site.com/payment-complete\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.sandbox.zafapay.com/v1/payments")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"amount\": 17.62,\n \"currency\": \"usd\",\n \"external_id\": \"order_12345\",\n \"flow_id\": \"flow_abc123\",\n \"payment_method\": \"card\",\n \"metadata\": {},\n \"save_card\": true,\n \"payment_method_id\": \"pmi_abc123\",\n \"name\": \"山田 太郎\",\n \"customer_id\": \"cust_abc123\",\n \"email\": \"customer@example.com\",\n \"tel\": \"090-1234-5678\",\n \"token\": \"tok_xxxxxxxxxxxxxxxxxxxxxx\",\n \"return_url\": \"https://your-site.com/payment-complete\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sandbox.zafapay.com/v1/payments")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"amount\": 17.62,\n \"currency\": \"usd\",\n \"external_id\": \"order_12345\",\n \"flow_id\": \"flow_abc123\",\n \"payment_method\": \"card\",\n \"metadata\": {},\n \"save_card\": true,\n \"payment_method_id\": \"pmi_abc123\",\n \"name\": \"山田 太郎\",\n \"customer_id\": \"cust_abc123\",\n \"email\": \"customer@example.com\",\n \"tel\": \"090-1234-5678\",\n \"token\": \"tok_xxxxxxxxxxxxxxxxxxxxxx\",\n \"return_url\": \"https://your-site.com/payment-complete\"\n}"
response = http.request(request)
puts response.read_body{
"id": "req_abc123",
"status": "pending",
"amount": 17.62,
"currency": "usd",
"external_id": "order_12345",
"metadata": {},
"flow_id": "flow_default",
"payment_type": "single",
"payment_url": "https://pay.sandbox.zafapay.com/checkout/req_abc123?token=xxxxxxxx",
"redirect_url": "https://pay.sandbox.zafapay.com/3ds/req_abc123?token=xxxxxxxx",
"created_at": "2025-01-01T00:00:00.000Z"
}{
"status": "failed",
"error": {
"code": "card_declined",
"category": "soft_decline",
"message": "カードが拒否されました",
"recommended_action": "use_different_card"
},
"id": "req_abc123",
"transaction_id": "tx_xyz789",
"payment_type": "token"
}{
"error": {
"type": "invalid_request_error",
"code": "validation_error",
"message": "Invalid request parameters",
"param": "amount",
"details": [
{
"path": [
"<string>"
],
"message": "<string>"
}
],
"request_id": "req_abc123xyz789"
}
}{
"error": {
"type": "invalid_request_error",
"code": "validation_error",
"message": "Invalid request parameters",
"param": "amount",
"details": [
{
"path": [
"<string>"
],
"message": "<string>"
}
],
"request_id": "req_abc123xyz789"
}
}{
"error": {
"type": "invalid_request_error",
"code": "validation_error",
"message": "Invalid request parameters",
"param": "amount",
"details": [
{
"path": [
"<string>"
],
"message": "<string>"
}
],
"request_id": "req_abc123xyz789"
}
}承認
アクセストークンを使用したBearer認証
ボディ
決済金額(正の数値、小数点以下2桁まで対応)
17.62
3文字の通貨コード(例: usd, sgd, jpy)
"usd"
キャプチャ方式(省略時はフローの設定に従う)
automatic, manual 加盟店側の注文ID
"order_12345"
使用するフローID(省略時はデフォルトフロー)
"flow_abc123"
決済方法(文字列またはオブジェクト形式)
"card"
トランザクションに保存する追加データ
trueの場合、カードを将来の継続決済用に保存します
true
保存済みの決済方法を使用して継続決済を行う(/v1/customers/{id}/payment-methodsから取得)
"pmi_abc123"
カード名義(一部の決済方法では必須)
"山田 太郎"
顧客ID(決済方法の保存・取得に使用)
"cust_abc123"
顧客のメールアドレス
"customer@example.com"
顧客の電話番号
"090-1234-5678"
JavaScript SDKで取得したトークンID(tok_ プレフィックス)。サーバー間決済に使用。トークンは1回のみ使用可能で、30分で有効期限切れとなります。
"tok_xxxxxxxxxxxxxxxxxxxxxx"
3Dセキュア認証後に顧客をリダイレクトするURL。token パラメータ使用時は必ず指定してください。指定しない場合、3DS後のリダイレクト先がなくなります。
"https://your-site.com/payment-complete"
レスポンス
決済作成成功
決済リクエストID
"req_abc123"
ステータス
"pending"
決済金額
17.62
通貨コード
"usd"
加盟店側の注文ID
"order_12345"
追加データ(未指定の場合は空オブジェクト)
{}使用された決済フローID
"flow_default"
決済タイプ。single: 通常決済、initial: カード保存を伴う初回決済、recurring: 保存済みカードを使用した継続決済、token: トークンを使用したサーバー間決済
single, initial, recurring, token "single"
チェックアウトページのURL(署名付き)。ホスト型チェックアウト決済時に返されます。
"https://pay.sandbox.zafapay.com/checkout/req_abc123?token=xxxxxxxx"
3Dセキュア認証URL。status が requires_action の場合に返されます(トークン決済のみ)。
"https://pay.sandbox.zafapay.com/3ds/req_abc123?token=xxxxxxxx"
作成日時(ISO 8601形式)
"2025-01-01T00:00:00.000Z"