コンテンツにスキップ
アカウントを作成
または
サインイン
Stripe ドキュメントのロゴ
/
AI に質問する
アカウントを作成
サインイン
始める
支払い
売上
プラットフォームおよびマーケットプレイス
資金管理
開発者向けのツール
概要
Stripe Payments について
構築済みのシステムをアップグレード
支払いの分析
オンライン決済
概要ユースケースを見つけるManaged Payments
Payment Links を使用する
決済ページを構築
高度なシステムを構築
アプリ内実装を構築
決済手段
決済手段を追加
決済手段を管理
Link による購入の迅速化
支払いインターフェイス
Payment Links
Checkout
Web Elements
アプリ内 Elements
決済シナリオ
カスタムの決済フロー
    概要
    既存の顧客の支払い
    支払いのオーソリとキャプチャーを分離する
    2 段階の確認機能を構築する
    インテントを作成する前に支払いの詳細を収集
    サーバーで支払いを確定する
    通信販売 / 電話販売 (MOTO) の受け付け
    アメリカとカナダのカード
      認証なしのカードの保存
      認証を処理するためのアップグレード
    サードパーティーの API エンドポイントにカード情報を転送する
    支払い項目
柔軟なアクワイアリング
オーケストレーション
店頭支払い
端末
他の Stripe プロダクト
Financial Connections
仮想通貨
Climate
ホーム支払いCustom payment flows

銀行認証なしのカード支払い

よりシンプルな地域限定の実装を構築します。

ページをコピー

この実装は、アメリカとカナダのカードのみを受け付けるビジネスをサポートしています。シンプルですが、グローバルな顧客ベースをサポートするように拡張することはできません。

この組み込みはどのように機能しますか?

これはグローバルな組み込みとはどう違いますか?

成長を遂げている企業やグローバル企業には、Stripe のグローバルなシステムを使用して、銀行の 2 段階認証の要求に対応し、顧客がより広範な支払い方法を使用できるようにすることをお勧めします。

決済フォームの構築
クライアント側

Stripe.js の一部である Elements は、顧客からカード情報を収集するドロップイン UI コンポーネントを提供します。Stripe はこれらをホストし、iframe として支払いフォームに配置するため、顧客のカード情報がコードに触れることはありません。

まず、お客様のサイトの各ページの先頭に Stripe.js スクリプトを含めます。

<script src="https://js.stripe.com/v3/"></script>

サイトの各ページにスクリプトを含めることで、Stripe の高度な不正利用検出機能および異常な閲覧動作を検知する能力を活用できます。

セキュリティ要件

PCI 準拠を保持するには、このスクリプトを常に js.stripe.com から直接読み込んでください。このスクリプトをバンドルに含めたり、そのコピーを自身でホストすることはできません。

Elements を使用する際には、すべての情報は安全な HTTPS 接続を介して送信されます。

また、Elements を含むページのアドレスの先頭は、http:// ではなく、https:// にする必要もあります。SSL 証明書の取得や、それをサーバに組み込んで安全な HTTPS 接続を有効化する方法については、セキュリティのドキュメントをご覧ください。

Elements をページに追加する

次に、Stripe アカウントが必要です。今すぐ登録してください。

支払いフォーム内に、一意の ID を持つ空の DOM Elements (コンテナ) を作成してください。

payment.html
<form id="payment-form"> <div id="card-element"><!-- placeholder for Elements --></div> <button id="card-button">Submit Payment</button> <p id="payment-result"><!-- we'll pass the response from the server here --></p> </form>

Stripe オブジェクトのインスタンスを作成し、公開可能な API キーを最初のパラメーターとして指定します。その後、Elements オブジェクトのインスタンスを作成し、それを使用してページにある空の DOM Element コンテナに Card Element をマウントします。

client.js
const stripe = Stripe(
'pk_test_TYooMQauvdEDq54NiTphI7jx'
); const elements = stripe.elements(); const cardElement = elements.create('card'); cardElement.mount('#card-element');

クライアントで stripe.createPaymentMethod を使用してカード詳細を収集し、顧客が支払いフォームを送信したら、PaymentMethod (支払い方法) を作成します。その PaymentMethod の ID をサーバに送信します。

client.js
const form = document.getElementById("payment-form"); var resultContainer = document.getElementById('payment-result'); // cardElement is defined in the previous step cardElement.on('change', function(event) { if (event.error) { resultContainer.textContent = event.error.message; } else { resultContainer.textContent = ''; } }); form.addEventListener('submit', async event => { event.preventDefault(); resultContainer.textContent = ''; const result = await stripe.createPaymentMethod({ type: 'card', card: cardElement, }); handlePaymentMethodResult(result); }); const handlePaymentMethodResult = async ({ paymentMethod, error }) => { if (error) { // An error happened when collecting card details, show error in payment form resultContainer.textContent = result.error.message; } else { // Send paymentMethod.id to your server (see Step 3) const response = await fetch("/pay", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ payment_method_id: paymentMethod.id }) }); const responseJson = await response.json(); handleServerResponse(responseJson); } }; const handleServerResponse = async responseJson => { if (responseJson.error) { // An error happened when charging the card, show it in the payment form resultContainer.textContent = responseJson.error; } else { // Show a success message resultContainer.textContent = 'Success!'; } };

