コンテンツにスキップ
アカウントを作成
または
サインイン
Stripe ドキュメントのロゴ
/
AI に質問する
アカウントを作成
サインイン
始める
支払い
売上
プラットフォームおよびマーケットプレイス
資金管理
開発者向けリソース

注

このページはまだ日本語ではご利用いただけません。より多くの言語で文書が閲覧できるように現在取り組んでいます。準備が整い次第、翻訳版を提供いたしますので、もう少しお待ちください。

カード支払いの事前設定

手動でのサーバー側の確定を使用するか、支払い方法を別途提示します。

警告

将来の支払いの設定ガイドに従うことをお勧めします。このガイドは、手動によるサーバー側の確定を行う必要がある場合、または構築済みのシステムで決済手段を別途提示する必要がある場合にのみ使用してください。すでに Elements の実装が完了している場合は、Payment Element 移行ガイドをご覧ください。

Setup Intents API を使用すると、初回の支払いなしで顧客のカードを保存することができます。これは、今すぐ顧客をアカウント登録して支払いを設定し、将来顧客がオフラインの際に請求するときに役立ちます。

この組み込みを使用して、継続支払いを設定したり、最終金額が後で (顧客がサービスを受け取った後などに) 決定される 1 回限りの支払いを作成します。

Stripe を設定する
サーバ側
クライアント側

サーバ側

この組み込みには、Stripe API と通信するエンドポイントがサーバ上に必要です。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'

クライアント側

React Native SDK はオープンソースであり、詳細なドキュメントが提供されています。内部では、ネイティブの iOS および Android の SDK を使用します。Stripe の React Native SDK をインストールするには、プロジェクトのディレクトリーで (使用するパッケージマネージャーによって異なる) 次のいずれかのコマンドを実行します。

Command Line
yarn add @stripe/stripe-react-native

次に、その他の必要な依存関係をインストールします。

  • iOS の場合は、ios ディレクトリーに移動して pod install を実行し、必要なネイティブ依存関係もインストールします。
  • Android の場合は、依存関係をインストールする必要はありません。

注

公式の TypeScript ガイドに従って TypeScript のサポートを追加することをお勧めします。

Stripe の初期化

React Native アプリで Stripe を初期化するには、決済画面を StripeProvider コンポーネントでラップするか、initStripe 初期化メソッドを使用します。publishableKey の API 公開可能キーのみが必要です。次の例は、StripeProvider コンポーネントを使用して Stripe を初期化する方法を示しています。

