EPS は 1 回限りの使用の決済手段であり、顧客は支払いの認証を求められます。EPS を使用して支払う場合、顧客はお客様のウェブサイトからリダイレクトされ、支払いを承認すると、ウェブサイトに戻されます。ここで、お客様は支払いが成功したか失敗したかに関する即時通知を受け取ります。
まず、Stripe アカウントが必要です。今すぐ登録してください。
サーバ側
この組み込みには、サーバ上に Stripe API と通信するエンドポイントが必要です。サーバから Stripe API にアクセスするには、Stripe の公式ライブラリを使用します。
クライアント側
Stripe iOS SDK はオープンソースです。詳細なドキュメントが提供されており、iOS 13 以降をサポートするアプリと互換性があります。
SDK をインストールするには、以下のステップに従います。
- Xcode で、File (ファイル) > Add Package Dependencies… (パッケージ依存関係を追加) を選択し、リポジトリー URL として
https://github.com/stripe/stripe-ios-spm
を入力します。 - リリースページから最新のバージョン番号を選択します。
- StripePaymentsUI 製品をアプリのターゲットに追加します。
アプリの起動時に Stripe 公開可能キーを使用して SDK を設定します。これにより、アプリが Stripe API にリクエストを送信できるようになります。
import UIKit
import StripePaymentsUI
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
StripeAPI.defaultPublishableKey = "pk_test_TYooMQauvdEDq54NiTphI7jx"
return true
}
}
PaymentIntent (支払いインテント) は、顧客から支払いを回収する意図を示し、支払いプロセスのライフサイクルを追跡します。
サーバ側
サーバーで PaymentIntent
を作成し、回収する amount
と eur
通貨を指定します (EPS は他の通貨に対応していません)。既存の Payment Intents のシステムがある場合は、eps
を決済手段タイプのリストに追加します。
curl https://api.stripe.com/v1/payment_intents \
-u "sk_test_BQokikJOvBiI2HlWgH4olfQ2
:" \
-d amount=1099 \
-d currency=eur \
-d "payment_method_types[]"=eps
クライアント側
クライアントで、サーバの PaymentIntent をリクエストし、その client secret を保存します。
class CheckoutViewController: UIViewController {
var paymentIntentClientSecret: String?
func startCheckout() {
}
}
アプリで顧客の氏名を収集します。
class CheckoutViewController: UIViewController {
private let nameField: UITextField = UITextField()
override func viewDidLoad() {
super.viewDidLoad()
nameField.textContentType = .name
nameField.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(nameField)
}
}
作成した PaymentIntent から client secret を取得し、請求先情報を使用して STPPaymentMethodBillingDetails を作成し、STPPaymentHandler confirmPayment を呼び出します。これにより、Webview が表示され、顧客はそこで支払いを完了できます。完了後、支払い結果とともに、完了ブロックが呼び出されます。
let paymentIntentParams = STPPaymentIntentParams(clientSecret: paymentIntentClientSecret)
let billingDetails = STPPaymentMethodBillingDetails()
billingDetails.name = nameField.text
let eps = STPPaymentMethodEPSParams()
let paymentMethodParams = STPPaymentMethodParams(eps: eps, billingDetails: billingDetails, metadata: nil)
paymentIntentParams.paymentMethodParams = paymentMethodParams
STPPaymentHandler.shared().confirmPayment(paymentIntentParams,
with: self)
{ (handlerStatus, paymentIntent, error) in
switch handlerStatus {
case .succeeded:
case .canceled:
case .failed:
@unknown default:
fatalError()
}
}