API v1 · Test mode

Payment Intents API

外部WebシステムからMOKOクレジット決済を作成できます。APIキーは必ず導入先のサーバー側だけで使用し、受け取ったclientSecretと公開可能キーのみをPayment Elementへ渡してください。

認証

Authorization: Bearer mcs_test_... をサーバー間通信で送信します。POSTには重複決済防止のため Idempotency-Key が必須です。

POST/api/v1/payment-intents
curl -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. 1. サーバーから作成APIキーを使いPaymentIntentを作成します。
  2. 2. ブラウザーへ渡すclientSecretと公開可能キーだけを渡します。
  3. 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の状態を利用してください。

エラーとレート制限

HTTPcode意味
400invalid_requestパラメーターまたはJSONが不正
401unauthorizedAPIキーが無効
403origin_not_allowed許可オリジンと不一致
404not_found対象の決済が存在しない
429rate_limited1分あたりの上限を超過
503payment_unavailable決済受付が一時停止中

認証後のレスポンスには RateLimit-Limit、RateLimit-Remaining、RateLimit-Reset が含まれます。429では Retry-After に従って再試行してください。