Zum Inhalt springen

PaymentFlow

PaymentFlow trennt Erfassung und Bestätigung. presentPaymentFlow erfasst die Zahlungsmethode und gibt eine vorgemerkte Karte zurück. confirmPaymentFlow bestätigt den Intent später, üblicherweise nach einer Übersichtsseite.

Bild von Gyazo

Verwenden Sie einen PaymentIntent oder einen SetupIntent. Erstellen Sie diese Objekte auf Ihrem Server. Siehe Serverintegration.

Plattformunterstützung

Plattform PaymentFlow
iOS Nativer PaymentSheet.FlowController
Android Nativer PaymentSheet.FlowController
Web Karten-Modal von stripe-pwa-elements

Das Web unterstützt paymentIntentClientSecret oder setupIntentClientSecret sowie das optionale withZipCode. Ausschließlich native Optionen wie defaultBillingDetails, shippingDetails, billingDetailsCollectionConfiguration, enableApplePay, enableGooglePay, style und returnURL werden im Web ignoriert.

1. createPaymentFlow

Rufen Sie für den Client sichere Secrets von Ihrem Backend ab und rufen Sie anschließend createPaymentFlow auf. Ersetzen Sie /your-intent-endpoint im Beispiel durch die Backend-URL aus Serverintegration. Übergeben Sie entweder paymentIntentClientSecret oder setupIntentClientSecret. customerId und customerEphemeralKeySecret sind gemeinsam optional. Wenn Sie customerId setzen, müssen Sie auch customerEphemeralKeySecret setzen.

import { PaymentFlowEventsEnum, Stripe } from '@capacitor-community/stripe';

// `/your-intent-endpoint` durch Ihr Backend aus der Anleitung zur Serverintegration ersetzen.
const response = await fetch('/your-intent-endpoint', {
  method: 'POST',
});
if (!response.ok) {
  throw new Error(`Intent request failed: ${response.status}`);
}
const { paymentIntent, ephemeralKey, customer } = (await response.json()) as {
  paymentIntent: string;
  ephemeralKey: string;
  customer: string;
};

await Stripe.createPaymentFlow({
  paymentIntentClientSecret: paymentIntent,
  customerEphemeralKeySecret: ephemeralKey,
  customerId: customer,
  merchantDisplayName: 'rdlabo',
});

method createPaymentFlow(...)

Erstellt eine PaymentFlow-Instanz. PaymentFlow verwenden, wenn die App
zunächst Zahlungsdaten erfassen und sie in einem späteren Schritt bestätigen muss.

createPaymentFlow(options: CreatePaymentFlowOption) => Promise<void>

interface CreatePaymentFlowOption

Eigenschaft Typ Beschreibung Standard Seit
paymentIntentClientSecret string Client Secret des zu bestätigenden PaymentIntent. Genau einen der Werte paymentIntentClientSecret oder setupIntentClientSecret angeben. 3.0.2
setupIntentClientSecret string Client Secret des SetupIntent zum Speichern einer Zahlungsmethode. Genau einen der Werte paymentIntentClientSecret oder setupIntentClientSecret angeben. 3.0.2
defaultBillingDetails DefaultBillingDetails Rechnungsdaten zur Vorbelegung von PaymentSheet. Nur iOS und Android. https://docs.stripe.com/payments/mobile/collect-addresses?payment-ui=mobile&platform=ios#set-default-billing-details 7.2.0
shippingDetails AddressDetails Versanddaten zur Vorbelegung von PaymentSheet. Nur Android; unter iOS stattdessen das Adresselement von Stripe verwenden. https://docs.stripe.com/payments/mobile/collect-addresses?payment-ui=mobile&platform=android#prefill-addresses 7.2.0
billingDetailsCollectionConfiguration BillingDetailsCollectionConfiguration Legt fest, welche Rechnungsdaten PaymentSheet erfasst. Nur iOS und Android. https://docs.stripe.com/payments/mobile/collect-addresses?payment-ui=mobile&platform=ios#customize-billing-details-collection 7.2.0
customerEphemeralKeySecret string Vom Server zurückgegebenes Secret des temporären Kundenschlüssels. Zusammen mit customerId verwenden; nicht nur einen der beiden Werte angeben. 3.0.0
customerId string Dem customerEphemeralKeySecret zugeordnete Stripe-Kundenkennung. 3.0.0
enableApplePay boolean Aktiviert Apple Pay im nativen PaymentSheet. Nur iOS. false 3.3.0
applePayMerchantId string Für die App konfigurierte Apple-Händlerkennung. Erforderlich, wenn enableApplePay true ist; andernfalls wird sie ignoriert. 3.3.0
enableGooglePay boolean Aktiviert Google Pay im nativen PaymentSheet. Nur Android. false 3.2.0
GooglePayIsTesting boolean Verwendet die Google-Pay-Testumgebung. Nur Android. false 3.2.0
countryCode string Von Apple Pay oder Google Pay verwendeter zweibuchstabiger ISO-3166-1-Ländercode. Wird ignoriert, wenn keine der beiden Wallets aktiviert ist. "US" 3.2.0
merchantDisplayName string Im nativen PaymentSheet angezeigter Händlername. "App Name" 3.0.0
returnURL string Benutzerdefiniertes URL-Schema für die Rückkehr zur App nach einer Authentifizierung mit Weiterleitung. Nur iOS. "" 3.0.0
paymentMethodLayout 'automatic' | 'horizontal' | 'vertical' Layout für die Anzeige von Zahlungsmethoden in PaymentSheet auf iOS und Android. "automatic" 7.2.2
style 'alwaysLight' | 'alwaysDark' Abweichende Darstellungseinstellungen für das native PaymentSheet. Nur iOS. undefined 3.0.0
withZipCode boolean Zeigt im Web-Kartenformular das Postleitzahlfeld an. Nur Web. true 3.6.0
currencyCode string Von Google Pay verwendeter dreibuchstabiger ISO-4217-Währungscode. Erforderlich, wenn Google Pay für einen SetupIntent aktiviert ist. "USD" 7.1.0

