今後の支払いのために SEPA ダイレクトデビット詳細を保存する
将来の SEPA ダイレクトデビット支払いに備えて支払い方法の詳細を保存する方法を紹介します。
Setup Intents API を使用して事前に支払い方法の詳細を収集し、後から最終的な金額や支払い日を決定します。この機能は、次の場合に使用します。
- 支払い方法をウォレットに保存して、以降の購入を効率化する
- サービスの提供後に追加料金を回収する
- サブスクリプションの無料トライアルを開始する
Stripe を設定するサーバ側クライアント側
サーバ側
この組み込みには、Stripe API と通信するエンドポイントがサーバ上に必要です。Stripe の公式ライブラリを使用して、サーバから Stripe API にアクセスします。
クライアント側
React Native SDK はオープンソースであり、詳細なドキュメントが提供されています。内部では、ネイティブの iOS および Android の SDK を使用します。Stripe の React Native SDK をインストールするには、プロジェクトのディレクトリーで (使用するパッケージマネージャーによって異なる) 次のいずれかのコマンドを実行します。
次に、その他の必要な依存関係をインストールします。
- iOS の場合は、ios ディレクトリーに移動して
pod install
を実行し、必要なネイティブ依存関係もインストールします。 - Android の場合は、依存関係をインストールする必要はありません。
Stripe の初期化
React Native アプリで Stripe を初期化するには、決済画面を StripeProvider
コンポーネントでラップするか、initStripe
初期化メソッドを使用します。publishableKey
の API 公開可能キーのみが必要です。次の例は、StripeProvider
コンポーネントを使用して Stripe を初期化する方法を示しています。
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> ); }
Customer を作成または取得するサーバー側
以降の支払いに SEPA ダイレクトデビットの口座を再利用するには、その口座を Customer に関連付ける必要があります。
顧客がお客様のビジネスでアカウントを作成するときに、Customer オブジェクトを作成する必要があります。Customer オブジェクトの ID を、自社の内部的な顧客の表記に関連付けることにより、保存された支払い方法の詳細を後で取得して使用できます。顧客がアカウントを作成していない場合でも、すぐに Customer オブジェクトを作成し、後でこのオブジェクトを顧客のアカウントの内部表記に関連付けることができます。
新しい Customer を作成するか、または既存の Customer を取得して、この決済情報に関連付けます。サーバーに以下のコードを含め、新しい Customer を作成します。
SetupIntent を作成するサーバー側
SetupIntent (支払い方法設定インテント) は、お客様の意図を表し、以降の支払いに使用される顧客の支払い方法を設定する手順を追跡するオブジェクトです。SEPA ダイレクトデビットの場合、これには顧客からの同意書の収集と、IBAN の妥当性の確認が含まれます。
payment_method_types を sepa_
に設定してサーバーに SetupIntent (支払い方法設定インテント) を作成し、Customer の id を指定します。
支払い方法の詳細と同意書承認を収集するクライアント側
決済フォームで顧客の IBAN を収集し、顧客が黙示的にこの同意書に署名するように以下の標準オーソリテキストを表示します。
以下に示す定型の承認用文書を表示し、顧客が黙示的にこの同意書に署名するようにしてください。
「Rocket Rides」はお客様の社名に置き換えます。
支払い方法を設定すると、承認済みの同意書が作成されます。これらの規約を受け入れる際、顧客は黙示的に同意書に署名したため、フォームまたはメールを通じて、顧客にこれらの規約を伝える必要があります。
export default function SepaSetupFuturePaymentScreen() { const [email, setEmail] = useState(''); const [iban, setIban] = useState(''); return ( <Screen> <TextInput placeholder="E-mail" keyboardType="email-address" onChange={(value) => setEmail(value.nativeEvent.text)} style={styles.input} /> <TextInput placeholder="Iban" onChange={(value) => setIban(value.nativeEvent.text.toLowerCase())} style={styles.input} /> <Button variant="primary" onPress={handlePayPress} title="Save IBAN" loading={loading} /> </Screen> ); }
Stripe に支払い方法の詳細を送信するクライアント側
作成した SetupIntent から client secret を取得し、confirmSetupIntent
を呼び出します。
client secret は設定を完了できるため、慎重に取り扱う必要があります。記録したり、URL に埋め込んだり、当該の顧客以外に漏洩することがないようにしてください。
注
IBAN に国コード AD、PF、TF、GI、GB、GG、VA、IM、JE、MC、NC、BL、PM、SM、CH、WF が含まれる場合は、billingDetails
に addressCountry
と addressLine1
を指定する必要があります。住所フィールドの一覧については、React Native SDK リファレンスをご覧ください。
export default function SepaSetupFuturePaymentScreen() { const [iban, setIban] = useState(''); const {confirmSetupIntent, loading} = useConfirmSetupIntent(); const handlePayPress = async () => { const clientSecret = await createSetupIntentOnBackend(email); const billingDetails: PaymentMethodCreateParams.BillingDetails = { name: 'Jenny Rosen', email: 'jenny.rosen@example.com', }; const {error, setupIntent} = await confirmSetupIntent(clientSecret, { paymentMethodType: 'SepaDebit', paymentMethodData: { billingDetails, iban, } }); if (error) { Alert.alert(`Error code: ${error.code}`, error.message); console.log('Setup intent confirmation error', error.message); } else if (setupIntent) { Alert.alert( `Success: Setup intent created. Intent status: ${setupIntent.status}`, ); } }; return <Screen>{/* ... */}</Screen>; }
構築したシステムをテストする
confirmSepaDebitSetup リクエストで以下の IBAN を使用して、自身のフォームをテストすることができます。各 IBAN に対応する支払い方法の詳細が収集されますが、支払い時にはそれぞれ異なる動作を示します。