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.
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
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.
}
})();
