メインコンテンツへスキップ
POST
/
v1
/
payments
決済作成
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"
}
}

承認

Authorization
string
header
必須

アクセストークンを使用したBearer認証

ボディ

application/json
amount
number
必須

決済金額(正の数値、小数点以下2桁まで対応)

:

17.62

currency
string
必須

3文字の通貨コード(例: usd, sgd, jpy)

:

"usd"

capture_method
enum<string>

キャプチャ方式(省略時はフローの設定に従う)

利用可能なオプション:
automatic,
manual
external_id
string

加盟店側の注文ID

:

"order_12345"

flow_id
string

使用するフローID(省略時はデフォルトフロー)

:

"flow_abc123"

payment_method

決済方法(文字列またはオブジェクト形式)

:

"card"

metadata
object

トランザクションに保存する追加データ

save_card
boolean

trueの場合、カードを将来の継続決済用に保存します

:

true

payment_method_id
string

保存済みの決済方法を使用して継続決済を行う(/v1/customers/{id}/payment-methodsから取得)

:

"pmi_abc123"

name
string

カード名義(一部の決済方法では必須)

:

"山田 太郎"

customer_id
string

顧客ID(決済方法の保存・取得に使用)

:

"cust_abc123"

email
string

顧客のメールアドレス

:

"customer@example.com"

tel
string

顧客の電話番号

:

"090-1234-5678"

token
string

JavaScript SDKで取得したトークンID(tok_ プレフィックス)。サーバー間決済に使用。トークンは1回のみ使用可能で、30分で有効期限切れとなります。

:

"tok_xxxxxxxxxxxxxxxxxxxxxx"

return_url
string

3Dセキュア認証後に顧客をリダイレクトするURL。token パラメータ使用時は必ず指定してください。指定しない場合、3DS後のリダイレクト先がなくなります。

:

"https://your-site.com/payment-complete"

レスポンス

決済作成成功

id
string

決済リクエストID

:

"req_abc123"

status
string

ステータス

:

"pending"

amount
number

決済金額

:

17.62

currency
string

通貨コード

:

"usd"

external_id
string | null

加盟店側の注文ID

:

"order_12345"

metadata
object

追加データ(未指定の場合は空オブジェクト)

:
{}
flow_id
string

使用された決済フローID

:

"flow_default"

payment_type
enum<string>

決済タイプ。single: 通常決済、initial: カード保存を伴う初回決済、recurring: 保存済みカードを使用した継続決済、token: トークンを使用したサーバー間決済

利用可能なオプション:
single,
initial,
recurring,
token
:

"single"

payment_url
string

チェックアウトページのURL(署名付き)。ホスト型チェックアウト決済時に返されます。

:

"https://pay.sandbox.zafapay.com/checkout/req_abc123?token=xxxxxxxx"

redirect_url
string

3Dセキュア認証URL。statusrequires_action の場合に返されます(トークン決済のみ)。

:

"https://pay.sandbox.zafapay.com/3ds/req_abc123?token=xxxxxxxx"

created_at
string<date-time>

作成日時(ISO 8601形式)

:

"2025-01-01T00:00:00.000Z"