Sofort での支払いを受け付ける
ヨーロッパで一般的な支払い方法である Sofort を受け付ける方法をご紹介します。
警告
SOFORT has been discontinued as of March 31, 2025. For more information, read our support page.
注意
サーバー側での手動確定を使用する必要がある場合、またはお使いの実装で決済手段を別途表示する必要がある場合を除き、決済を受け付けるガイドに従うことをお勧めします。すでに Elements との連携が完了している場合は、Payment Element 移行ガイドをご覧ください。
Sofort は 1 回限りの使用の、通知遅延型の支払い方法であり、顧客は支払いの認証を求められます。顧客が Sofort で支払う場合は、アプリから銀行のポータルにリダイレクトされ、そこで支払いの認証を行います。成功または失敗の通知を受け取るまでに、通常 2 〜 14 日かかります。
注
Sofort を受け付けるには、Sofort 利用規約に従う必要があります。
Stripe を設定するサーバ側クライアント側
まず、Stripe アカウントが必要です。今すぐ登録してください。
サーバ側
この組み込みには、サーバ上に Stripe API と通信するエンドポイントが必要です。サーバから Stripe API にアクセスするには、Stripe の公式ライブラリを使用します。
クライアント側
Stripe iOS SDK はオープンソースです。詳細なドキュメントが提供されており、iOS 13 以降をサポートするアプリと互換性があります。
注
For details on the latest SDK release and past versions, see the Releases page on GitHub. To receive notifications when a new release is published, watch releases for the repository.
アプリの起動時に Stripe 公開可能キーを使用して SDK を設定します。これにより、アプリが Stripe API にリクエストを送信できるようになります。
PaymentIntent を作成するサーバ側
PaymentIntent (支払いインテント) は、顧客から支払いを回収する意図を示し、支払いプロセスのライフサイクルを追跡します。
サーバ側
サーバーで PaymentIntent
を作成し、回収する amount
と eur
通貨を指定します (Sofort は他の通貨に対応していません)。既存の Payment Intents のシステムがある場合は、sofort
を支払い方法タイプのリストに追加します。
使用言語の変更
デフォルトでは、Stripe は指定された国コードに基づいた言語で Sofort オーソリページを表示します。リクエストの一部として国コードを指定し、preferred_
プロパティの値を変更することで、オーソリページを顧客の希望言語にカスタマイズできます。サポートされている値は、de
、en
、es
、it
、fr
、nl
、および pl
です。
PaymentIntent オブジェクト全体をアプリに渡す代わりに、その client secret を返します。PaymentIntent の client secret は、支払い額などの機密情報の操作を許可することなく、クライアントで支払いを確定し、支払い情報の詳細を更新できる一意のキーです。
クライアント側
クライアントで、サーバの PaymentIntent をリクエストし、その client secret を保存します。
Stripe に支払いを送信するクライアント側
顧客が Sofort での支払いをタップしたら、PaymentIntent
を確定して支払いを完了します。サーバーから取得した PaymentIntent
client secret を使用して、STPPaymentIntentParams オブジェクトを設定します。Sofort を使用するには、顧客の銀行の国コードを収集し、それを STPPaymentMethodSofortParams
に渡す必要があります。
PaymentIntent
オブジェクト全体をクライアントに送信するのではなく、その client secret を使用します。これは、Stripe API リクエストを認証する API キーとは異なります。client secret は、機密情報 (customer
など) を非表示にしながら、アプリから PaymentIntent の重要なフィールド (status
など) にアクセスできるようにする文字列です。
戻り先 URL を設定する
iOS SDK では、アプリに Webview を表示して、Sofort の支払いを実行できます。認証が終了すると、Webview は自動的に閉じられるため、顧客が閉じる必要はありません。この動作を有効にするには、カスタム URL スキームを設定するか、ユニバーサルリンクを設定して、URL を SDK に転送するようにアプリのデリゲートを設定します。
STPPaymentHandler confirmPayment を呼び出して決済を完了します。
支払い後のイベントを処理する
As Sofort is a delayed notification payment method, the PaymentIntent’s status remains in a payment_intent.processing state for up to 14 days from its creation (also known as the cutoff date). In a sandbox, the PaymentIntent’s status remains in the processing state for three minutes to simulate this.
- Stripe では、処理中の状態の間に購入をフルフィルメントすることをお勧めします。平均して、処理中状態に入った後に Sofort の支払い試行が失敗する確率は 0.2% と予測されます。この方法は、Sofort の支払いの失敗率が低い Sofort にのみ適用でき、他の遅延通知型の支払い方法には適用できません。
- 必要に応じて、payment_intent.succeeded イベントを受け取った後にのみ注文をフルフィルメントすることもできます。Stripe では、支払いが確定され、売上が保証された後でこのイベントを送信します。
- 顧客が支払いを行わない場合、Stripe は payment_intent.failed イベントを送信し、PaymentIntent は
requires_
ステータスに戻ります。payment_ method
ダッシュボード、カスタム Webhook、またはパートナーソリューションを使用して、これらのイベントを受信し、顧客への注文確認メールの送信、データベースへの売上の記録、配送ワークフローの開始などのアクションを実行します。
手動
Stripe ダッシュボードは、すべての Stripe での支払いの確認、メール領収書の送信、入金処理、または失敗した支払いの再試行に使用できます。
カスタムコード
Webhook ハンドラを作成してイベントをリッスンし、非同期型のカスタムの支払いフローを作成します。Stripe CLI を使用して、ローカルで Webhook 組み込みのテストとデバッグを行います。
事前構築のアプリ
オートメーションやマーケティングとセールスなどの一般的なビジネスイベントを、パートナーアプリケーションとの連携によって処理します。
不審請求が申請された支払い
顧客が銀行で支払いを許可する必要があるため、不正使用や未認識の支払いのリスクは低くなります。このため、チャージバックに発展する不審請求の申請を受けて、Stripe アカウントから売上が引き出されることはありません。
支払いの失敗
カットオフ時間内に支払い処理が確定されなかった場合は、PaymentIntent (支払いインテント) オブジェクトのステータスが自動的に processing
から requires_
に移行します。また、売上がカットオフ日以降に受け取られた場合は、顧客に自動的に返金されます。
平均して、Sofort の支払い処理の約 0.2% が失敗すると予測されます。この数値は、業種や顧客ベースによって異なります。支払い平均額、取り扱う商品やサービスのタイプ、およびビジネスに付随するリスクによっては、payment_
イベントを受信してからのみ注文のフルフィルメントを行うようにすることもできます。
返金
Sofort は、元の支払い日から 180 日以内の返金リクエストのみを受け付けます。180 日を過ぎると、支払いの返金を実行できなくなります。
まだ確定されていない保留中の支払いに対して返金することができます。PaymentIntent のステータスが processing
の際に全額返金または一部返金を作成する場合、返金は PaymentIntent のステータスが succeeded
になるまで実行されません。支払いの試行が失敗した後の PaymentIntent のステータスが requires_
の場合、資金が顧客の銀行口座から移動していないため、全額返金および一部返金はキャンセルとしてマークされます。