MobilePay での支払い
デンマークとフィンランドで一般的な支払い方法として使われている MobilePay を受け付ける方法をご紹介します。
MobilePay は、デンマークとフィンランドで使われている 1 回限りの使用のカードウォレット決済手段です。顧客は MobilePay アプリを使用して、支払いを認証して承認できます。
顧客が MobilePay で支払う場合、Stripe は MobilePay から受け取ったカードデータを使用してカード取引を実行します。カード取引の処理は実装には表示されず、Stripe は支払いの成功または失敗を直ちに通知します。
Stripe では、埋め込み可能な決済フォームである Mobile Payment Element の使用を推奨しています。MobilePay やその他の決済手段を最小限の労力でシステムに追加することが可能です。
このガイドでは、カスタムの決済フォームを使用して、ネイティブのモバイルアプリから MobilePay を受け付ける方法をご説明します。ネイティブのモバイルアプリによって、顧客は MobilePay モバイルアプリにリダイレクトされ、決済を完了します。購入を完了するにあたり、MobilePay モバイルアプリで追加のアクションは必要ありません。
Stripe を設定するサーバー側クライアント側
まず、Stripe アカウントが必要です。今すぐ登録してください。
サーバー側
この導入には、 Stripe API と通信するエンドポイントがサーバー上に必要です。サーバーからStripe API にアクセスするには、公式ライブラリを使用します。
クライアント側
React Native SDK はオープンソースであり、詳細なドキュメントが提供されています。内部では、ネイティブの iOS および Android の SDK を使用します。Stripe の React Native SDK をインストールするには、プロジェクトのディレクトリーで (使用するパッケージマネージャーによって異なる) 次のいずれかのコマンドを実行します。
次に、その他の必要な依存関係をインストールします。
- For iOS, go to the ios directory and run
pod install
to ensure that you also install the required native dependencies. - 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> ); }
PaymentIntent を作成するサーバー側クライアント側
サーバー側
PaymentIntent は、顧客から支払いを回収する意図を表すオブジェクトであり、支払いプロセスのライフサイクルをステージごとに追跡します。
サーバーで PaymentIntent
を作成して確定するには、以下のようにします。
- 回収する金額と対応している通貨 (
eur
、dkk
、sek
、nok
) を指定します。 mobilepay
を決済手段タイプのリストに追加します。ダッシュボードで MobilePay を有効にしていることを確認してください。
PaymentIntent には client secret が含まれています。次のステップで PaymentIntent を確定するために、client secret をクライアントに送信します。
クライアント側
クライアントで、サーバーの PaymentIntent をリクエストし、その client secret を保存します。
function PaymentScreen() { const fetchPaymentIntentClientSecret = async () => { const response = await fetch(`${API_URL}/create-payment-intent`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ currency: 'dkk', }), }); const {clientSecret} = await response.json(); return clientSecret; }; const handlePayPress = async () => { // See below }; return ( <View> <Button onPress={handlePayPress} title="Pay" /> </View> ); }
client secret は、Stripe API リクエストを認証する API キーとは異なります。このデバイスは支払いを完了できるため、慎重に扱う必要があります。記録したり、URL に埋め込んだり、当該の顧客以外に漏洩することがないようにしてください。
戻り先 URL を設定する (iOS のみ)クライアント側
顧客がアプリを終了すると (Safari やバンキングアプリで認証するなど)、自動的にアプリに戻るための方法を提供します。多くの決済手段タイプで、戻り先 URL の指定が「必須」です。戻り先 URL を有効にしていても、指定がされていないと、戻り先 URL が必要な決済手段をユーザーに提示できません。
戻り先 URL を指定するには、以下のようにします。
- カスタム URL を登録します。ユニバーサルリンクはサポートされていません。
- カスタム URL を設定 します。
- 以下のように、URL を Stripe SDK に転送するようにルートコンポーネントを設定します。
注
Expo を使用している場合は、app.
ファイルでスキームを設定します。
import { useEffect, useCallback } from 'react'; import { Linking } from 'react-native'; import { useStripe } from '@stripe/stripe-react-native'; export default function MyApp() { const { handleURLCallback } = useStripe(); const handleDeepLink = useCallback( async (url: string | null) => { if (url) { const stripeHandled = await handleURLCallback(url); if (stripeHandled) { // This was a Stripe URL - you can return or add extra handling here as you see fit } else { // This was NOT a Stripe URL – handle as you normally would } } }, [handleURLCallback] ); useEffect(() => { const getUrlAsync = async () => { const initialUrl = await Linking.getInitialURL(); handleDeepLink(initialUrl); }; getUrlAsync(); const deepLinkListener = Linking.addEventListener( 'url', (event: { url: string }) => { handleDeepLink(event.url); } ); return () => deepLinkListener.remove(); }, [handleDeepLink]); return ( <View> <AwesomeAppComponent /> </View> ); }
MobilePay による支払いを確認するクライアント側
顧客が MobilePay で支払うをタップしたら、confirmPayment を呼び出して支払いを完了します。WebView が表示され、顧客はそこで MobilePay アプリ での支払いをオーソリできます。顧客が支払いを承認すると、プロミスは、paymentIntent
フィールド、または支払いでエラーが発生した場合には error
フィールドのどちらかを格納したオブジェクトで解決されます。
import {useConfirmPayment} from '@stripe/stripe-react-native'; function PaymentScreen() { const {confirmPayment, loading} = useConfirmPayment(); const fetchPaymentIntentClientSecret = async () => { // See above }; const handlePayPress = async () => { // Fetch the client secret from the backend. const clientSecret = await fetchPaymentIntentClientSecret(); const {error, paymentIntent} = await confirmPayment(clientSecret, { paymentMethodType: 'MobilePay', }); if (error) { console.log('Payment confirmation error: ', error); } else if (paymentIntent) { console.log('Successfully confirmed payment: ', paymentIntent); } }; return ( <View> <Button onPress={handlePayPress} title="Pay" disabled={loading} /> </View> ); }
顧客は 5 分以内に MobilePay アプリで支払いを承認できます。基のカードによる支払いが失敗した場合、顧客は別のカードを選択して、MobilePay アプリで再試行できます。
支払い後のイベントを処理する
支払いが完了すると、Stripe は payment_intent.succeeded イベントを送信します。ダッシュボード、カスタム Webhook、またはパートナーソリューションを使用してこれらのイベントを受信し、また、顧客への注文確認メールの送信、データベースでの売上の記録、配送ワークフローの開始などのアクションを実行します。
クライアントからのコールバックを待つのではなく、これらのイベントをリッスンします。クライアント側では、コールバックが実行される前に顧客がブラウザーのウィンドウを閉じたり、アプリを終了したりする可能性があります。また、悪意を持つクライアントがレスポンスを不正操作する恐れもあります。非同期型のイベントをリッスンするよう構築済みのシステムを設定することで、これ以降はより多くの決済手段を簡単に受け付けられるようになります。サポートされているすべての決済手段の違いをご確認ください。
手動
Stripe ダッシュボードは、すべての Stripe 支払いの確認、メールでの領収書の送信、入金処理、または失敗した支払いの再試行に使用できます。
カスタムコード
Webhook ハンドラを作成してイベントをリッスンし、カスタムの非同期決済フローを作成します。Stripe CLI を使用し、ローカルで Webhook 組み込みのテストとデバッグを行います。
事前構築のアプリ
オートメーションやマーケティングとセールスなどの一般的なビジネスイベントを、パートナーアプリケーションとの連携によって処理します。
組み込みをテストする
テスト API キーを使用して、PaymentIntent を作成します。PaymentIntent を確定したら、next_
リダイレクト URL に従い、支払いをオーソリまたは失敗させるオプションのあるテストページをテストします。
- Authorize test payment (テスト支払いをオーソリする) をクリックして、支払い成功のケースをテストします。PaymentIntent の status (ステータス) が
requires_
からaction succeeded
に移行します。 - Fail test payment (テスト支払いを失敗させる) をクリックして、顧客が認証に失敗するケースをテストします。PaymentIntent の status (ステータス) が
requires_
からaction requires_
に移行します。payment_ method
失敗した支払い
基になったカード取引が拒否されると、MobilePay 取引が失敗することがあります。詳しくは、カードの支払い拒否をご覧ください。この場合、PaymentMethod は解除され、PaymentIntent のステータスは自動的に requires_
に移行します。
PaymentIntent のステータスが requires_
の場合、顧客は 5 分以内に支払いを認証する必要があります。5 分経過してもアクションが実行されない場合、PaymentMethod は解除され、PaymentIntent のステータスは自動的に requires_
に移行します。
返金と不審請求の申請
Stripe は、MobilePay 取引の一環として標準のカードネットワークを使用してカード取引を実行します。返金 と不審請求の申し立てには、Visa と Mastercard のネットワークのルールが適用されます。