2. presentPaymentFlow

Rufen Sie presentPaymentFlow erst nach einem erfolgreichen createPaymentFlow auf. Die zurückgegebene cardNumber ist ein maskierter Wert. Der Intent ist noch nicht bestätigt.

const presentResult = await Stripe.presentPaymentFlow();
console.log(presentResult); // { cardNumber: "●●●● ●●●● ●●●● ****" }

method presentPaymentFlow()

Zeigt den mit createPaymentFlow() erstellten PaymentFlow an und wird
mit den letzten vier Ziffern der ausgewählten Karte aufgelöst.

presentPaymentFlow() => Promise<{ cardNumber: string; }>

Wenn der Kunde abbricht, wird das Promise zurückgewiesen oder das Ereignis Canceled ausgelöst. Rufen Sie confirmPaymentFlow erst nach Created oder einem erfolgreichen Ergebnis von presentPaymentFlow auf.

3. confirmPaymentFlow

const confirmResult = await Stripe.confirmPaymentFlow();
if (confirmResult.paymentResult === PaymentFlowEventsEnum.Completed) {
  // Nur die UI aktualisieren. Den Intent vor der Leistungserbringung per Webhook bestätigen.
}

method confirmPaymentFlow()

Bestätigt die von presentPaymentFlow() erfassten Zahlungsdaten.

confirmPaymentFlow() => Promise<{ paymentResult: PaymentFlowResultInterface; }>

type alias PaymentFlowResultInterface

PaymentFlowEventsEnum.Completed | PaymentFlowEventsEnum.Canceled | PaymentFlowEventsEnum.Failed

Behandeln Sie Canceled als Abbruch und Failed als Fehler. Keines der Ergebnisse autorisiert allein die Erfüllung einer Bestellung.

4. addListener

Registrieren Sie Ergebnis-Listener einmal beim Anwendungsstart. Bevorzugen Sie nach der Neuerstellung einer Android-Activity Ereignisse gegenüber dem Promise, einschließlich des Ereignisses Created. Siehe Ereignis-Listener.

await Promise.all([
  Stripe.addListener(PaymentFlowEventsEnum.Created, (info) => {
    console.log(info.cardNumber);
  }),
  Stripe.addListener(PaymentFlowEventsEnum.Completed, () => {
    console.log('PaymentFlowEventsEnum.Completed');
  }),
  Stripe.addListener(PaymentFlowEventsEnum.Canceled, () => {
    console.log('PaymentFlowEventsEnum.Canceled');
  }),
  Stripe.addListener(PaymentFlowEventsEnum.Failed, (error) => {
    console.log('PaymentFlowEventsEnum.Failed', error);
  }),
]);

enum PaymentFlowEventsEnum

Mitglied Wert
Loaded 'paymentFlowLoaded'
FailedToLoad 'paymentFlowFailedToLoad'
Opened 'paymentFlowOpened'
Created 'paymentFlowCreated'
Completed 'paymentFlowCompleted'
Canceled 'paymentFlowCanceled'
Failed 'paymentFlowFailed'

Referenz

payment-flow.ts
import { PaymentFlowEventsEnum, Stripe } from '@capacitor-community/stripe';

(async () => {
  await Stripe.addListener(PaymentFlowEventsEnum.Completed, () => {
    console.log('PaymentFlowEventsEnum.Completed');
  });

  // Replace `/your-intent-endpoint` with your backend from Server Integration.
  const response = await fetch('/your-intent-endpoint', {
    method: 'POST',
  });
  if (!response.ok) {
    throw new Error(`Intent request failed: ${response.status}`);
  }
  const { paymentIntent, ephemeralKey, customer } = (await response.json()) as {
    paymentIntent: string;
    ephemeralKey: string;
    customer: string;
  };

  // Prepare PaymentFlow with CreatePaymentFlowOption.
  await Stripe.createPaymentFlow({
    paymentIntentClientSecret: paymentIntent,
    // setupIntentClientSecret: setupIntent,
    customerEphemeralKeySecret: ephemeralKey,
    customerId: customer,
  });

  // Collect payment details. The Intent is not confirmed yet.
  const presentResult = await Stripe.presentPaymentFlow();
  console.log(presentResult); // { cardNumber: "●●●● ●●●● ●●●● ****" }

  // Confirm PaymentFlow. Completed.
  const confirmResult = await Stripe.confirmPaymentFlow();
  if (confirmResult.paymentResult === PaymentFlowEventsEnum.Completed) {
    // Update UI only. Fulfill orders from a verified server webhook.
  }
})();