このガイドの第1部では、Stripe Checkoutを使用してKlarnaを支払い方法として保存する方法を説明します。最後のステップでは、サブスクリプションまたは オンデマンド 決済のために保存された支払い方法を請求する方法を説明します。
まず、Stripe アカウントが必要です。今すぐご登録ください。
アプリケーションから Stripe API にアクセスするには、Stripe の公式ライブラリを使用します。
今後の支払いに Klarna 支払い方法を再利用するには、これを Customer に関連付ける必要があります。
お客様のビジネスで顧客がアカウントを作成するときに、Customer オブジェクトを作成します。Customer オブジェクトの ID を、独自の内部的な顧客の表記に関連付けることにより、保存された支払い方法の詳細を後で取得して使用できます。顧客がアカウントを作成していない場合でも、すぐに Customer オブジェクトを作成し、後でこのオブジェクトを顧客のアカウントの内部表記に関連付けることができます。
curl -X POST https://api.stripe.com/v1/customers \
  -u "sk_test_BQokikJOvBiI2HlWgH4olfQ2
 :"
Klarna 支払いを受け付ける前に、顧客は、お客様が Stripe Checkout を通じて今後の支払いに Klarna アカウントを使用することを承認する必要があります。
サーバー側のエンドポイントを呼び出すオーソリボタンをウェブサイトに追加して Checkout Session を作成します。
<html>
  <head>
    <title>Authorize</title>
  </head>
  <body>
    <form action="/create-checkout-session" method="POST">
      <button type="submit">Authorize</button>
    </form>
  </body>
</html>
Checkout を使用してサブスクリプションを設定する際は、サブスクリプションの詳細を渡す必要があります。
サブスクリプション詳細の受け渡し:
- 顧客が該当するすべての Klarna決済オプション にアクセスできるようにします。これには、特定の期間のサブスクリプションでのみ利用可能な 3 回または 4 回分割決済が含まれます。
 - Klarna が顧客のサブスクリプションデータをレンダリングする Klarna アプリで、購入詳細の不明確さによるサポート率や顧客の離脱を削減します。
 
payment_method_optionsパラメーターを使用して、サブスクリプションの詳細を渡します。サブスクリプションのリファレンスは、顧客が表示しない任意の識別子です(たとえば、GYM_ANNUAL_MEMBERSHIP や ID_123など)。
保存された支払い方法を請求する際は同じリファレンスを使用してください
保存された支払い方法を請求する際は、同じサブスクリプションリファレンスを使用してください。お客様の導入で後でそれを使用する場合、リファレンス値はamount_details[line_items][payment_method_options][klarna][subscription_reference] フィールドの値と一致する必要があります。値と一致しない場合、エラーが返されます。
以下の例は、年間サブスクリプションの詳細を渡す方法を示しています。
curl https://api.stripe.com/v1/checkout/sessions \
  -u "sk_test_BQokikJOvBiI2HlWgH4olfQ2
 :" \
  -d mode=setup \
  -d customer={{CUSTOMER_ID}} \
  -d currency=usd \
  --data-urlencode success_url="https://example.com/success?session_id={CHECKOUT_SESSION_ID}" \
  --data-urlencode cancel_url="https://example.com/cancel" \
  -d "payment_method_options[klarna][subscriptions][0][reference]"=EXAMPLE_REFERENCE \
  -d "payment_method_options[klarna][subscriptions][0][name]"="Customer-facing name for subscription" \
  -d "payment_method_options[klarna][subscriptions][0][interval]"=year \
  -d "payment_method_options[klarna][subscriptions][0][next_billing][amount]"=10000 \
  -d "payment_method_options[klarna][subscriptions][0][next_billing][date]"=2026-01-01
