Card Element Quickstart / カード要素のクイックスタート

「決済」及び「開発」関連用語集

カテゴリー: Stripe  閲覧数:298 配信日:2019-02-28 12:45


docs


Payments > Collecting payment details > Stripe.js and Elementst > Quickstart
Card Element Quickstart
カード要素のクイックスタート
・事前に構築されたUIコンポーネントであるElementsを使用して、カードの機密情報を安全に収集する

「Stripeによる支払処理」は、(処理単位として)2つに分別可能


1.「顧客が入力した支払方法の詳細」を安全に収集する
2.「収集した支払方法」を charge request で使用

・あなたは「機密のカードデータ」を扱う必要なしに安全に、「あなたの顧客のカード情報を集める支払いフォーム」を作成するため、事前構築されたUIコンポーネントであるStripe Elementsを利用することができる
・「カード詳細」はその後、代表的なトークンに変換される
・このトークンは、あなた(販売者側)のサーバーへ、安全に送信できる

4つのステップ


Elementsを使用してカスタム支払いフォームを作成するには、4つのステップが必要
・1.ストライプ要素を設定する
・2.支払いフォームを作成する
・3.カード情報を安全に送信するためのトークンを作成する
・4.トークンと残りのフォームをサーバーに送信する

1.ストライプ要素を設定する


ElementsはStripe.jsの一部として利用できる
・ 始めるには、このスクリプトをあなたのページに含めてくれ - それは常にhttps://js.stripe.comから直接ロードされるべきである
<script src="https://js.stripe.com/v3/"></script>

Stripeの高度な詐欺防止機能を最大限に活用するには?
・チェックアウトページだけでなく、サイトのすべてのページにこのスクリプトを含める
・すべてのページにスクリプトを含めることで、Stripeは、ユーザーがWebサイトを閲覧したときに「詐欺を示す可能性がある異常な動作」を検出できる

次に、Elementsのインスタンスを作成する
const stripe = Stripe('pk_test_〇〇');
const elements = stripe.elements();


2.支払いフォームを作成する


顧客からカードの詳細を安全に収集するために
・ElementsはStripeがホストするUIコンポーネントを作成する
・直接作成するのではなく、あなたの支払いフォームに配置される

これらのコンポーネントを挿入する場所を決定するには
・支払いフォーム内に一意のIDを持つ空のDOM要素(コンテナ)を作成する
・コンテナを<label>内または<label>横に、Elementコンテナの一意のidと一致するfor属性を付けて配置することをお勧めする
・そうすることによって、顧客が対応するラベルをクリックしたときに要素が自動的にフォーカスを得る

例:
<form action="/charge" method="post" id="payment-form">
 <div class="form-row">
   <label for="card-element">
     Credit or debit card
   </label>
   <div id="card-element">
     <!-- A Stripe Element will be inserted here. -->
   </div>

   <!-- Used to display Element errors. -->
   <div id="card-errors" role="alert"></div>
 </div>

 <button>Submit Payment</button>
</form>


・上記のフォームがロードされたら、Elementのインスタンスを作成し、それを上記で作成されたElementコンテナにマウントする
// Custom styling can be passed to options when creating an Element.
const style = {
 base: {
   // Add your base input styles here. For example:
   fontSize: '16px',
   color: "#32325d",
 },
};

// Create an instance of the card Element.
const card = elements.create('card', {style});

// Add an instance of the card Element into the `card-element` <div>.
card.mount('#card-element');


・card要素は、フォームを単純化し、「すべて必要なカード詳細を、安全に収集する単一の柔軟な入力フィールド」を挿入することによって、必要なフィールドの数を最小限に抑える
・サポートされている Element型の全リストについては、 Stripe.jsのリファレンスドキュメントを参照してください。

・Elementsは、入力されたとおりにユーザー入力を検証する
・あなたの顧客が間違わないよう、あなたはcard要素のchangeイベントに耳を傾けそしてあらゆるエラーを表示するべきである:
card.addEventListener('change', ({error}) => {
 const displayError = document.getElementById('card-errors');
 if (error) {
   displayError.textContent = error.message;
 } else {
   displayError.textContent = '';
 }
});


3.カード情報を安全に送信するためのトークンを作成する


・Elementsを使用して収集された「支払い詳細」は、その後トークンに変換できる
・フォーム上のsubmitイベントを処理するイベントハンドラを作成する
・ハンドラーはフィールドをトークン化のためにStripeに送信し、フォームの送信を防ぐ(フォームは次のステップでJavaScriptによって送信される)
// Create a token or display an error when the form is submitted.
const form = document.getElementById('payment-form');
form.addEventListener('submit', async (event) => {
 event.preventDefault();

 const {token, error} = await stripe.createToken(card);

 if (error) {
   // Inform the customer that there was an error.
   const errorElement = document.getElementById('card-errors');
   errorElement.textContent = error.message;
 } else {
   // Send the token to your server.
   stripeTokenHandler(token);
 }
});


createTokenを呼び出して、それにcard要素を渡す
・この関数は、この例では使用されていない、顧客から収集された追加の支払い情報を含むオプションの2番目のパラメーターも受け入れる
・この関数はresultオブジェクトで解決されるPromiseを返す
・このオブジェクトは以下のいずれかを持つ
result.token : トークンは正常に作成された
result.error :エラーがあった。 これにはクライアントサイドの検証エラーが含まれる。 考えられるすべてのエラーについては、 APIリファレンスを参照してくれ

ストライプは、保存時にカード情報を検証する。 このプロセスの結果として、顧客は彼らの明細書に1ドルの一時的な承認を見るかもしれない。 これは、将来の請求が成功することを保証するものではない(例えば、カードに十分な資金がなくなった、紛失または盗難にあった、またはアカウントが閉鎖された場合など)。 このプロセスには、任意のチェックや、Stripe: Radarによる従来の銀行チェック(CVCや郵便番号など)も含まれ、実行された可能性がある

