API v1 · Test mode
Payment Intents API
外部WebシステムからMOKOクレジット決済を作成できます。APIキーは必ず導入先のサーバー側だけで使用し、受け取ったclientSecretと公開可能キーのみをPayment Elementへ渡してください。
認証
Authorization: Bearer mcs_test_... をサーバー間通信で送信します。POSTには重複決済防止のため Idempotency-Key が必須です。
POST
/api/v1/payment-intentscurl -X POST https://mokocreditsystem.com/api/v1/payment-intents \
-H "Authorization: Bearer mcs_test_your_key" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 01962f88-21b7-7abc-a42d-31c0d808ed4f" \
-d '{
"packageId": "moko-credits-3000",
"customerReference": "customer_123",
"customerEmail": "buyer@example.com"
}'レスポンス
{
"id": "85ed681b-3151-4919-a619-75c15c3bb2a5",
"paymentIntentId": "pi_...",
"clientSecret": "pi_..._secret_...",
"publishableKey": "pk_test_...",
"status": "requires_payment_method"
}GET
/api/v1/payment-intents/:id同じAPIキーを使って、作成した決済の最新状態を取得できます。
導入フロー
- 1. サーバーから作成APIキーを使いPaymentIntentを作成します。
- 2. ブラウザーへ渡すclientSecretと公開可能キーだけを渡します。
- 3. Payment ElementStripe Elementsでカード決済を確定します。
// 導入先のブラウザー側(clientSecretだけを受け取る)
const stripePromise = loadStripe(publishableKey);
function CheckoutForm() {
const stripe = useStripe();
const elements = useElements();
return <form onSubmit={async (event) => {
event.preventDefault();
if (!stripe || !elements) return;
await stripe.confirmPayment({
elements,
confirmParams: {
return_url: "https://example.com/payment-complete",
},
});
}}>
<PaymentElement />
<button type="submit" disabled={!stripe}>支払う</button>
</form>;
}
<Elements stripe={stripePromise} options={{ clientSecret, locale: "ja" }}>
<CheckoutForm />
</Elements>支払い完了の最終判定はブラウザーの表示ではなく、署名検証済みWebhookとGET APIの状態を利用してください。
エラーとレート制限
| HTTP | code | 意味 |
|---|---|---|
| 400 | invalid_request | パラメーターまたはJSONが不正 |
| 401 | unauthorized | APIキーが無効 |
| 403 | origin_not_allowed | 許可オリジンと不一致 |
| 404 | not_found | 対象の決済が存在しない |
| 429 | rate_limited | 1分あたりの上限を超過 |
| 503 | payment_unavailable | 決済受付が一時停止中 |
認証後のレスポンスには RateLimit-Limit、RateLimit-Remaining、RateLimit-Reset が含まれます。429では Retry-After に従って再試行してください。