Zum Inhalt springen

PaymentSheet

PaymentSheet erfasst Zahlungsdetails und bestätigt den Intent in einer einzigen Darstellung. Wenn Sie eine zunächst vorgemerkte Karte und einen späteren Bestätigungsschritt benötigen, verwenden Sie PaymentFlow.

Bild von Gyazo

Verwenden Sie einen PaymentIntent für eine sofortige Zahlung oder einen SetupIntent, um eine Zahlungsmethode für später zu speichern. Erstellen Sie diese Objekte auf Ihrem Server. Siehe Serverintegration.

Plattformunterstützung

Plattform PaymentSheet
iOS Natives Stripe-PaymentSheet
Android Natives Stripe-PaymentSheet
Web Karten-Modal von stripe-pwa-elements

Das Web rendert kein natives PaymentSheet. Im Web verwendet createPaymentSheet paymentIntentClientSecret und das optionale withZipCode. Die aktuelle Web-Implementierung unterstützt keine SetupIntents. Ausschließlich native Optionen wie defaultBillingDetails, shippingDetails, billingDetailsCollectionConfiguration, enableApplePay, enableGooglePay, style und returnURL werden ignoriert.

1. createPaymentSheet

Rufen Sie für den Client sichere Secrets von Ihrem Backend ab und rufen Sie anschließend createPaymentSheet auf. Das Plugin kommuniziert nicht mit der geheimen Stripe-API. Ersetzen Sie /your-intent-endpoint im Beispiel durch die Backend-URL aus Serverintegration.

Übergeben Sie unter iOS und Android entweder paymentIntentClientSecret oder setupIntentClientSecret. Übergeben Sie im Web paymentIntentClientSecret. customerId und customerEphemeralKeySecret sind gemeinsam optional. Wenn Sie customerId setzen, müssen Sie auch customerEphemeralKeySecret setzen. Ein PaymentIntent ohne Customer ist gültig. Siehe die Demo-Struktur intent/without-customer unter Serverintegration.

import { PaymentSheetEventsEnum, 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.createPaymentSheet({
  paymentIntentClientSecret: paymentIntent,
  customerId: customer,
  customerEphemeralKeySecret: ephemeralKey,
  merchantDisplayName: 'rdlabo',
});

method createPaymentSheet(...)

Erstellt und konfiguriert eine PaymentSheet-Instanz. Vor
presentPaymentSheet() dieses Promise oder das Ereignis Loaded abwarten.

createPaymentSheet(options: CreatePaymentSheetOption) => Promise<void>

interface CreatePaymentSheetOption

Eigenschaft Typ Beschreibung Standard Seit
paymentIntentClientSecret string Client Secret des zu bestätigenden PaymentIntent. Genau einen der Werte paymentIntentClientSecret oder setupIntentClientSecret angeben. 3.0.0
setupIntentClientSecret string Client Secret des SetupIntent zum Speichern einer Zahlungsmethode. Genau einen der Werte paymentIntentClientSecret oder setupIntentClientSecret angeben. 3.0.0
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

Optionale native Einstellungen umfassen style (alwaysLight oder alwaysDark, nur iOS), enableApplePay mit applePayMerchantId, enableGooglePay, returnURL für 3D Secure unter iOS und Optionen zur Erfassung von Rechnungsdaten. withZipCode ist ausschließlich für das Web bestimmt. currencyCode ist erforderlich, wenn enableGooglePay bei einem SetupIntent true ist.

2. presentPaymentSheet

Rufen Sie presentPaymentSheet erst nach einem erfolgreichen createPaymentSheet auf.

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

Behandeln Sie Canceled als Schließen des Sheets durch den Kunden. Behandeln Sie Failed als Fehler. Keines der Ergebnisse autorisiert allein die Erfüllung einer Bestellung.

method presentPaymentSheet()

Zeigt das mit createPaymentSheet() erstellte PaymentSheet an und wird
mit dem Ergebnis für Abschluss, Abbruch oder Fehlschlag aufgelöst.

presentPaymentSheet() => Promise<{ paymentResult: PaymentSheetResultInterface; }>

type alias PaymentSheetResultInterface

PaymentSheetEventsEnum.Completed | PaymentSheetEventsEnum.Canceled | PaymentSheetEventsEnum.Failed

3. addListener

Registrieren Sie Ergebnis-Listener einmal beim Anwendungsstart, bevor Sie das Sheet anzeigen. Bevorzugen Sie nach der Neuerstellung einer Android-Activity Ereignisse gegenüber dem Promise. Siehe Ereignis-Listener.

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

enum PaymentSheetEventsEnum

Mitglied Wert
Loaded 'paymentSheetLoaded'
FailedToLoad 'paymentSheetFailedToLoad'
Completed 'paymentSheetCompleted'
Canceled 'paymentSheetCanceled'
Failed 'paymentSheetFailed'

Referenz

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

(async () => {
  await Stripe.addListener(PaymentSheetEventsEnum.Completed, () => {
    console.log('PaymentSheetEventsEnum.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 PaymentSheet with CreatePaymentSheetOption.
  await Stripe.createPaymentSheet({
    paymentIntentClientSecret: paymentIntent,
    customerId: customer,
    customerEphemeralKeySecret: ephemeralKey,
  });

  // present PaymentSheet and get result.
  const result = await Stripe.presentPaymentSheet();
  if (result.paymentResult === PaymentSheetEventsEnum.Completed) {
    // Update UI only. Fulfill orders from a verified server webhook.
  }
})();