銀行の認証なしでカードを保存する
カードの詳細を収集して、後で顧客に請求します。
Stripe では、顧客のカード詳細を収集して後で請求できます。一部の地域では、銀行により、2 段階目の認証 (スマートフォンに送信されたコードの入力など) が要求されます。この追加ステップにより、顧客が Web サイトまたはアプリケーションをアクティブに使用していない場合は、購入の認証ができないためにコンバージョン率が低下します。
アメリカとカナダを中心にして事業を運営している場合は、銀行によって認証が要求されないため、より簡単なこの実装を使用できます。この実装は、カードの保存に認証が必要な国では非準拠となるため、この実装を構築すると、他の国に事業を拡大する場合や他の決済手段を追加する場合に、大幅な変更が必要になります。認証が必要なカード情報の保存方法をご確認ください。
法令遵守
お客様は、顧客の支払い情報を保存する際の該当する法律、規制、ネットワークのルールのすべてに準拠する責任を負います。たとえば、顧客がお客様のウェブサイトやアプリを積極的には使用していない時期に顧客に請求するなど、将来の利用に備えて顧客の支払い方法を保存する場合が該当します。支払い方法の保存をどのように計画しているかを示す規約をウェブサイトやアプリに追加し、顧客が許可できるようにします。顧客がオフラインのときに請求する予定である場合は、規約に以下の内容も含める必要があります。
- 指定された取引で顧客の代理として単独の支払いまたは一連の支払いを開始することを許可するという、顧客からお客様への同意。
- 予期される支払い時期と支払い頻度 (たとえば、請求が予定されている分割払いなのか、サブスクリプションの決済なのか、あるいは予定されていないトップアップなのか)。
- 支払い金額の決定方法。
- 支払い方法をサブスクリプションサービスに使用する場合は、キャンセルに関するポリシー。
これらの規約に関する顧客の書面による同意の記録を必ず保管してください。
カード詳細を収集するクライアント側
このガイドを参照する前に、Stripe アカウントが必要です。今すぐ登録してください。
顧客のカード詳細を収集するための決済ページを構築します。カスタムの決済フォームの構築に利用可能な UI ライブラリである Stripe Elements を使用します。Elements を使用した作業を開始するには、次のスクリプトを使用して、決済ページに Stripe.js ライブラリを組み込みます。
<script src="https://js.stripe.com/v3/"></script>
常に js.stripe.com から Stripe.js を直接読み込むことにより、PCI への準拠が維持されます。スクリプトをバンドルに含めたり、そのコピーを自身でホストしたりしないでください。
Stripe の高度な不正対策機能を最大限に活用するには、このスクリプトを決済ページだけでなく、自社サイトのすべてのページに追加してください。すべてのページにスクリプトを追加することで、ウェブサイトを閲覧するユーザーの不正行為を示唆するような不審な動作を Stripe が検知できるようになります。
Elements をページに追加する
顧客からカード詳細を安全に収集するために、Stripe がオンラインで提供する UI コンポーネントは、お客様が直接作成するのではなく、Elements によって作成され、その後決済フォームに配置されます。これらのコンポーネントの挿入先を決定するには、決済フォームで一意の ID を持つ空の DOM 要素 (コンテナー) を作成してください。
<input id="cardholder-name" type="text"> <!-- placeholder for Elements --> <div id="card-element"></div> <div id="card-result"></div> <button id="card-button">Save Card</button>
次に、Stripe オブジェクトのインスタンスを作成し、公開可能な API キーを最初のパラメーターとして指定します。その後、Elements オブジェクトのインスタンスを作成し、それを使用して DOM に card
Element をマウントします。
card
Element は、カードに関する必要な詳細情報をすべて安全に収集する 1 つの柔軟な入力フィールドを挿入することによって、支払いフォームを簡素化し、必要なフィールドの数を最小限に抑えます。
また、cardNumber
、cardExpiry
、cardCvc
の Element を組み合わせることで、柔軟で複数の入力が可能なカードフォームを実現できます。
注
カードの支払い成功率を向上し、不正使用を削減するため、常に郵便番号を収集してください。
単一行の Card Element は、顧客の郵便番号を自動的に収集して Stripe に送信します。分割 Element (Card Number、Expiry、CVC) を使用して支払いフォームを構築する場合、顧客の郵便番号用に別個の入力フィールドを追加します。
const stripe = Stripe(
); const elements = stripe.elements(); const cardElement = elements.create('card'); cardElement.mount('#card-element');'pk_test_TYooMQauvdEDq54NiTphI7jx'
Stripe Element には、HTTPS 接続を介して支払い情報を Stripe に安全に送信する iframe が含まれています。実装を機能させるには、決済ページのアドレスの先頭を http://
ではなく https://
にする必要があります。
HTTPS を使用せずに実装をテストできます。本番環境で決済を受け付ける準備が整ったら、HTTPS を有効化します。
const cardholderName = document.getElementById('cardholder-name'); const cardButton = document.getElementById('card-button'); const resultContainer = document.getElementById('card-result'); cardButton.addEventListener('click', async (ev) => { const {paymentMethod, error} = await stripe.createPaymentMethod({ type: 'card', card: cardElement, billing_details: { name: cardholderName.value, }, } ); if (error) { // Display error.message in your UI. resultContainer.textContent = error.message; } else { // You have successfully created a new PaymentMethod resultContainer.textContent = "Created payment method: " + paymentMethod.id; } });
結果として得られた PaymentMethod ID をサーバーに送信します。
Stripe を設定するサーバー側
アプリケーションから Stripe API にアクセスするには、Stripe の公式ライブラリを使用します。
カードを保存するサーバー側
PaymentMethod を Customer (顧客) に関連付けることでカードを保存します。Customer オブジェクトを使用して、顧客に関する他の情報 (配送の詳細、メールアドレスなど) を格納できます。
既存の Customer がある場合は、代わりにそのオブジェクトに PaymentMethod を関連付けることがきます。
この時点で、独自の内部的な顧客の表記がある場合は、この表記に顧客 ID と PaymentMethod ID を関連付けます。
保存されたカードに請求するサーバー側
準備ができたら、請求する PaymentMethod ID と顧客 ID を取り込みます。これは、両方の ID をお客様のデータベースに格納するか、顧客 ID を使用して顧客の使用可能なすべての PaymentMethod を検索することで実行できます。
PaymentMethod ID と顧客 ID を使用して新しい PaymentIntent を作成します。error_on_requires_action を true に設定して、2 段階認証などの顧客のアクションを必要とする支払いを拒否します。
支払いが失敗すると、リクエストも 402 HTTP ステータスコードで失敗し、エラーが返されます。アプリケーションに戻って支払いを完了するように (メールを送信するなどして) 顧客に通知する必要があります。Stripe API ライブラリから発生したエラーのコードを確認するか、PaymentIntent の last_payment_error.decline_code を確認し、カード発行会社が支払いを拒否した理由を調べます。
カードエラーを処理する
支払いが失敗したことを顧客に通知し、ステップ 1 でお客様が作成した決済フォームに顧客を転送します。顧客はそこで新しいカード詳細を入力できます。その新しい PaymentMethod ID をお客様のサーバーに送信して、Customer オブジェクトに関連付けし、再度支払いを行います。
別の方法として、既に作成済みの Customer がある場合は、PaymentIntent の作成とカードの保存を、すべて 1 回の API コールで実行できます。
setup_future_usage を on_
に設定すると、不要な認証をトリガーせずに今後のためにカードを保存することを Stripe に対して示します。
構築したシステムをテストする
Stripe はテスト環境で使用してさまざまなカードの機能をシミュレーションできるテストカードを提供しています。任意のセキュリティコード、郵便番号、将来の有効期限を指定してこれらのカードを使用します。
番号 | 説明 |
---|---|
成功し、支払いがすぐに処理されます。 | |
常に支払い拒否コード insufficient_ で失敗します。 | |
認証が必要なため、この組み込みでは、authentication_ というコードで拒否されます。 |
カード認証を処理するために組み込みをアップグレードする
このシステムでは、支払い時に認証を必要とするカードは拒否されます。ダッシュボードで多くの支払いが Failed
としてリストアップされるようになった場合は、システムのアップグレードが必要なタイミングです。Stripe のグローバルな導入は、そのような支払いを自動的に拒否せずに処理します。