Affirm 支払いの受け付け
世界で普及している後払い決済方法である Affirm を受け付ける方法をご紹介します。
注
このガイドでは、オンライン決済フローに Affirm を導入する方法について説明します。Stripe Terminal を使用した対面決済については 追加の決済手段 をご覧ください。
Stripe ユーザーは、Payment Intents API (サポートされている方法を使用して支払いを作成する単一の導入パス) を使用して、以下の国の顧客からの Affirm による支払いを受け付けることができます。
- カナダ
- アメリカ
Web サイトでの Affirm による支払いの受け付けは、以下のように構成されます。
- 支払いを追跡するオブジェクトを作成する
- 支払い方法の詳細を収集する
- 支払いを Stripe に送信して処理する
- Affirm リダイレクトと関連する Webhook イベントを処理する
PaymentIntent を作成するサーバー側
PaymentIntent (支払いインテント) は、顧客から支払いを回収する意図を表すオブジェクトで、決済プロセスのライフサイクルの各段階を追跡します。
まず、サーバーで PaymentIntent を作成し、回収する金額と通貨を指定します。すでに Payment Intents API を使用した実装がある場合は、affirm を PaymentIntent の支払い方法のタイプのリストに追加します。
また Payment Element を使用して、支払い方法をダッシュボードで管理することもできます。Stripe は取引額、通貨、決済フローなどの要素に基づいて、適切な支払い方法が返されるように処理します。詳細については、支払いを受け付けるをご覧ください。
client secret を取得する
PaymentIntent には、client secret が含まれています。これは、支払いプロセスを安全に完了するためにクライアント側で使用されます。client secret をクライアント側に渡す際は、いくつかの方法を使用できます。
支払い方法の詳細を収集して送信するクライアント側
顧客が Affirm での支払いをクリックしたときは、Stripe.js を使用してその支払いを Stripe に送信することをお勧めします。Stripe.js は、決済フローを構築するための Stripe の基本的な JavaScript ライブラリです。これにより、実装に関する複雑な処理が自動的に行われ、今後、実装を他の支払い方法にも簡単に拡張できます。
Stripe.js スクリプトを決済ページに含めるには、このスクリプトを HTML ファイルの head に追加します。
<head> <title>Checkout</title> <script src="https://js.stripe.com/clover/stripe.js"></script> </head>
決済ページで以下の JavaScript を使用して、Stripe.js のインスタンスを作成します。
// Set your publishable key. Remember to change this to your live publishable key in production! // See your keys here: https://dashboard.stripe.com/apikeys var stripe = Stripe();'pk_test_TYooMQauvdEDq54NiTphI7jx'
PaymentIntent オブジェクト全体をクライアントに送信する代わりに、ステップ 1 で作成したその client secret を使用します。これは、Stripe API リクエストを認証する API キーとは異なります。
client secret は支払いを完了できるため、慎重に取り扱う必要があります。記録したり、URL に埋め込んだり、当該の顧客以外に漏洩することがないようにしてください。
その他の詳細情報による支払い成功率の向上
Shipping (配送先) と Billing (請求先) の詳細は必須ではありませんが、購入完了率の向上のために渡すことをお勧めします。
この組み込みガイドでは、顧客が支払い方法を選択した後に配送先と請求先の情報をクライアントに渡すことが推奨されています。
これらのフィールドを渡す場合、配送先住所の line1、city、state、postal_、country には有効なデータを含める必要があります。同様に、指定されている場合は、請求先の詳細の line1、city、state、postal_、country のすべてにも有効なデータを含める必要があります。
PaymentIntent を確定する
stripe. を使用し、ページからのリダイレクトを処理して支払いを完了します。この関数に return_url を渡して、ユーザーが Affirm のウェブサイトまたはモバイルアプリで支払いを完了した後に Stripe がユーザーをリダイレクトする場所を指定する必要があります。
Affirm の支払いページで、顧客は使用可能な支払いオプションを選択します。詳細については、概要ページをご覧ください。Affirm 支払いページで支払いオプションを制限したり、事前に選択したりすることはできません。この選択を消費者に任せることで、取引の機会が最大化されます。
// Redirects away from the client stripe.confirmAffirmPayment( '{{PAYMENT_INTENT_CLIENT_SECRET}}', { payment_method: { // Billing information is optional but recommended to pass in. billing_details: { email: 'jenny@rosen.com', name: 'Jenny Rosen', address: { line1: '1234 Main Street', city: 'San Francisco', state: 'CA', country: 'US', postal_code: '94111', }, }, }, // Shipping information is optional but recommended to pass in. shipping: { name: 'Jenny Rosen', address: { line1: '1234 Main Street', city: 'San Francisco', state: 'CA', country: 'US', postal_code: '94111', }, }, // Return URL where the customer should be redirected after the authorization. return_url: 'https://example.com/checkout/complete', } ).then(function(result) { if (result.error) { // Inform the customer that there was an error. console.log(result.error.message); } });
顧客が支払いを送信すると、Stripe は顧客を return_ にリダイレクトし、以下の URL クエリーパラメーターを含めます。返品ページでは、これらを使用して PaymentIntent のステータスを取得し、顧客に支払いステータスを表示できます。
return_ を指定する際に、返品ページで使用する独自のクエリパラメーターを追加することもできます。
| パラメーター | 説明 |
|---|---|
payment_ | PaymentIntent の一意の識別子。 |
payment_ | PaymentIntent オブジェクトの client secret。サブスクリプションの実装の場合、この client_secret は confirmation_ を通じて Invoice オブジェクトでも公開されます |
顧客が自社のサイトにリダイレクトされたら、payment_ を使用して PaymentIntent をクエリし、顧客に取引ステータスを表示できます。
Affirm の組み込みをテストする
テスト API キーを使用して Affirm の組み込みをテストするには、リダイレクトページを表示します。リダイレクトページで支払いを認証することにより、支払い成功のケースをテストできます。PaymentIntent は requires_ から succeeded に変化します。
ユーザーが認証に失敗するケースをテストするには、テスト API キーを使用してリダイレクトページを表示します。リダイレクトページの左上隅にある X をクリックします。PaymentIntent は、requires_ から requires_ に移行します。
Affirm サンドボックスにリダイレクトされると、Affirm によって SSN の末尾 4 桁が求められることがあります。Affirm Sandboxは、'0000' または '5678' の使用を提案します。
オプションオーソリとキャプチャーの分離
Affirm はオーソリとキャプチャーの分離に対応しています。支払いから顧客への商品の配送までに遅延が生じた場合、まず支払いをオーソリし、後でキャプチャーします。キャプチャーの時点で、Affirm は顧客の以降の返済の期日を開始します。**オーソリされた Affirm の支払いは、オーソリから 30 日以内にキャプチャーする必要があります。 **そうしないと、オーソリは自動的にキャンセルされ、支払いをキャプチャーできなくなります。この状況が発生した場合、 Stripe も PaymentIntent をキャンセルし、payment_intent.canceled イベントを送信します。
注
注文金額が非常に大きい場合、Affirm はオーソリの際に顧客に頭金を求めることがあります。支払いがキャンセルされるか、オーソリの有効期限が切れた場合、Affirm は頭金を返金します。
支払いをキャプチャーできないことがわかっている場合は、13 日間経過するのを待つ代わりに、PaymentIntent をキャンセルすることをお勧めします。先を見越して PaymentIntent をキャンセルすると、すぐに最初の分割払いが顧客に返金され、顧客の明細書上の支払いに関して混乱が生じるのを避けられます。
オーソリのみ行うように Stripe に指示する
オーソリとキャプチャーの分離を指定するには、PaymentIntent の作成時に capture_method を manual に設定します。このパラメーターは、顧客の Affirm アカウントの金額のみをオーソリするように Stripe に指示します。
curl https://api.stripe.com/v1/payment_intents \ -u: \ -d "amount"=6000 \ -d "confirm"="true" \ -d "currency"="usd" \ -d "payment_method_types[]"="affirm" \ -d "capture_method"="manual" \ // Shipping address is optional but recommended to pass in. -d "shipping[name]"="Jenny Rosen" \ -d "shipping[address][line1]"="1234 Main Street" \ -d "shipping[address][city]"="San Francisco" \ -d "shipping[address][state]"="CA" \ -d "shipping[address][country]"="US" \ -d "shipping[address][postal_code]"=94111 \ -d "payment_method_data[type]"="affirm" \ -d "return_url"="https://www.example.com/checkout/done"sk_test_BQokikJOvBiI2HlWgH4olfQ2
売上をキャプチャーする
オーソリが成功すると、PaymentIntent の status が requires_ に移行します。オーソリされた売上をキャプチャーするために、PaymentIntent capture リクエストを実行します。デフォルトでは、オーソリされた合計金額がキャプチャーされます。合計より多い額や少ない額をキャプチャーすることはできません。
https://api.stripe.com/v1/payment_intents/{{PAYMENT_INTENT_ID}}/capture \ -u: \sk_test_BQokikJOvBiI2HlWgH4olfQ2
任意オーソリをキャンセルする
オーソリをキャンセルする必要がある場合は、PaymentIntent をキャンセルしてください。
オプションAffirm のリダイレクトを手動で処理する
confirmAffirmPayment を使用してクライアント側で Affirm のリダイレクトおよび支払いを処理するには、Stripe.js の使用をお勧めします。Stripe.js を使用すると、組み込みを他の支払い方法に容易に拡張できます。ただし、以下のステップに従って、お客様のサーバーに顧客を手動でリダイレクトすることもできます。
タイプが
affirmの PaymentIntent (支払いインテント) を作成し、確定します。payment_を指定すると、PaymentMethod が作成され、この PaymentIntent ですぐに使用されます。method_ data また、
return_フィールドで、顧客が支払いを完了した後のリダイレクト先になる URL を指定する必要があります。この URL には独自のクエリパラメーターを指定できます。これらのパラメーターは、リダイレクトフロー完了時の最終的な URL に含められます。url Command Linecurl https://api.stripe.com/v1/payment_intents \ -u: \ -d "amount"=6000 \ -d "confirm"="true" \ -d "currency"="usd" \ -d "payment_method_types[]"="affirm" \ // Shipping address is optional but recommended to pass in. -d "shipping[name]"="Jenny Rosen" \ -d "shipping[address][line1]"="1234 Main Street" \ -d "shipping[address][city]"="San Francisco" \ -d "shipping[address][state]"="CA" \ -d "shipping[address][country]"="US" \ -d "shipping[address][postal_code]"=94111 \ // Billing details are optional but recommended to pass in. -d "payment_method_data[billing_details][name]"="Jenny Rosen" \ -d "payment_method_data[billing_details][email]"="jenny@example.com" \ -d "payment_method_data[billing_details][address][line1]"="1234 Main Street" \ -d "payment_method_data[billing_details][address][city]"="San Francisco" \ -d "payment_method_data[billing_details][address][state]"="CA" \ -d "payment_method_data[billing_details][address][country]"="US" \ -d "payment_method_data[billing_details][address][postal_code]"=94111 \ -d "payment_method_data[type]"="affirm" \ -d "return_url"="https://example.com/checkout/complete"sk_test_BQokikJOvBiI2HlWgH4olfQ2作成された
PaymentIntentのステータスはrequires_であり、action next_のタイプはaction redirect_です。to_ url { "status": "requires_action", "next_action": { "type": "redirect_to_url", "redirect_to_url": { "url": "https://hooks.stripe.com/...", "return_url": "https://example.com/checkout/complete" } }, "id": "pi_xxx", "object": "payment_intent", "amount": 6000, "client_secret": "pi_xxx_secret_xxx", "confirm": "true", "confirmation_method": "automatic", "created": 1579259303, "currency": "usd", "livemode": true, "charges": { "data": [], "object": "list", "has_more": false, "url": "/v1/charges?payment_intent=pi_xxx" }, "payment_method_types": [ "affirm" ] }next_プロパティで指定した URL に顧客をリダイレクトします。ここに示すコード例はおおまかなものであり、リダイレクト方法は、ご使用のウェブフレームワークによって異なる場合があります。action. redirect_ to_ url. url 顧客が支払いプロセスを完了すると、ステップ 1. で設定した
return_にリダイレクトされます。URL にはurl payment_とintent payment_のクエリパラメーターが含まれます。intent_ client_ secret return_に別のクエリパラメーターがすでに含まれている場合は、そのパラメーターも保持されます。url 支払いのステータスを確認するには、Webhook を利用することをお勧めします。
オプション支払い後のイベントを処理する
支払いが完了すると、Stripe は payment_intent.succeeded イベントを送信します。ダッシュボード、カスタム Webhook、またはパートナーソリューションを使用してこれらのイベントを受信し、また、顧客への注文確認メールの送信、データベースでの売上の記録、配送ワークフローの開始などのアクションを実行します。
クライアントからのコールバックを待つのではなく、これらのイベントをリッスンします。クライアント側では、コールバックが実行される前に顧客がブラウザーのウィンドウを閉じたり、アプリを終了したりする可能性があります。また、悪意を持つクライアントがレスポンスを不正操作する恐れもあります。非同期型のイベントをリッスンするよう構築済みのシステムを設定することで、これ以降はより多くの決済手段を簡単に受け付けられるようになります。サポートされているすべての決済手段の違いをご確認ください。
ダッシュボードでイベントを手動で処理する
ダッシュボードを使用して、テスト決済をダッシュボードで表示したり、メール領収書を送信したり、入金を処理したり、失敗した決済を再試行したりできます。
Custom Webhook を構築する
Custom Webhook ハンドラを構築してイベントをリッスンし、カスタム非同期型の決済フローを作成します。Stripe CLI を使用して、ローカルで Webhook の導入のテストとデバッグを行います。
構築済みアプリを導入する
パートナーアプリケーションを統合することで、自動化やマーケティング/セールスなどの一般的なビジネスイベントを処理します。
オプションウェブサイトに支払い方法のメッセージを表示する
Payment Method Messaging Element は、顧客が購入時に商品、カート、支払いの各ページから、利用できる後払いの決済オプションを直接確認できるようにする、埋め込み可能な UI コンポーネントです。
ウェブサイトに Payment Method Messaging Element を追加するには、決済手段のメッセージを表示するをご覧ください。