4.トークンと残りのフォームをサーバーに送信する


最後のステップ
・収集した追加情報とともにトークンをサーバーに送信することである
const stripeTokenHandler = (token) => {
 // Insert the token ID into the form so it gets submitted to the server
 const form = document.getElementById('payment-form');
 const hiddenInput = document.createElement('input');
 hiddenInput.setAttribute('type', 'hidden');
 hiddenInput.setAttribute('name', 'stripeToken');
 hiddenInput.setAttribute('value', token.id);
 form.appendChild(hiddenInput);

 // Submit the form
 form.submit();
}


Viewport メタタグが必要


すべてのデバイスで優れたユーザーエクスペリエンスを提供するには
・ページのviewport widthをdevice-widthに設定する必要がある
・これはviewportメタタグで行われる
・他にもいくつかのビューポート設定があり、必要に応じて設定できる
・設定のどこかにwidth=device-widthを含めるようにしてくれ

・例えば、次のものはElementsで動作する
<meta name="viewport" content="width=device-width, initial-scale=1" />
・あなたのページにすでにこのタグがあり、それにwidth=device-width含まれていれば、すべて設定済みである
width=device-widthを設定せずにElementsを使用しても機能するが、とにかく追加することを強くお勧めする。 特に、 handleCardPaymentを使用する場合は、 3D Secureによる追加認証を提供するため、モーダルオーバーレイを表示する必要がある場合がある。 このビューポート設定がないと、モーダルが開かれている間、モバイルユーザーに良い経験を保証することはできない


週間人気ページランキング / 4-17 → 4-23
順位 ページタイトル抜粋 アクセス数
1 EMVレベル1 / EMVレベル2 / EMVCo とは? 8
1 YouTube | 動画サービス(課金販売できるプラットフォーム) 8
2 EMVCo | クレジットカード仕様(仕様) 5
3 pixivFANBOX | クリエイター支援プラットフォーム(課金販売できるプラットフォーム) 3
3 プリペイドカード | カード 3
4 振込 | 送金 2
4 Stripe webhook 配信の問題 / 実際に受け取った警告メールの受信例 2
4 Stripe Q73.CheckoutのSessionオブジェクトをcreateする際、'payment_intent_data'内の'metadata'として渡したデータを、webhookで受け取る件について | QA(Stripe) 2
4 Stripe Q55.Checkout\Session::createする際の、'client_reference_id'パラメータと'payment_intent_data.metadata'パラメータの違いについて | QA(Stripe) 2
4 Off-session Payments with Payment Intents / Payment Intents を使用したオフセッション支払 2
4 クレジットカード決済 | 課金 2
4 Stripe Q32。Webhook のエンドポイントから適切な値を返さなかったときの停止措置について | QA(Stripe) 2
4 Stripe Q16。PaymentIntentの支払いで郵便番号入力を求められる。Radar rules の ZIP code を無効にしているのに | QA(Stripe) 2
5 Saving Payment Methods / 支払い方法を保存する 1
5 Payment Intents Migration Guide / Payment Intents 移行ガイド 1
5 Stripe Q66.Webhookエンドポイントが、"connect"内容も含むかどうかを確認するためにはどうすれば良いですか? | QA(Stripe) 1
5 Payment Intents Usage Guide / Payment Intents 使用ガイド 1
5 Stripe Q31。ダッシュボードでの「支払い作成」の見方について | QA(Stripe) 1
5 Twitchとは?/ Cheeringとは?/ Cheerとは? 1
5 ほしい物リスト | 投げ銭サービス(課金販売できるプラットフォーム) 1
2024/4/24 1:02 更新
指定期間人気ページランキング / 2020-5-28 → 2024-4-23
順位 ページタイトル抜粋 アクセス数
1 Stripeアカウントへログインする際、モバイル端末で受信したコード入力を求められる理由は? | その他エントリー(Stripe) 2009
2 EMVCo | クレジットカード仕様(仕様) 1266
3 Stripe Q13。決済成功時に、「請求に紐づけられたメールアドレス」に対して、メール送信したいのですが、 | QA(Stripe) 943
4 Stripe Q16。PaymentIntentの支払いで郵便番号入力を求められる。Radar rules の ZIP code を無効にしているのに | QA(Stripe) 901
5 クレジットカード決済 | 課金 878
6 Twitch | ゲーム実況配信サービス(課金販売できるプラットフォーム) 876
7 決済用語 855
8 Stripe Q50。 Connect 「Standardアカウント」で、自身に連結された子アカウントを、ダッシュボードから削除するには? | QA(Stripe) 824
9 Omise | 「支払」機能を有する決済系サービス(決済サービス) 767
10 Stripe Q1。Stripeにおける個人事業主の定義 | QA(Stripe) 761
11 pixivFANBOX | クリエイター支援プラットフォーム(課金販売できるプラットフォーム) 740
12 Stripe Q31。ダッシュボードでの「支払い作成」の見方について | QA(Stripe) 738
13 EMVレベル1 / EMVレベル2 / EMVCo とは? 727
14 YouTube | 動画サービス(課金販売できるプラットフォーム) 669
15 プリペイドカード | カード 645
16 EPUB | ファイルフォーマット(電子書籍) 587
17 サブスクリプション | 課金 563
18 Stripeで"No such token: src"と表示されたら、最初にAPIキーを確認する | Stripe エラー(Stripe) 544
19 Stripe Q74.「お客様のビジネスの詳細」とは何ですか? | Stripe 541
20 ファンティア | クリエイター支援プラットフォーム(課金販売できるプラットフォーム) 482
2024/4/24 1:02 更新