Source から Klarna を移行する
システムを Sources API から Payment Intents API に移行します。
Klarna は、Payment Methods API と Payment Intents API を必要とする新しい決済フロープロセスを開始しています。このガイドでは.、Stripe Checkout を使用するローコードオプションなど、Sources API を使用していた場合に推奨されるいくつかの移行パスを紹介します。
非推奨の機能
Stripe では Klarna での Sources API の使用を非推奨にしました。2024 年早期に完全に削除する予定です。現在も Sources API を使用して Klarna による支払いを処理している場合は、今すぐ PaymentMethods および PaymentIntents を使用するように移行してください。
PaymentIntents で Klarna の支払いを開始する
PaymentIntents で Klarna の支払いを完了する
重要な相違点
- Klarna 製品の選択: 構築済みの Stripe システムで Klarna 製品の種類を指定する必要はありません。代わりに、顧客が Klarna のリダイレクトページで製品を選択します。決済サイトに、対応可能な Klarna 支払いオプションごとに個別のボタンを追加しないでください。Klarna ボタンを 1 つだけ追加してください。
- Klarna SDK のインライン表示はサポート対象外: 顧客は、支払いを承認するために、支払いページから Klarna サイトにリダイレクトしなければならなくなりました。このため、Klarna SDK を読み込んだり、インラインコンポーネントをレンダリングする必要はありません。
- 支払いの確認はすべての市場で同期的に行われる: これまでは、支払いが成功したかどうかの確認は、非同期で行われることがありました。顧客の承認後、直ちに支払いが成功したかどうかを検出できるようになりました。
注意
現在 Stripe の実装にプラグインを使用している場合、プラグイン開発者が PaymentMethods および PaymentIntents を使用するようにそのプラグインを移行する必要があります。Stripe またはプラグインの設定に変更を加える必要があるかどうかについては、プラグイン開発者にお問い合わせください。
決済フローを移行する
Klarna の導入をウェブ決済に移行するには、PaymentIntents API を使用できるようにサーバーとフロントエンドを更新する必要があります。典型的な実装オプションは次の 3 つです。
- 決済フローの Stripe Checkout にリダイレクトする。
- 自社の決済ページで Stripe の Payment Element を使用する。
- 自社のフォームを作成し、Stripe JS SDK を使用して支払いを完了する。
Stripe Checkout または Payment Element を使用すると、コードを変更せずに Stripe ダッシュボードからほとんどの決済方法を追加したり管理したりできます。
以下は、以前の実装ステップと新しい実装ステップを大まかに比較したものです。
以前の実装 | Stripe Checkout | Payment Element | 自社のフォーム |
---|---|---|---|
複雑度: 低 | 複雑度: 中 | 複雑度: 高 | |
フロントエンドまたはサーバー上に Source を作成する | サーバー上に Checkout セッションを作成する | サーバで PaymentIntent を作成する | サーバで PaymentIntent を作成する |
Klarna SDK を使用して Klarna ウィジェットを読み込み、支払いを承認する OR Klarna にリダイレクトして、支払いを承認する | 不要 | client secret をフロントエンドに渡し、Stripe JS SDK を使用して Payment Element をレンダリングし、支払いを完了する | client secret をフロントエンドに渡す。自社のフォームを使用して顧客から追加情報を収集し、Stripe JS SDK を使用して Klarna にリダイレクトする |
Source が請求可能であることを確認し、請求する | 不要 | 不要 | 不要 |
charge. Webhook を使用して支払いが成功したことを非同期で確認する | Checkout セッションが成功したことを payment_ Webhook で確認する | PaymentIntent が成功したことを payment_ Webhook で確認する | PaymentIntent が成功したことを payment_ Webhook で確認する |
注意
PaymentIntent は、新しい実装で支払いを表すオブジェクトで、フロントエンドで支払いを確認すると Charge を作成します。これまでデータベースに Charge への参照を保存していた場合は、顧客が支払いを完了した後に PaymentIntent から Charge ID を取得することで、引き続き保存できます。ただし、PaymentIntent ID も保存しておくことをお勧めします。
オプション 1: Checkout セッションを使用する
Stripe Checkout は、ローコードでホストされた決済ソリューションで、Klarna 決済だけでなく、Stripe がサポートするさまざまな支払い方法を受け付けることができます。現在、自社サイトで決済ページをホストしていて、それに代えて Stripe Checkout を使用する場合は、次を実行してください。
- Klarna がダッシュボードで有効になっていることを確認します。
- ご使用のサーバーで Checkout セッションを作成します。
payment_
の 1 つとしてmethod_ types klarna
を明示的に設定するか、動的な支払い方法を使用できます。 - 物品を販売する場合は、配送先住所の収集を有効にするか、
shipping_
ハッシュに配送先住所を含めます。details - 購入者の支払い準備ができたら、セッション URL にリダイレクトします。
オプション 2: Payment Element を使用する
Stripe Payment Element は、Klarna やその他の支払い方法をサポートする、支払いページ用の単一の埋め込み UI コンポーネントです。これは Stripe Checkout の機能を数多く提供しますが、自社の支払いページに表示できます。Payment Element を使用するには、次を実行してください。
- Klarna がダッシュボードで有効になっていることを確認します。
- お使いのサーバーで PaymentIntent を作成します。
Klarna を payment_method_types の 1 つとして設定して明示的に有効にすることができます。
- PaymentIntent の client secret をフロントエンドに渡し、Stripe Elements UI ライブラリを初期化します。
- Payment Element を作成し、ページに埋め込みます。この Element は、顧客が選択した支払い方法に必要な追加フィールドを自動的に収集します。
- ユーザーが支払いを送信するときに、Payment Element で confirmPayment を呼び出します。 必ず
return_
を渡してください。url
オプション 3: 自社のフォームを構築する
Stripe JS SDK を使用して、自社のフォームコンポーネントを構築し、Klarna の支払いを完了することができます。完全統合型のソリューションについてご確認ください。この方法で実装するには、次を実行します。
- Klarna がダッシュボードで有効になっていることを確認します。
- サーバーで PaymentIntent を作成します。
ダッシュボードで支払い方法を管理したくない場合は、Klarna を payment_method_types の 1 つとして設定して明示的に有効にすることができます。
- フォームを使用して、顧客のメールアドレスと請求先の国を収集します。
- 顧客が支払いを承認する準備ができたら、支払いページで Stripe.JS を初期化し、
confirmKlarnaPayment
を呼び出します。呼び出す際は、PaymentIntent の client secret を指定してください。billing_
とdetails[email] billing_
のフィールドにメールアドレスと請求先の国が存在することを確認してください。details[address][country]
フィールドマッピングリファレンス
Payment Element または自社のフォームを使用する場合は、以前に Source にあったフィールドを PaymentIntent にマッピングしなおす必要があります。以下の表は、以前のフィールドと新しいフィールドのマッピングです。物品を販売する場合は、配送先情報を渡すことをお勧めします。その他のフィールドはすべて任意で、Klarna がそのページで必要な追加情報を収集します。
以前の Source フィールド | 新しい PaymentIntent フィールド | 注 |
---|---|---|
必須フィールド | ||
type | payment_ | これは PaymentIntents の配列です。支払い方法のリストを手動で作成する場合は、配列の要素の 1 つとして klarna を設定します。 |
amount | amount | |
currency | currency | |
owner[email] | payment_ | Payment Element を使用する場合は必須ではありません。自動的に収集されます。 |
owner[address][country] | payment_ | Payment Element を使用する場合は必須ではありません。自動的に収集されます。 |
物品を販売する場合に推奨 | ||
klarna[shipping_ | shipping[name] | 姓と名の両方を、空白で区切られた単一の文字列として入力します。 |
klarna[shipping_ | shipping[name] | 姓と名の両方を、空白で区切られた単一の文字列として入力します。 |
order[shipping][address] | shipping[address] | コンポーネントについては、API リファレンスをご覧ください。 |
order[shipping][carrier] | shipping[carrier] | |
order[shipping][tracking_ | shipping[tracking_ | |
order[shipping][phone] | shipping[phone] | |
その他のオプションフィールド | ||
klarna[purchase_ | payment_ | |
klarna[first_ | payment_ | 任意。姓と名の両方を、空白で区切られた単一の文字列として入力します。 |
klarna[last_ | payment_ | 任意。姓と名の両方を、空白で区切られた単一の文字列として入力します。 |
不要になりました | ||
klarna[product] | PaymentIntents には適用されません。顧客は Klarna のサイトで支払いを承認する際に Klarna の製品を選択します。 | |
klarna[shipping_ | 適用されません。出荷の遅延が予想される場合は、オーソリとキャプチャーの分離を使用して、商品が出荷された後にのみ支払いをキャプチャーします。 | |
source_ | 不要になりました。 |
注意
現在、Source で klarna[attachment]
パラメーターまたは order[items]
パラメーターを使用している場合は、これらのパラメーターに関する詳細を Stripe からご連絡いたします。
購入後
支払いが完了した後、ご利用の実装ポイントに対して次の変更が必要です。
支払いステータスの確認
以前は、実装で API コールのたびに Source と Charge の両方のステータスを確認する必要がありましたが、2 つのステータスをチェックする必要はもうありません。フロントエンドでの確定後に、PaymentIntent または Checkout セッションのステータスを確認するだけで済みます。
payment_intent.status | 意味 | 注 |
---|---|---|
succeeded | 支払いが成功しました。 | |
requires_ | 支払いが失敗しました。 | |
requires_ | 顧客は Klarna のサイトで支払いの承認を完了していません。 | 顧客が 48 時間以内に支払いを完了しない場合、PaymentIntent は requires_payment_method に移行し、確定を再試行できるようになります。 |
PaymentIntent のステータスは、必ずサーバーで取得するか、サーバーで Webhook をリッスンして確認してください。PaymentIntent を確定する際に指定される return_
にユーザーが戻ることだけに依存しないでください。詳細については、こちらをご覧ください。
返金
PaymentIntent が作成した Charge を使用して、引き続き Refunds API を呼び出すことができます。Charge の ID は latest_
パラメーターで確認できます。または、Refunds API に Charge の代わりに PaymentIntent ID を指定することもできます。
エラー処理
これまでは、Source が作成されたときにエラーを処理する必要がありました。PaymentIntents では、Source でエラーを確認する必要はなく、代わりにPaymentIntent の作成時と顧客が支払いを承認した後に PaymentIntent のエラーを確認する必要があります。PaymentIntent のエラーのほとんどは、無効なリクエストで返されたタイプフィールドに関するものです。
Source 作成時の以前のエラーコード | PaymentIntent の作成または確認時の新しいエラータイプ | 注 |
---|---|---|
payment_ | invalid_ | |
processing_ | invalid_ | |
missing_ | 適用されません。PaymentIntent の作成時に、販売アイテムを指定する必要はありません。 | |
country_ | invalid_ | |
country_ | invalid_ | |
invalid_ | invalid_ | |
invalid_ | invalid_ | |
invalid_ | 適用されません。このフィールドは必須ではなく、Klarna のページで収集されます。 | |
invalid_ | 適用されません。このフィールドは必須ではなく、Klarna のページで収集されます。 |
Webhook
これまで Source イベントをリッスンしていた場合は、新しいイベントタイプをリッスンするように実装の更新が必要になる場合があります。 以下は、リッスンする新しいイベントタイプのリファレンスです。
以前の Webhook | Checkout の新しい Webhook | PaymentIntent の新しい Webhook | 注 |
---|---|---|---|
source. | 適用外 | 適用外 | |
source. | 適用外 | 適用外 | |
source. | 適用外 | 適用外 | |
charge. | checkout. | payment_ | charge. Webhook も送信されるため、新しい Webhook をリッスンするように実装を更新する必要はありません。 |
charge. | 適用されません。 顧客は有効期限が切れるまで同じ Checkout セッションで支払いを再試行でき、有効期限が切れた時点で checkout. イベントが届きます。 | payment_ | charge. Webhook も送信されるため、新しい Webhook をリッスンするように実装を更新する必要はありません。 |
charge. | charge. | charge. |