Issuing Elements の使用
PCI に準拠した方法でウェブアプリケーションにカードの詳細を表示する方法をご紹介します。
Stripe.js には、Issuing カードの機密データを PCI 要件に遵守した方法でウェブに表示するために使用できる、ブラウザー側の JavaScript ライブラリが含まれています。機密データは Stripe がオンラインで提供する iframe 内にレンダリングされるため、お客様のサーバーに影響することはありません。
メモ
Stripe.js は、ユーザーを保護するために追加データを収集します。高度な不正利用検出のために Stripe がどのようにデータを収集するかについて、詳細をご確認ください。
一時キー認証
Stripe.js は、一時キーを使用して、シークレットキーを公開することなく安全に Stripe API からカード情報を取得します。これを設定するには、サーバー側で一時キー交換を行う必要があります。
一時キーの作成プロセスは、ブラウザで Stripe.js を使用して nonce を作成すると、ブラウザで開始されます。この nonce とは、一時キーを作成する 1 回限りのトークンです。この nonce がサーバーに送信され、そこで Stripe API を (シークレットキーを使用して) 呼び出すことで一時キーと交換します。
サーバー側の一時キーを作成したら、Stripe.js が使用できるようにそれをブラウザに渡します。
安全なエンドポイントを作成するサーバー側
Issuing Elements を組み込むための最初のステップは、表示するカードの一時キーを生成する安全なサーバー側のエンドポイントを作成することです。Issuing Elements Web 組み込みがこのエンドポイントを呼び出します。
さまざまな言語のウェブアプリケーションフレームワークに一時キー作成エンドポイントを実装する方法を以下に示します。
重要
リクエストしたユーザーがリクエストしたクレジットカードの詳細を表示する権限を持っているかどうかを認証する責任はエンドポイント側にあります。エンドポイントは、クレジットカード情報をリクエストしたユーザーのみに一時キーを発行するようにしてください。
メモ
一時キーを作成する際は、API バージョンを指定する必要があります。現在、必要な最低バージョンは 2020-03-02 です。また、ウェブ組み込みで作成する一時キーの nonce を渡す必要もあります。
Web API 組み込みクライアント側
まず、ページに Stripe.js を含めます。Stripe.js の設定方法について、詳細は Stripe.js を含めるをご覧ください。
stripe.createEphemeralKeyNonce を使用して、取得するカードの Stripe インスタンスと一時キー nonce を作成します。作成したサーバー側のエンドポイントを呼び出し、nonce を使用して一時キーを取得します。
const stripe = Stripe(); // Initialize Elements which you'll need later const elements = stripe.elements(); // Use Stripe.js to create a nonce const cardId = 'ic_1ITi6XKYfU8ZP6raDAXem8ql'; const nonceResult = await stripe.createEphemeralKeyNonce({ issuingCard: cardId, }); const nonce = nonceResult.nonce; // Call your ephemeral key creation endpoint to fetch the ephemeral key. // Note that the ephemeral key expires after 15 minutes. const ephemeralKeyResult = await fetch('/ephemeral-keys', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': /* Important: this endpoint must be authenticated. */ }, body: JSON.stringify({ card_id: cardId, nonce: nonce, }) }); const ephemeralKeyResponse = await ephemeralKeyResult.json(); const ephemeralKeySecret = ephemeralKeyResponse.ephemeralKeySecret;'pk_test_TYooMQauvdEDq54NiTphI7jx'
一時キーを 15 分ごとに更新する
Issuing Elements 用の一時キーは 15 分で期限切れになります。ユーザーセッション中は 15 分ごとにバックエンドのエンドポイントを呼び出して一時キーを更新し、認証切れを防いでください。
再生成後、Element の update({. メソッドを使用して、新しい一時キーとナンスを送信してください。
Element を表示するクライアント側
これで一時キーが作成され、Issuing Element を表示できます。
Elements はすべて次のパターンで作成されます。
const element = elements.create(elementName, options); element.mount("#my-parent-container");
利用可能な Issuing Elements
| Element | 名前 | 提供状況 |
|---|---|---|
| 番号 (PAN) | issuingCardNumberDisplay | バーチャルカードのみ |
| セキュリティコード | issuingCardCvcDisplay | バーチャルカードのみ |
| 有効期限 | issuingCardExpiryDisplay | 任意のクレジットカード |
| PIN | issuingCardPinDisplay | 任意のクレジットカード |
| 「コピー」ボタン | issuingCardCopyButton | 任意のクレジットカード |
使用状況
Element タイプごとにオプションと機能が異なります。詳しく知りたい Element タイプを選択してください。
セキュリティ要件
issuingCardPinDisplay を使用する場合は、認証済みユーザーのみがアクセスできるようにするための手段を実装する必要があります。具体的には、issuingCardPinDisplay を使用するページへのアクセスを許可する前に、2 段階認証 (2FA) を適用する必要があります。セキュリティ対策が不十分であると Stripe が判断した場合、この Element へのアクセスを停止することがあります。
メモ
モバイルSDKとは異なり、発行 Elements は検証 と連携することはできません。発行Elementsでクレジットカードの PIN を表示するには、2 段階認証を実装する必要があります。
その他の詳細情報
返されたカードオブジェクトには、result. ペイロードから完全に削除された PCI フィールド (番号など) が含まれています。
上記の例の . に加えて、Elements は次のメソッドもサポートしています。
.destroy() .unmount() .update(options)
Issuing Elements とネイティブアプリケーション
Issuing Elements は、iOS、Android、React Native などのネイティブアプリケーションプラットフォームを直接サポートしていません。
ネイティブアプリで Issuing Elements のカードの機密情報を表示するには、ウェブビューを使用します。このガイドに従ってサーバーでウェブ版の実装を構築し、その実装へのウェブビューの URL を指定します。ネイティブアプリ向けのウェブビューの実装について、詳細は以下の外部リソースをご覧ください。
- iOS および iPadOS: WKWebView
- Android: WebView
- React Native: react-native-webview
- Flutter: webview-flutter