Checkout セッションを作成したら、レスポンスで返された URL に顧客をリダイレクトします。
顧客が決済手段の詳細を入力すると、success_url (支払いが成功したことを顧客に通知するウェブページ) にリダイレクトされます。上記の例のように、success_url にテンプレート変数である {CHECKOUT_SESSION_ID} を含めることで、成功ページでセッション ID が使用できるようになります。
顧客が支払い方法の詳細を提供せずに Checkout セッションでお客様のロゴをクリックすると、Checkout は、cancel_url に移動して、顧客をお客様の Web サイトにリダイレクトします。このページは通常、顧客が Stripe Checkout にリダイレクトされる前に表示していた Web サイトのページです。
注意
次に挙げる理由により、支払い開始の検出時には、success_url へのリダイレクトのみに依存しないでください。
- 悪意を持つユーザが、支払いをせずに 
success_url に直接アクセスし、商品やサービスにアクセスできるようになる可能性があります。 - 顧客が支払いの成功後に 
success_url に到達するとは限りません。リダイレクトが発生する前に、顧客がブラウザタブを閉じることがあります。 
顧客が支払いの詳細を送信した後に、PaymentMethod (決済手段) オブジェクトを取得します。PaymentMethod は、顧客のKlarna account情報を保存して今後の支払いに利用できるようにします。PaymentMethod は、success_url を使用して同期的に取得することも、Webhook を使用して非同期的に取得することもできます。
顧客が支払いの成功後に必ず success_url に到達するとは限らないため (たとえば、リダイレクトが行われる前に顧客がブラウザータブを閉じることもあります)、PaymentMethod を同期的に取得するか非同期的に取得するかは、ドロップオフの許容度によって異なります。Webhook を使用すると、組み込みでこの種のドロップオフを防止できます。
Session オブジェクトを含む checkout.session.completed Webhook を処理します。詳細については、Webhook を設定するをご覧ください。以下は、checkout.session.completed レスポンスの例です。
{
  "id": "evt_1Ep24XHssDVaQm2PpwS19Yt0",
  "object": "event",
  "api_version": "2019-03-14",
  "created": 1561420781,
  "data": {
    "object": {
      "id": "cs_test_MlZAaTXUMHjWZ7DcXjusJnDU4MxPalbtL5eYrmS2GKxqscDtpJq8QM0k",
      "object": "checkout.session",
      "billing_address_collection": null,
      "cancel_url": "https://example.com/cancel",
      "client_reference_id": null,
      "customer": null,
      "customer_email": null,
      "display_items": [],
      "mode": "setup",
      "setup_intent": "seti_1EzVO3HssDVaQm2PJjXHmLlM",
      "submit_type": null,
      "subscription": null,
      "success_url": "https://example.com/success"
    }
  },
  "livemode": false,
  "pending_webhooks": 1,
  "request": {
    "id": null,
    "idempotency_key": null
  },
  "type": "checkout.session.completed"
}
Checkout Session で作成された SetupIntent の ID である setup_intent キーの値を書き留めます。SetupIntent は、今後の支払いに利用できるように顧客のKlarna account情報を設定するために使用されるオブジェクトです。この ID を使用して SetupIntent オブジェクトを取得します。返されるオブジェクトには payment_method ID が含まれます。
curl https://api.stripe.com/v1/setup_intents/seti_1EzVO3HssDVaQm2PJjXHmLlM \
  -u "sk_test_BQokikJOvBiI2HlWgH4olfQ2
 :"
オフセッションで顧客に請求する準備ができたら、Customer ID と PaymentMethod ID を使用して、PaymentIntent (支払いインテント) を作成します。その他いくつかのパラメーターを設定して、オフセッションの支払いを行います。
- off_session を 
true に設定して、支払いの実行時に顧客が決済フローに存在しないことを示します。これにより、認証が必要な場合は PaymentIntent からエラーが返されます。 - PaymentIntent の confirm プロパティの値を 
true に設定します。これにより、PaymentIntent が作成されると直ちに確定されます。 - payment_method を PaymentMethod の ID に設定し、customer を Customer の ID に設定します。
 - return_urlを指定して、顧客が Klarna の Web サイトから戻った後に Stripe がリダイレクトする必要がある場所を指定します。
 
