Klarna による支払い方法を受け付ける
世界で普及している後払いの支払い方法である Klarna を受け付ける方法をご紹介します。
顧客がアプリで Klarna を選択する際に、支払いを認証するための WebView が表示されます。顧客がアプリにリダイレクトされると、お客様は支払いが成功したか失敗したかをすぐに確認できます。
注
導入を開始する前に、支払い方法の設定からアカウントで Klarna が使用可能であることを確認してください。
Stripe を設定するサーバ側クライアント側
サーバ側
この組み込みには、Stripe API と通信するエンドポイントがサーバ上に必要です。Stripe の公式ライブラリを使用して、サーバから Stripe API にアクセスします。
クライアント側
React Native SDK はオープンソースであり、詳細なドキュメントが提供されています。内部では、ネイティブの iOS および Android の SDK を使用します。Stripe の React Native SDK をインストールするには、プロジェクトのディレクトリーで (使用するパッケージマネージャーによって異なる) 次のいずれかのコマンドを実行します。
次に、その他の必要な依存関係をインストールします。
- iOS の場合は、ios ディレクトリに移動して
pod install
を実行し、必要なネイティブ依存関係もインストールします。 - Android の場合は、依存関係をインストールする必要はありません。
注
公式の TypeScript ガイドに従って TypeScript のサポートを追加することをお勧めします。
Stripe の初期化
React Native アプリで Stripe を初期化するには、決済画面を StripeProvider
コンポーネントでラップするか、initStripe
初期化メソッドを使用します。publishableKey
の API 公開可能キーのみが必要です。次の例は、StripeProvider
コンポーネントを使用して Stripe を初期化する方法を示しています。
import { useState, useEffect } from 'react'; import { StripeProvider } from '@stripe/stripe-react-native'; function App() { const [publishableKey, setPublishableKey] = useState(''); const fetchPublishableKey = async () => { const key = await fetchKey(); // fetch key from your server here setPublishableKey(key); }; useEffect(() => { fetchPublishableKey(); }, []); return ( <StripeProvider publishableKey={publishableKey} merchantIdentifier="merchant.identifier" // required for Apple Pay urlScheme="your-url-scheme" // required for 3D Secure and bank redirects > {/* Your app code here */} </StripeProvider> ); }
PaymentIntent を作成するサーバー側クライアント側
Stripe は PaymentIntent オブジェクトを使用して、顧客から支払いを回収するお客様の意図を示し、決済プロセス全体を通して請求の実施と支払い状態の変化を追跡します。
サーバー側
まず、サーバーで PaymentIntent
を作成し、回収する金額と通貨を指定します。Payment Intents API を使用した組み込みをすでにお持ちの場合には、klarna
を PaymentIntent
の決済手段タイプのリストに追加します。
クライアント側
PaymentIntent には client secret が含まれています。これを React Native アプリで使用することで、PaymentIntent オブジェクト全体を渡すことなく安全に支払いプロセスを完了できます。アプリで、サーバーの PaymentIntent をリクエストし、その client secret を保存します。
function PaymentScreen() { // ... const fetchPaymentIntentClientSecret = async () => { const response = await fetch(`${API_URL}/create-payment-intent`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ currency: 'eur', }), }); const {clientSecret} = await response.json(); return clientSecret; }; return <View>...</View>; }
Stripe に支払いを送信するクライアント側
Stripe に支払いを送信するには、作成した PaymentIntent の client secret が必要です。これを confirmPayment
のコールに含めます。
import {Picker} from '@react-native-picker/picker'; import {confirmPayment} from '@stripe/stripe-react-native'; export default function MyPaymentScreen() { const handlePayPress = async () => { // Fetch the intent client secret from the backend. // See `fetchPaymentIntentClientSecret()`'s implementation above. const clientSecret = await fetchPaymentIntentClientSecret(); const {error, paymentIntent} = await confirmPayment(clientSecret, { paymentMethodType: 'Klarna' }, }); if (error) { console.log('Payment confirmation error', error.message); // Update UI to prompt user to retry payment (and possibly another payment method) } else if (paymentIntent) { Alert.alert('Success', `The payment was confirmed successfully!`); } };
Klarna の組み込みをテストする
下記では、現在対応している顧客の国のテストデータを特別に選択しています。サンドボックスでは、Klarna は指定されたメールアドレスに基づいて取引を承認または拒否します。
2 段階認証
6 桁の数字であれば、2 段階認証コードとして有効です。999999
を使用すると、認証は失敗します。
返済方法
Klarna のフロー内では、以下のテスト値を使用し、さまざまな返済方法を試すことができます。
タイプ | 値 |
---|---|
口座引き落とし | DE11520513735120710131 |
銀行振込 | デモの銀行 |
クレジットカード |
|
デビットカード |
|
オプションオーソリとキャプチャーを分離する
Klarna はオーソリとキャプチャの分離に対応しています。支払いから顧客への商品の配送までに遅延が生じた場合、まず支払いをオーソリし、後でキャプチャーします。キャプチャーされた時点で、Klarna は顧客に明細書を送り、必要となる以降の支払いの期日を作成します。オーソリされた Klarna の支払いは、オーソリから 28 日以内にキャプチャーする必要があります 。キャンセルされない場合、オーソリは自動的にキャンセルされ、支払いをキャプチャーできなくなります。
オーソリのみ行うように Stripe に指示する
オーソリとキャプチャーを分離することを指定するには、PaymentIntent の作成時に、capture_method を
manual
に設定します。このパラメーターは、顧客の Klarna アカウントの金額のみをオーソリするよう Stripe に指示します。売上をキャプチャーする
承認が完了すると、PaymentIntent の ステータスは
requires_
に移行します。承認済みの売上をキャプチャーするには、PaymentIntent の キャプチャーリクエストを作成します。デフォルトでは承認済みの総額がキャプチャーされます。これを超える金額をキャプチャーすることはできませんが、これより少ない金額をキャプチャーすることは可能です。capture 任意オーソリをキャンセルする
Klarna は、Klarna 内での顧客の総計購買力に対して、承認された決済件数を計算します。このため、フルフィルメントを行えない承認済みの決済 (商品を配送できないなど) は、それが明らかになり次第、早急にキャンセルする必要があります。
オプション支払い後のイベントを処理する
支払いが完了すると、Stripe は payment_intent.succeeded イベントを送信します。ダッシュボード、カスタム Webhook、またはパートナーソリューションを使用してこれらのイベントを受信し、また、顧客への注文確認メールの送信、データベースでの売上の記録、配送ワークフローの開始などのアクションを実行します。
クライアントからのコールバックを待つのではなく、これらのイベントをリッスンします。クライアント側では、コールバックが実行される前に顧客がブラウザーのウィンドウを閉じたり、アプリを終了したりする可能性があります。また、悪意を持つクライアントがレスポンスを不正操作する恐れもあります。非同期型のイベントをリッスンするよう構築済みのシステムを設定することで、これ以降はより多くの決済手段を簡単に受け付けられるようになります。サポートされているすべての決済手段の違いをご確認ください。
ダッシュボードでイベントを手動で処理する
ダッシュボードを使用して、テスト決済をダッシュボードで表示したり、メール領収書を送信したり、入金を処理したり、失敗した決済を再試行したりできます。
Custom Webhook を構築する
Custom Webhook ハンドラを構築してイベントをリッスンし、カスタム非同期型の決済フローを作成します。Stripe CLI を使用して、ローカルで Webhook の導入のテストとデバッグを行います。
構築済みアプリを導入する
パートナーアプリケーションを統合することで、自動化やマーケティング/セールスなどの一般的なビジネスイベントを処理します。
オプションKlarna 支払いページをカスタマイズする
Klarna フォームを事前入力する
顧客が延べ払いオプションを使用して Klarna に決済することを選択すると (後払い、分割払い、融資など)、Klarna は、リスク評価と承認のために十分な情報を収集します。情報の種類は、顧客の国によって異なります。ほとんどのヨーロッパの国では、完全な請求先住所と生年月日です。この情報は API を通じて渡すことができ、顧客がページに到着する前にフォームが事前入力されます。
Klarna の支払いページは、API からの請求書詳細が事前入力され、カスタマイズされてドイツの顧客に英語で表示されます。
オプションPaymentIntent にラインアイテムを追加する
Klarna との統合項目
Klarna を導入する際に承認率を最適化するには、line_
データを含めて買い物客のカートの中身を表します。先行提供版については、支払い項目をご覧ください。
失敗した支払い
Klarna は、取引を受け付けるか拒否するかを決定する際に複数の要因を考慮します (買い手が Klarna を使用している期間、顧客が返済する必要のある未払い額、現在の注文の金額など)。
顧客が後払いを選択すると、Klarna は取引を受け付ける前にリスク評価を行います。Klarna は、リスク評価の結果が良好でなかったり、取引金額が大きかったり、顧客に多額の未払いの負債があったりすると、取引を拒否することがあります。そのため、決済フローに card
などの他の支払いオプションを提示することをお勧めします。このような場合、PaymentMethod は解除され、PaymentIntenオブジェクトのステータスは自動的に requires_
に変わります。
顧客は、Klarna のサイトにリダイレクトされてから 48 時間以内に決済を完了する必要があります。48 時間経過しても対応しなかった場合、PaymentMethod の関連付けが解除され、PaymentIntent オブジェクトのステータスは自動的に requires_
から requires_
に移行します。
このようなケースでは、決済フローに表示される別の支払いオプションで再試行するように顧客に通知します。
Klarna のレート制限
Klarna への API リクエストは、Stripe の API 全体のレート制限を超える追加のレート制限の対象となります。これらの制限は、実行する API リクエストのシェイプによって異なる場合があります。一般に、1 分間に約 360 回を超えるリクエストを行うと、HTTP ステータスコード 400
または 402
のレスポンスの形式でレート制限が発生することがあります。使用量がこれらのレベルに達することが懸念される場合は、詳細についてお問い合わせください。これらの制限はケースバイケースで Klarna により引き上げられる可能性があります。
エラーメッセージ
Klarna 支払いが失敗すると、通常、以下のエラーコードのいずれかが返されます。これらのコードは、last_payment_error API オブジェクトに表示されます。
注意
2023-08-16
API バージョンより前は、すべての Klarna エラーが payment_intent_authentication_failure として報告されていました。API バージョンが最新であることを確認して、以下のエラー詳細をご覧ください。
エラーコード | 説明 |
---|---|
payment_method_customer_decline | 顧客が Klarna のページで購入をキャンセルしました |
payment_method_provider_decline | Klarna が顧客の支払いを拒否しました |
payment_intent_payment_attempt_expired | 顧客が Klarna のページで購入を完了しないまま、支払いセッションの有効期限が切れました |
payment_method_not_available | Klarna を使用しようとしたときに予期しないエラーが発生しました |