Stripe の設定
サーバ側

アプリケーションから Stripe API にリクエストを作成するには、公式ライブラリを使用します。

Command Line
Ruby
# Available as a gem sudo gem install stripe
Gemfile
Ruby
# If you use bundler, you can add this line to your Gemfile gem 'stripe'

支払いの作成
サーバ側

サーバにエンドポイントを設定し、クライアントからリクエストを受信します。

Stripe は PaymentIntent (支払いインテント) オブジェクトを使用して、顧客から支払いを回収する意図を示し、プロセス全体を通して請求の実施と支払い状態の変化を追跡します。

クライアント側ではなく、信頼できる環境のサーバ側で常に支払い金額を指定してください。これにより、悪意のある顧客が独自の金額を選択できないようにします。

ステップ 1 の AJAX リクエストに応答する HTTP エンドポイントを作成します。そのエンドポイントで、顧客にいくら請求するかを決定します。支払いを作成するには、以下のコードで、ステップ 1 からの PaymentMethod ID を使用して PaymentIntent を作成します。

Command Line
curl
# Check the status of the PaymentIntent to make sure it succeeded curl https://api.stripe.com/v1/payment_intents \ -u
sk_test_BQokikJOvBiI2HlWgH4olfQ2
: \ -d amount=1099 \ -d currency=usd \ # A PaymentIntent can be confirmed some time after creation, # but here we want to confirm (collect payment) immediately. -d confirm=true \ -d payment_method="{{PAYMENT_METHOD_ID}}" \ # If the payment requires any follow-up actions from the # customer, like two-factor authentication, Stripe will error # and you will need to prompt them for a new payment method. -d error_on_requires_action=true

警告

支払いを確定する際に、error_on_requires_action を true に設定すると、ユーザーから 2 段階認証が必要とされる場合、Stripe はその支払いを自動的に拒否します。

Payment Intents API レスポンス

API で支払いを作成すると、そのレスポンスには PaymentIntent のステータスが含まれます。支払いが成功した場合には、ステータスは succeeded になります。

{ "id": "pi_0FdpcX589O8KAxCGR6tGNyWj", "object": "payment_intent", "amount": 1099, "charges": { "object": "list", "data": [ { "id": "ch_GA9w4aF29fYajT", "object": "charge", "amount": 1099, "refunded": false, "status": "succeeded", } ] }, "client_secret": "pi_0FdpcX589O8KAxCGR6tGNyWj_secret_e00tjcVrSv2tjjufYqPNZBKZc", "currency": "usd", "last_payment_error": null, "status": "succeeded", }

支払いが拒否されると、そのレスポンスにはエラーコードとエラーメッセージが含まれます。以下は、カードに 2 段階認証が必要とされるために支払いが拒否された例です。

{ "error": { "code": "authentication_required", "decline_code": "authentication_not_handled", "doc_url": "https://docs.stripe.com/error-codes#authentication-required", "message": "This payment required an authentication action to complete, but `error_on_requires_action` was set. When you're ready, you can upgrade your integration to handle actions at https://stripe.com/docs/payments/payment-intents/upgrade-to-handle-actions.", "payment_intent": { "id": "pi_1G8JtxDpqHItWkFAnB32FhtI", "object": "payment_intent", "amount": 1099, "status": "requires_payment_method", "last_payment_error": { "code": "authentication_required", "decline_code": "authentication_not_handled", "doc_url": "https://docs.stripe.com/error-codes#authentication-required", "message": "This payment required an authentication action to complete, but `error_on_requires_action` was set. When you're ready, you can upgrade your integration to handle actions at https://stripe.com/docs/payments/payment-intents/upgrade-to-handle-actions.", "type": "card_error" }, }, "type": "card_error" } }

組み込みのテスト

Stripe では、この実装の準備ができていることを確認するために、サンドボックスで使用できるテストカードをいくつか提供しています。任意のセキュリティコード、郵便番号、および今後の有効期限を指定して使用します。

番号説明
成功し、すぐに支払いを処理します。
支払い拒否コード insufficient_funds で常に失敗します。
認証を必要とします。この組み込みでは、authentication_not_handled というコードで拒否されます。

テストカードの全一覧をご覧ください。

カード認証を処理するために組み込みをアップグレードする

基本的なカード支払い用の支払い組み込みが完了しました。この組み込みは、支払い中に認証を必要とするカードを拒否することにご注意ください。

ダッシュボードで、Failed としてリストされた支払いを見かけるようになったら、システムをアップグレードしてください。Stripe のグローバルな導入は、そのような支払いを自動的に拒否せずに処理します。

このページはお役に立ちましたか。
はいいいえ
お困りのことがございましたら 、サポートにお問い合わせください。
早期アクセスプログラムにご参加ください。
変更ログをご覧ください。
ご不明な点がございましたら、お問い合わせください。
LLM ですか?llms.txt を読んでください。
Powered by Markdoc