失敗した支払い
Affirm では、取引を受け付けるか拒否するかを決定するときに複数の要素が考慮されます (買い手が Affirm を使用している期間、顧客が返済する必要のある未払い額、現在の注文額など)。
Affirm による支払いは他の多くの支払い方法と比較して支払いの拒否率が高いため、決済フローには常に card などの他の支払いオプションを提示してください。状況に従って、PaymentMethod (支払い方法) の関連付けが解除され、PaymentIntent (支払いインテント) オブジェクトのステータスが自動的に requires_ に変わります。
支払いが拒否された場合を除き、Affirm の PaymentIntent (支払いインテント) のステータスが requires_ の場合、Affirm のサイトにリダイレクトされてから 12 時間以内に顧客は支払いを完了する必要があります。12 時間経過してもアクションが実行されない場合、PaymentMethod (決済手段) は解除され、PaymentIntent オブジェクトのステータスは自動的に requires_ に移行します。
このようなケースでは、決済フローに表示される別の支払いオプションで再試行するように顧客に通知します。
エラーコード
一般的なエラーコードと対応する推奨アクションは次のとおりです。
| エラーコード | 推奨アクション |
|---|---|
payment_ | Affirm の決済が失敗したことを示す一般的なエラー。請求結果の理由で追加の情報が提供される場合があります。 |
payment_ | Affirm が顧客の支払いを拒否しました。次のステップとして、顧客から Affirm に詳細を問い合わせる必要があります。 |
payment_ | 顧客が Affirm の支払いページで支払いを完了しなかったため、支払いセッションの有効期限が切れています。Stripe では、決済が正常に行われなかった PaymentIntent は、最初のチェックアウト作成から 12 時間後に自動的に有効期限切れとなります。 |
payment_ | Affirm でサービス関連のエラーが発生したため、リクエストを完了できません。後で再試行してください。 |
amount_ | Affirm のデフォルトの取引限度額 内の金額を入力します。 |
amount_ | Affirm のデフォルトの取引限度額 内の金額を入力します。 |
エラーによっては、請求結果の理由に追加の分析情報が含まれている場合があります。
| 結果の理由 | 意味 |
|---|---|
generic_ | 決済エラーのデフォルトの結果理由。通常、これは提携金融機関が支払いを拒否した (残高不足など)、カード発行会社が支払いを拒否した、取引にリスクの高い購入が含まれていたなどの理由を示します。このような場合、Stripe は必ずしも支払い拒否の理由を受け取るとは限りません。 |
affirm_ | 顧客が Affirm での決済を明示的にキャンセルしたか、または Affirm が顧客はローン対象資格に該当しないと判断しました。Stripe では、これら 2 種類のイベントの違いを区別できません。 |