import { useState, useEffect } from 'react'; import { StripeProvider } from '@stripe/stripe-react-native'; function App() { const [publishableKey, setPublishableKey] = useState(''); const fetchPublishableKey = async () => { const key = await fetchKey(); // fetch key from your server here setPublishableKey(key); }; useEffect(() => { fetchPublishableKey(); }, []); return ( <StripeProvider publishableKey={publishableKey} merchantIdentifier="merchant.identifier" // required for Apple Pay urlScheme="your-url-scheme" // required for 3D Secure and bank redirects > {/* Your app code here */} </StripeProvider> ); }

注

テストおよび開発時には API のテストキーを使用し、アプリの公開時には本番環境キーを使用します。

設定前に Customer を作成する
サーバー側

将来の支払いに備えてカードを設定するには、カードを Customer (顧客) に関連付ける必要があります。顧客がビジネスでアカウントを作成する際に、Customer オブジェクトを作成します。Customer オブジェクトを使用すると、支払い方法を再利用したり、複数の支払いを追跡したりできます。

Command Line
cURL
curl https://api.stripe.com/v1/customers \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d name="Jenny Rosen" \ --data-urlencode email="jennyrosen@example.com"

作成に成功すると、Customer オブジェクトが返されます。オブジェクトで顧客の id を調べて、その値を後で取得できるようにデータベースに保存できます。

これらの顧客は、ダッシュボードの顧客ページで見つけることができます。

SetupIntent を作成する
サーバー側

SetupIntent (支払い方法設定インテント) は、将来の支払いに備えて支払い方法を設定するという意図を示すオブジェクトです。SetupIntent オブジェクトには、アプリに渡すための一意のキーである、client secret が格納されます。

client secret を使用することで、customer のような機密情報を保護すると同時に、設定の確認や支払い方法の詳細の更新などの一定のアクションをクライアント側で実行できるようになります。client secret を使用すると、クレジットカードネットワークを利用してカード詳細を検証および認証できます。client secret は機密情報なので、ログに記録したり、URL に埋め込んだり、当該の顧客以外に漏洩することがないようにしてください。

サーバー側

サーバー側で SetupIntent を作成し、その client secret をアプリに返すエンドポイントを作成します。

Command Line
curl
curl https://api.stripe.com/v1/setup_intents/ \ -u
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:
\ -d "customer"="{{CUSTOMER_ID}}"

顧客がチェックアウトフローでオンセッション時にのみ、今後の支払いでカードを使用する場合、usage パラメータを on_session に設定して、オーソリ率を改善します。

カード詳細を収集する
クライアント側

カード番号、有効期限、セキュリティコード、郵便番号を収集する、SDK が提供する UI コンポーネント、CardField を使用して、クライアント側でカード情報を安全に収集します。

CardField は、リアルタイムで検証と形式の設定を行います。

CardField コンポーネントを支払い画面に追加することで、顧客からカード詳細を安全に収集します。onCardChange コールバックを使用して、カードのブランドや詳細情報の欠落の有無など、カードに関する機密性の低い情報を検査します。

import { CardField, useStripe } from '@stripe/stripe-react-native'; function PaymentScreen() { // ... return ( <View> <CardField postalCodeEnabled={true} placeholders={{ number: '4242 4242 4242 4242', }} cardStyle={{ backgroundColor: '#FFFFFF', textColor: '#000000', }} style={{ width: '100%', height: 50, marginVertical: 30, }} onCardChange={(cardDetails) => { console.log('cardDetails', cardDetails); }} onFocus={(focusedField) => { console.log('focusField', focusedField); }} /> </View> ); }

注意

特にヨーロッパでは、カードの再利用に関する規制があるため、カード詳細を保存して将来のオフセッションの支払いに使用する際は、カードを保存するための許可を取得します。カードをどのように使用するかを顧客に知らせるテキストを決済フローに含めてください。

設定を完了するには、顧客のカードと請求情報を confirmSetupIntent に渡します。このメソッドには、useConfirmSetupIntent フックまたは useStripe フックを使用してアクセスできます。

function PaymentScreen() { // ... const { confirmSetupIntent, loading } = useConfirmSetupIntent(); // ... const handlePayPress = async () => { // Gather the customer's billing information (for example, email) const billingDetails: BillingDetails = { email: 'jenny.rosen@example.com', }; // Create a setup intent on the backend const clientSecret = await createSetupIntentOnBackend(); const { setupIntent, error } = await confirmSetupIntent(clientSecret, { paymentMethodType: 'Card', paymentMethodData: { billingDetails, } }); if (error) { //Handle the error } // ... }; return ( <View> // ... <Button onPress={handlePayPress} title="Save" loading={loading} /> </View> ); }

一部の支払い方法では、支払いを完了するために追加の認証手順が必要です。SDK が、支払いの確定と認証フローを管理します。これには、認証に必要な追加の画面の表示が含まれる場合があります。認証プロセスをテストするには、テストカード 4000 0025 0000 3155 を、セキュリティコード、郵便番号、および有効期限とともに使用します。

SetupIntent が成功すると、(setupIntent.paymentMethodID で) 生成された PaymentMethod ID が、指定された Customer に保存されます。

保存されたカードに後で請求する
サーバー側

顧客にオフセッションで請求する準備ができたら、Customer ID と PaymentMethod ID を使用して、PaymentIntent を作成します。請求するカードを見つけるには、Customer に関連付けられた PaymentMethod のリストを作成します。

Command Line
cURL
curl -G https://api.stripe.com/v1/payment_methods \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d customer=
{{CUSTOMER_ID}}
\ -d type=card

Customer ID と PaymentMethod ID を取得したら、支払いの金額と通貨を使用して PaymentIntent を作成します。下記のパラメータを設定し、オフセッションの支払いを行います。

  • off_session を true に設定して、支払いの実行時に顧客が決済フローに存在しないことを示します。これにより、認証が必要な場合は PaymentIntent からエラーが返されます。
  • PaymentIntent の confirm プロパティの値を true に設定します。これにより、PaymentIntent が作成されると直ちに確定されます。
  • payment_method を PaymentMethod の ID に設定し、customer を Customer の ID に設定します。
Command Line
curl
curl https://api.stripe.com/v1/payment_intents \ -u
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:
\ -d amount=1099 \ -d currency=usd \ -d customer="{{CUSTOMER_ID}}" \ -d payment_method="{{PAYMENT_METHOD_ID}}" \ -d off_session=true \ -d confirm=true

リカバリフローを開始する

PaymentIntent に他のステータスがある場合、支払いは成功せず、リクエストは失敗します。支払いを完了するために (メール、テキスト、プッシュ通知などで) アプリケーションに戻るように顧客に通知します。支払いが最初に失敗した理由を示し、顧客が再試行できるようにするリカバリフローをアプリで作成することをお勧めします。

リカバリフローで client secret を使用して PaymentIntent を取得します。PaymentIntent の lastPaymentError を確認し、支払いの試行が失敗した理由を調べます。カードエラーの場合、支払いエラーの最後のメッセージをユーザーに表示できます。それ以外の場合は、汎用の失敗メッセ―ジを表示します。

function PaymentScreen() { // ... const {retrievePaymentIntent} = useStripe(); // ... const handleRecoveryFlow = async () => { const {paymentIntent, error} = await retrievePaymentIntent(clientSecret); if (error) { Alert.alert(`Error: ${error.code}`, error.message); } else if (paymentIntent) { // Default to a generic error message const failureReason = 'Payment failed, try again.'; if (paymentIntent.lastPaymentError.type === 'Card') { failureReason = paymentIntent.lastPaymentError.message; } } }; return ( <View> // ... <Button onPress={handleRecoveryFlow} title="Recovery flow" loading={loading} /> </View> ); }

顧客に再試行してもらう

保存されたカードを更新または削除し、支払いを再試行するオプションをリカバリフローで顧客に提供します。最初の支払いを受け付けるのと同じ手順に従いますが、1 つ異なる点があります。元の失敗した PaymentIntent を確定するために新しい支払いインテントを作成するのではなく、その client secret を再利用します。

認証が必要なために支払いが失敗した場合は、新しい支払い方法を作成するのではなく、既存の PaymentMethod を使用して再試行してください。

function PaymentScreen() { // ... const {retrievePaymentIntent} = useStripe(); // ... const handleRecoveryFlow = async () => { const {paymentIntent, error} = await retrievePaymentIntent(clientSecret); if (error) { Alert.alert(`Error: ${error.code}`, error.message); } else if (paymentIntent) { // Default to a generic error message let failureReason = 'Payment failed, try again.'; if (paymentIntent.lastPaymentError.type === 'Card') { failureReason = paymentIntent.lastPaymentError.message; } // If the last payment error is authentication_required, let the customer // complete the payment without asking them to reenter their details. if (paymentIntent.lastPaymentError?.code === 'authentication_required') { // Let the customer complete the payment with the existing PaymentMethod const {error} = await confirmPayment(paymentIntent.clientSecret, { paymentMethodType: 'Card', paymentMethodData: { billingDetails, paymentMethodId: paymentIntent.lastPaymentError?.paymentMethod.id, }, }); if (error) { // handle error } } else { // Collect a new PaymentMethod from the customer } } }; return ( <View> // ... <Button onPress={handleRecoveryFlow} title="Recovery flow" loading={loading} /> </View> ); }

組み込みをテストする

ここまでで、以下を実行する組み込みが完成しています。

  1. SetupIntent を使用して、顧客に請求することなくカード詳細を収集・保存する
  2. オフセッションでカードに請求し、支払い拒否と認証リクエストを処理するリカバリーフローが備わっている

この組み込みの稼働準備ができていることを確認するために使用できるいくつかのテストカードがあります。任意のセキュリティコード、郵便番号、および今後の有効期限を指定して使用します。

番号説明
成功し、支払いがすぐに処理されます。
初めての購入には認証が必要ですが、カードに setup_future_usage の設定があれば、以降の支払い (オフセッションの支払いを含む) に成功します。
初めての購入には認証が必要で、以降の支払い (オフセッションの支払いを含む) には失敗し、支払い拒否コード authentication_required が返されます。
初めての購入には認証が必要で、以降の支払い (オフセッションの支払いを含む) には失敗し、支払い拒否コード insufficient_funds が返されます。
(初めての購入を含め) 常に失敗し、支払い拒否コード insufficient_funds が返されます。

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

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