アプリでの iDEAL を使用した将来の SEPA ダイレクトデビット支払いの設定は、プロセスを追跡する SetupIntent (支払い方法設定インテント) の作成、同意書承認の収集、および iDEAL への顧客のリダイレクトで構成されます。Stripe はこの SetupIntent を使用して、設定が完了するまでの設定の状態のすべてを追跡および処理します。
まず、Stripe アカウントが必要です。今すぐ登録してください。
サーバ側
この組み込みには、サーバ上に Stripe API と通信するエンドポイントが必要です。サーバから Stripe API にアクセスするには、Stripe の公式ライブラリを使用します。
クライアント側
Stripe Android SDK はオープンソースであり、詳細なドキュメントが提供されています。
To install the SDK, add stripe-android
to the dependencies
block of your app/build.gradle file:
plugins {
id("com.android.application")
}
android { ... }
dependencies {
implementation("com.stripe:stripe-android:21.11.1")
implementation("com.stripe:financial-connections:21.11.1")
}
Stripe の公開可能キーを使用して SDK を設定し、 Application
サブクラスなどで、Stripe API へのリクエストを実行できるようにします。
import com.stripe.android.PaymentConfiguration
class MyApp : Application() {
override fun onCreate() {
super.onCreate()
PaymentConfiguration.init(
applicationContext,
"pk_test_TYooMQauvdEDq54NiTphI7jx"
)
}
}
注
Use your test keys while you test and develop, and your live mode keys when you publish your app.
Stripe サンプルでは、サーバへの HTTP リクエストの作成に、OkHttp および GSON も使用します。
Customer を作成する
お客様のビジネスで顧客がアカウントを作成する際に、Customer を作成し、それを、そのアカウントを表す独自の内部表記と関連付けます。このようにすると、保存されている支払い方法の詳細を後で取得して使用することができます。
curl -X POST https://api.stripe.com/v1/customers \
-u "sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
SetupIntent を作成する
顧客 の ID を使用して SetupIntent
を作成し、payment_method_types を ideal
に設定します。SetupIntent
は、設定プロセスのステップを追跡します。iDEAL の場合、このステップには顧客からの SEPA ダイレクトデビット同意書 の収集と、同意書の有効性の追跡が含まれます。
curl https://api.stripe.com/v1/setup_intents \
-u "sk_test_BQokikJOvBiI2HlWgH4olfQ2
:" \
-d "payment_method_types[]"=ideal \
-d customer={{CUSTOMER_ID}}
支払い方法の詳細と同意書承認を収集する
アプリで顧客の氏名とメールアドレスを収集します。それらの情報を使用して PaymentMethodCreateParams オブジェクトを作成します。
val billingDetails = PaymentMethod.BillingDetails(name = "Jenny Rosen", email = "jenny.rosen@example.com")
val ideal = PaymentMethodCreateParams.Ideal(null)
val paymentMethodCreateParams = PaymentMethodCreateParams.create(ideal, billingDetails)
SEPA ダイレクトデビットの支払いを処理するには、顧客から同意書を収集する必要があります。以下に示す定型の承認用文書を表示し、顧客が黙示的にこの同意書に署名するようにしてください。
「Rocket Rides」はお客様の社名に置き換えます。
Authorization text template
支払い方法を設定すると、承認済みの同意書が作成されます。これらの規約を受け入れる際、顧客は黙示的に同意書に署名したため、フォームまたはメールを通じて、顧客にこれらの規約を伝える必要があります。
Stripe に支払い方法の詳細を送信する
作成した SetupIntent から client secret を取得し、PaymentLauncher confirm を呼び出します。これにより、Webview が表示され、顧客は銀行のウェブサイトまたはアプリで設定を完了できます。完了後、支払い結果とともに、onPaymentResult
が呼び出されます。
class IdealSetupActivity : AppCompatActivity() {
private lateinit var setupIntentClientSecret: String
private val paymentLauncher: PaymentLauncher by lazy {
PaymentLauncher.Companion.create(
this,
PaymentConfiguration.getInstance(applicationContext).publishableKey,
PaymentConfiguration.getInstance(applicationContext).stripeAccountId,
::onPaymentResult
)
}
private fun startCheckout() {
val confirmParams = ConfirmSetupIntentParams
.create(
paymentMethodCreateParams = paymentMethodCreateParams,
clientSecret = setupIntentClientSecret
)
paymentLauncher.confirm(confirmParams)
}
private fun onPaymentResult(paymentResult: PaymentResult) {
val message = when (paymentResult) {
is PaymentResult.Completed -> {
"Completed!"
}
is PaymentResult.Canceled -> {
"Canceled!"
}
is PaymentResult.Failed -> {
"Failed: " + paymentResult.throwable.message
}
}
}
}
後日 SEPA ダイレクトデビット PaymentMethod に請求する
顧客に再び請求する必要が生じたときは、新しい PaymentIntent を作成します。SetupIntent を 取得し、latest_attempt
フィールドを展開して payment_method_details
内の generated_sepa_debit
ID を探すことで、SEPA ダイレクトデビットの支払い方法の ID を見つけます。
curl -G https://api.stripe.com/v1/setup_intents/{{SETUP_INTENT_ID}} \
-u "sk_test_BQokikJOvBiI2HlWgH4olfQ2
:" \
-d "expand[]"=latest_attempt
SEPA ダイレクトデビットと顧客 ID を使用して PaymentIntent を作成します。
curl https://api.stripe.com/v1/payment_intents \
-u "sk_test_BQokikJOvBiI2HlWgH4olfQ2
:" \
-d "payment_method_types[]"=sepa_debit \
-d amount=1099 \
-d currency=eur \
-d customer= \
-d payment_method={{SEPA_DEBIT_PAYMENT_METHOD_ID}} \
-d confirm=true
導入をテストする
Using your test API keys to confirm the SetupIntent. After confirming, you’re redirected to a test page with options to authorize or fail the payment method setup.
- Authorize test payment (テスト支払いをオーソリする) をクリックして、設定成功のケースをテストします。SetupIntent が
requires_action
から succeeded
に変わります。 - Fail test payment (テスト支払いを失敗させる) をクリックして、顧客が認証に失敗するケースをテストします。SetupIntent が
requires_action
から requires_payment_method
に変わります。
SEPA ダイレクトデビット組み込みのテスト
payment_method.billing_details.email
を以下の値のいずれかに設定して PaymentMethod のステータスの移行をテストします。メールアドレスの先頭に独自のカスタムのテキストを含め、その後ろにアンダースコアを付けることができます。 たとえば、test_1_generatedSepaDebitIntentsFail@example.com
は、PaymentIntent とともに使用された場合に常に失敗する、SEPA ダイレクトデビットの PaymentMethod です。
メールアドレス | 説明 |
---|
generatedSepaDebitIntentsSucceed@example.com | PaymentIntent のステータスは、processing から succeeded に移行します。 |
generatedSepaDebitIntentsSucceedDelayed@example.com | The PaymentIntent status transitions from processing to succeeded after at least three minutes. |
generatedSepaDebitIntentsFail@example.com | PaymentIntent のステータスは、processing から requires_payment_method に移行します。 |
generatedSepaDebitIntentsFailDelayed@example.com | The PaymentIntent status transitions from processing to requires_payment_method after at least three minutes. |
generatedSepaDebitIntentsSucceedDisputed@example.com | PaymentIntent のステータスは、processing から succeeded に移行しますが、すぐに不審請求の申請が作成されます。 |