更新のたびにサブスクリプションの詳細と項目を送信します。決済手段を設定したときと同じ reference をサブスクリプションに使用します。決済手段の保存後にサブスクリプションの詳細が変更された場合は、同じ reference を指定して新しい情報を送信します。
curl https://api.stripe.com/v1/payment_intents \
  -u "sk_test_BQokikJOvBiI2HlWgH4olfQ2
 :" \
  -d amount=5000 \
  -d currency=usd \
  -d confirm=true \
  -d customer={{CUSTOMER_ID}} \
  -d payment_method={{PAYMENT_METHOD_ID}} \
  -d off_session=true \
  --data-urlencode return_url="https://example.com/setup/complete" \
  -d "amount_details[line_items][0][product_name]"="Annual subscription renewal" \
  -d "amount_details[line_items][0][quantity]"=1 \
  -d "amount_details[line_items][0][unit_cost]"=5000 \
  -d "amount_details[line_items][0][payment_method_options][klarna][subscription_reference]"=EXAMPLE_REFERENCE \
  -d "payment_method_options[klarna][subscriptions][0][reference]"=EXAMPLE_REFERENCE \
  -d "payment_method_options[klarna][subscriptions][0][interval]"=year
Checkout の実装状態をテストする際は、決済手段として Klarna を選択し、保存 ボタンをクリックします。テスト環境では、Klarna のリダイレクト内でさまざまな結果をシミュレートできます。
下記では、現在対応している顧客の国のテストデータを特別に選択しています。サンドボックスでは、Klarna は指定されたメールアドレスに基づいて取引を承認または拒否します。
 | 承認 | 拒否 | 
|---|
| 生年月日 | 1970/10/07 | 03-05-1994 | 
| 名 | テスト | John | 
| 姓 | Person-au | snow | 
| 町名・番地 | Wharf St | Silverwater Rd | 
| 番地等 | 4 | 1-5 | 
| 郵便番号 | 4877 | 2128 | 
| 市区町村 | Port Douglas | Silverwater | 
| 地域 | QLD | NSW | 
| 電話番号 | +61473752244 | +61473763254 | 
| メールアドレス | customer@email.au | customer+denied@email.au | 
2 段階認証
6 桁の数字であれば、2 段階認証コードとして有効です。999999 を使用すると、認証は失敗します。
返済方法
Klarna のフロー内では、以下のテスト値を使用し、さまざまな返済方法を試すことができます。
| タイプ | 値 | 
|---|
| 口座引き落とし | DE11520513735120710131 | 
| 銀行振込 | デモの銀行 | 
| クレジットカード | - 番号: 4111 1111 1111 1111
 - CVV: 123
 - 有効期限: 任意の将来日付
 
  | 
| デビットカード | - カード番号:4012 8888 8888 1881
 - CVV: 123
 - 有効期限: 任意の将来日付
 
  | 
顧客がサブスクリプションをアップグレードした場合に、Klarna の決済フローを再度実行します。これにより、Klarna のサブスクリプション情報が正確になり、オーソリ率が最適化されます。
保存済みの決済手段に請求する場合と同じ構造の PaymentIntent を作成し、setup_future_usage を含めて、既存の決済手段をアップグレードすることを示します。新しいサブスクリプション情報を渡し、決済手段を最初に保存したときと同じ 参照 を使用します。
curl https://api.stripe.com/v1/payment_intents \
  -u "sk_test_BQokikJOvBiI2HlWgH4olfQ2
 :" \
  -d amount=10000 \
  -d currency=usd \
  -d customer={{CUSTOMER_ID}} \
  -d payment_method={{PAYMENT_METHOD_ID}} \
  -d setup_future_usage=off_session \
  --data-urlencode return_url="https://example.com/setup/complete" \
  -d "amount_details[line_items][0][product_name]"="Annual subscription renewal" \
  -d "amount_details[line_items][0][quantity]"=1 \
  -d "amount_details[line_items][0][unit_cost]"=10000 \
  -d "amount_details[line_items][0][payment_method_options][klarna][subscription_reference]"=EXAMPLE_REFERENCE \
  -d "payment_method_options[klarna][subscriptions][0][reference]"=EXAMPLE_REFERENCE \
  -d "payment_method_options[klarna][subscriptions][0][interval]"=year
生成された PaymentIntent では、Klarna へのリダイレクトを完了する必要があります。リダイレクトを処理する方法 をご覧ください。
detach API を使用して、顧客が決済手段として保存した Klarna アカウントを削除できます。Klarna アカウントは、顧客がサブスクリプションをキャンセルした場合など、二度と使用されないことがわかっている場合に削除します。
curl -X POST https://api.stripe.com/v1/payment_methods/{{PAYMENT_METHOD_ID}}/detach \
  -u "sk_test_BQokikJOvBiI2HlWgH4olfQ2
 :"