# Google Pay
So nehmen Sie Zahlungen per Google Pay an.
Informationen zu Transaktionsgebühren für Zahlungsmethoden finden Sie unter [Preisdetails](https://stripe.com/pricing/local-payment-methods).
Google Pay ermöglicht es Kund/innen, Zahlungen in Ihrer App oder auf Ihrer Website mit jeder im Google-Konto (z. B. für Google Play, YouTube, Chrome oder ein Android-Gerät) gespeicherten Kredit- oder Debitkarte vorzunehmen. Verwenden Sie die Google Pay API, um eine beliebige im Google-Konto Ihres/Ihrer Kund/in gespeicherte Kredit- oder Debitkarte anzufordern.
Google Pay ist vollständig kompatibel mit den Produkten und Funktionen von Stripe (z. B. wiederkehrende Zahlungen), sodass Sie es nach Möglichkeit anstelle eines herkömmlichen Zahlungsformulars verwenden können. So können Sie Zahlungen für physische Waren, Spenden, *Abonnements* (A Subscription represents the product details associated with the plan that your customer subscribes to. Allows you to charge the customer on a recurring basis) usw. annehmen.
> #### Google Pay-Nutzungsbedingungen
>
> Durch die Nutzung von Google Pay stimmen Sie den [Nutzungsbedingungen](https://payments.developers.google.com/terms/sellertos) von Google zu.
#### Eigenschaften der Zahlungsmethode
- **Kundenstandorte**
Weltweit, außer Indien
- **Transaktionswährung**
Siehe [unterstützte Transaktionsährungen](https://docs.stripe.com/currencies.md#presentment-currencies)
- **Zahlungsbestätigung**
Kundenseitig initiiert
- **Art der Zahlungsmethode**
Wallet
- **Wiederkehrende Zahlungen**
Ja
- **Auszahlungsintervall**
Es gilt das Standard-Auszahlungsintervall
- **Connect-Support**
Ja
- **Unterstützung bei angefochtenen Zahlungen**
[Ja](https://docs.stripe.com/google-pay.md#disputed-payments)
- **Unterstützung für manuelle Erfassung**
Ja
- **Komplette/anteilige Rückerstattungen**
[Ja/Ja](https://docs.stripe.com/google-pay.md#refunds)
#### Geschäftsstandorte
Bei Stripe-Konten weltweit (mit Ausnahme von Indien) sind Google Pay-Zahlungen mit Abrechnung in lokaler Währung möglich.
#### Produktsupport
- Connect
- Checkout
- Payment Links
- Elements
- Subscriptions
- Invoicing
## Nutzung von Stripe und Google Pay im Vergleich zum Google Play-Abrechnungssystem
In diesem Leitfaden wird erläutert, wie Sie Ihre App so konfigurieren, dass Google Pay für physische Waren, Dienstleistungen und andere berechtigte Artikel akzeptiert wird. Stripe verarbeitet diese Zahlungen und Sie zahlen lediglich die [Bearbeitungsgebühren](https://stripe.com/pricing) von Stripe.
Für digitale Produkte, Inhalte und Abonnements, die in den USA oder im Europäischen Wirtschaftsraum (EWR) verkauft werden, kann Ihre Android-App direkte In-App-Zahlungen akzeptieren, die über einen Drittanbieter-Zahlungsabwickler wie Stripe erfolgen. Sie können diese Zahlungs-Nutzeroberflächen verwenden:
- [Mobiles Zahlungselement](https://docs.stripe.com/payments/mobile.md), um Zahlungen direkt in der App zu akzeptieren
- [Stripe Checkout](https://docs.stripe.com/mobile/digital-goods/checkout.md), um Kundinnen und Kunden zu einer von Stripe gehosteten Zahlungsseite weiterzuleiten
- [Payment Links](https://docs.stripe.com/mobile/digital-goods/payment-links.md) für eine begrenzte Anzahl von Produkten und Preisen
Weitere Informationen darüber, für welche Käufe das Abrechnungssystem von Google Play verwendet werden muss, finden Sie in den [Entwicklerbedingungen](https://support.google.com/googleplay/android-developer/answer/10281818) von Google Play.
# React Native
Das React Native SDK von Stripe ist der schnellste und einfachste Weg, um Google Pay in Ihren React Native-Apps zu akzeptieren. Die Komponente [PlatformPayButton](https://stripe.dev/stripe-react-native/api-reference/index.html#PlatformPayButton) umschließt die erforderliche Nutzeroberfläche von Google, und Sie können die Methoden `confirmPlatformPayPayment` und `createPlatformPayPaymentMethod` verwenden, um nahtlos Zahlungen in Ihrer App mit minimaler Konfiguration zu erfassen oder zu erstellen.
> Wenn Sie React Native und Expo verwenden, wird Google Pay von Expo Go nicht unterstützt. Um Google Pay mit Expo zu verwenden, müssen Sie einen [Entwicklungs-Build](https://docs.expo.dev/get-started/set-up-your-environment/?mode=development-build&platform=android) erstellen. Wenn Sie bereits ein Expo Go-Projekt haben, können Sie es [zu einem Entwicklungs-Build migrieren](https://docs.expo.dev/develop/development-builds/expo-go-to-dev-build/).
## Stripe einrichten [Serverseitig] [Clientseitig]
### Serverseitig
Diese Integration erfordert Endpoints auf Ihrem Server, die mit der Stripe-API kommunizieren können. Nutzen Sie unsere offiziellen Bibliotheken für den Zugriff auf die Stripe-API von Ihrem Server aus:
#### Ruby
```bash
# Available as a gem
sudo gem install stripe
```
```ruby
# If you use bundler, you can add this line to your Gemfile
gem 'stripe'
```
### Clientseitig
Das [React Native SDK](https://github.com/stripe/stripe-react-native) ist Open Source und vollständig dokumentiert. Intern werden [native iOS](https://github.com/stripe/stripe-ios) und [Android](https://github.com/stripe/stripe-android) SDKs verwendet. Um das React Native SDK von Stripe zu installieren, führen Sie einen der folgenden Befehle im Verzeichnis Ihres Projekts aus (je nachdem, welchen Paket-Manager Sie verwenden):
#### yarn
```bash
yarn add @stripe/stripe-react-native
```
#### npm
```bash
npm install @stripe/stripe-react-native
```
Installieren Sie als Nächstes einige weitere erforderliche Abhängigkeiten:
- Für iOS wechseln Sie in das Verzeichnis **ios** und führen Sie `pod install` aus, um sicherzustellen, dass Sie auch die erforderlichen nativen Dependencies installiert haben.
- Für Android müssen keine Abhängigkeiten mehr installiert werden.
> Wir empfehlen Ihnen, die [offizielle Anleitung zu TypeScript](https://reactnative.dev/docs/typescript#adding-typescript-to-an-existing-project) zu befolgen, um TypeScript zu unterstützen.
### Stripe Initialisierung
Um Stripe in Ihrer React Native-App zu initialisieren, umschließen Sie entweder Ihren Zahlungsbildschirm mit der Komponente `StripeProvider` oder verwenden Sie die Initialisierungsmethode `initStripe`. Nur der [veröffentlichbare API-Schlüssel](https://docs.stripe.com/keys.md#obtain-api-keys) in `publishableKey` ist erforderlich. Das folgende Beispiel zeigt, wie Stripe mithilfe der Komponente `StripeProvider` initialisiert wird.
```jsx
import { useState, useEffect } from 'react';
import { StripeProvider } from '@stripe/stripe-react-native';
function App() {
const [publishableKey, setPublishableKey] = useState('');
const fetchPublishableKey = async () => {
const key = await fetchKey(); // fetch key from your server here
setPublishableKey(key);
};
useEffect(() => {
fetchPublishableKey();
}, []);
return (
{/* Your app code here */}
);
}
```
> Verwenden Sie Ihre API-[Testschlüssel](https://docs.stripe.com/keys.md#obtain-api-keys) beim Testen und Entwickeln Ihrer App und Ihre [Live-Modus](https://docs.stripe.com/keys.md#test-live-modes)-Schlüssel beim Veröffentlichen Ihrer App.
## Google Pay aktivieren
Um Google Pay zu verwenden, aktivieren Sie zuerst die Google Pay API, indem Sie dem Tag `` Ihrer Datei **AndroidManifest.xml** Folgendes hinzufügen:
```xml
...
```
Weitere Informationen finden Sie in der [Google Pay API](https://developers.google.com/pay/api/android/guides/setup) für Android.
## Erstellen Sie ein PaymentIntent [Serverseitig]
Erstellen Sie zunächst auf Ihrem Server einen `PaymentIntent` und geben Sie den zu erhebenden Betrag und die Währung an:
```curl
curl https://api.stripe.com/v1/payment_intents \
-u "<>:" \
-d amount=1099 \
-d currency=usd
```
Ein PaymentIntent enthält ein *Client-Geheimnis* (The client secret is a unique key returned from Stripe as part of a PaymentIntent. This key lets the client access important fields from the PaymentIntent (status, amount, currency) while hiding sensitive ones (metadata, customer)). Sie können das Client-Geheimnis in Ihrer React Native-App verwenden, um den Zahlungsvorgang sicher abzuschließen, anstatt das gesamte PaymentIntent-Objekt zurückzugeben. Fordern Sie in Ihrer App einen PaymentIntent von Ihrem Server an und speichern Sie dessen Client-Geheimnis.
## Google Pay initialisieren [Clientseitig]
Prüfen Sie zunächst, ob das Gerät Google Pay unterstützt, indem Sie `isPlatformPaySupported` aufrufen.
```javascript
import { usePlatformPay } from '@stripe/stripe-react-native';
function PaymentScreen() {
const { isPlatformPaySupported } = usePlatformPay();
React.useEffect(() => {
(async function () {
if (!(await isPlatformPaySupported({ googlePay: {testEnv: true} }))) {
Alert.alert('Google Pay is not supported.');
return;
}
})();
}, []);
...
return (
...
);
}
```
## Google Pay-Formular anzeigen [Clientseitig]
Wenn Sie wissen, dass Google Pay verfügbar ist und Ihre App ein Client-Geheimnis für `PaymentIntent` oder `SetupIntent` erhalten hat, rufen Sie `confirmPlatformPayPayment` auf. Wenn Sie einen `SetupIntent` bestätigen, verwenden Sie stattdessen `confirmPlatformPaySetupIntent`.
```javascript
import {PlatformPayButton, usePlatformPay} from '@stripe/stripe-react-native';
function PaymentScreen() {
const {
isPlatformPaySupported,
confirmPlatformPayPayment,
} = usePlatformPay();
React.useEffect(() => {
... // see above
}, []);
const fetchPaymentIntentClientSecret = async () => {
// Fetch payment intent created on the server, see above
const response = await fetch(`${API_URL}/create-payment-intent`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
currency: 'usd',
}),
});
const { clientSecret } = await response.json();
return clientSecret;
};
const pay = async () => {
const clientSecret = await fetchPaymentIntentClientSecret();
const { error, paymentIntent } = await confirmPlatformPayPayment(
clientSecret,
{
googlePay: {
testEnv: true,
merchantName: 'My merchant name',
merchantCountryCode: 'US',
currencyCode: 'USD',
billingAddressConfig: {
format: PlatformPay.BillingAddressFormat.Full,
isPhoneNumberRequired: true,
isRequired: true,
},
},
}
);
if (error) {
Alert.alert(error.code, error.message);
// Update UI to prompt user to retry payment (and possibly another payment method)
return;
}
Alert.alert('Success', 'The payment was confirmed successfully.');
console.log(JSON.stringify(paymentIntent, null, 2));
};
return (
);
}
```
## Optional: PaymentMethod erstellen [Clientseitig]
Wenn Sie Ihre Zahlung auf Ihrem Server bestätigen, können Sie Google Pay verwenden, um nur eine `PaymentMethod` zu erfassen, anstatt eine Zahlung zu bestätigen. Verwenden Sie die Methode `createPlatformPayPaymentMethod`, um diesen Aufruf durchzuführen:
```javascript
import {PlatformPayButton, usePlatformPay} from '@stripe/stripe-react-native';
function PaymentScreen() {
const {
isPlatformPaySupported,
createPlatformPayPaymentMethod,
} = usePlatformPay();
React.useEffect(() => {
... // see above
}, []);
const createPaymentMethod = async () => {
const { error, paymentMethod } = await createPlatformPayPaymentMethod({
googlePay: {
amount: 12,
currencyCode: 'USD',
testEnv: true,
merchantName: 'Test',
merchantCountryCode: 'US',
},
});
if (error) {
Alert.alert(error.code, error.message);
return;
} else if (paymentMethod) {
Alert.alert(
'Success',
`The payment method was created successfully. paymentMethodId: ${paymentMethod.id}`
);
}
};
return (
);
}
```
## Mit Google Pay live gehen
Befolgen Sie die [Anweisungen von Google](https://developers.google.com/pay/api/android/guides/test-and-deploy/request-prod-access), um den Produktionszugriff für Ihre App anzufordern. Wählen Sie den Integrationstyp **Gateway**, wenn Sie dazu aufgefordert werden, und stellen Sie Screenshots Ihrer App zur Überprüfung bereit.
Nachdem Ihre App genehmigt wurde, testen Sie Ihre Integration in der Produktion, indem Sie `testEnv: false` verwenden und Google Pay über einen signierten Release-Build Ihrer App starten. Denken Sie daran, Ihre [API-Schlüssel](https://docs.stripe.com/keys.md) im *Live-Modus* (Use this mode when you’re ready to launch your app. Card networks or payment providers process payments) zu verwenden. Sie können eine `PaymentIntent` mit [`capture_method` = `manual`](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-capture_method) verwenden, um eine Transaktion zu verarbeiten, ohne die Zahlung zu erfassen.
### Google Pay testen
Google bietet Ihnen die Möglichkeit, Zahlungen über seine [Testkartensuite](https://developers.google.com/pay/api/android/guides/resources/test-card-suite) zu testen. Sie können Stripe-[Testkarten](https://docs.stripe.com/testing.md) mit der Testsuite verwenden.
In einem Land, in dem Google Pay unterstützt wird, müssen Sie Google Pay mit einem physischen Android-Gerät anstelle eines simulierten Geräts testen. Melden Sie sich mit einer echten in Google Wallet gespeicherten Karte bei einem Google-Konto auf Ihrem Testgerät an.
## Zahlungsanfechtungen
Nutzer/innen müssen Zahlungen über ihre Google Pay-Konten authentifizieren, um das Risiko von Betrug oder nicht zugeordneten Zahlungen zu verringern. Nutzer/innen können Transaktionen jedoch weiterhin anfechten, nachdem sie die Zahlung abgeschlossen haben. Sie können Nachweise einreichen, um einer Zahlungsanfechtung direkt zu widersprechen. Die Zahlungsanfechtung ist identisch mit der bei Kartenzahlungen. Erfahren Sie, wie Sie mit [Anfechtungen umgehen](https://docs.stripe.com/disputes/responding.md).
### Haftungsverlagerung für Google Pay-Zahlungen
Google Pay unterstützt die [Haftungsverlagerung](https://docs.stripe.com/payments/3d-secure/authentication-flow.md#disputed-payments) weltweit. Dies gilt automatisch für Nutzer/innen von bei Stripe gehosteten Produkten und bei Verwendung von Stripe.js. Für Visa-Transaktionen außerhalb eines von Stripe gehosteten Produkts müssen Sie die Haftungsverlagerung in der Google Pay & Wallet-Konsole aktivieren. Gehen Sie dazu zu Ihrer ***Google Pay & Wallet Console***, wählen Sie ***Google Pay API*** in der Navigationsleiste auf der linken Seite und aktivieren Sie dann ***Fraud Liability Protection for Visa Device Tokens*** zum Schutz vor Haftungsverlagerung.
Es gibt drei Anwendungsfälle von Google Pay-Transaktionen:
1. Wenn Nutzer/innen über ihr Mobilgerät eine Karte zur Google Pay-App hinzufügen, wird diese als Device Primary Account Number (DPAN, Hauptkontonummer des Geräts) gespeichert und die Haftungsverlagerung wird standardmäßig unterstützt.
2. Wenn der/die Nutzer/in eine Karte zu Chrome oder einer Google-Anwendung (z. B. YouTube oder Play) hinzufügt, wird diese als Funding Primary Account Number (FPAN) gespeichert. Wenn Sie [3D Secure](https://docs.stripe.com/payments/3d-secure.md) verwenden, unterstützen wir die Haftungsumkehr weltweit für alle großen Netzwerke, einschließlich Visa. Sie können die [Stripe Radar-Regeln](https://docs.stripe.com/radar/rules.md#request-3d-secure) anpassen, um die Aktivierung von 3D Secure anzufordern.
3. Wenn der/die Nutzer/in Google Pay als Zahlungsmethode auf einer E-Commerce-Website oder in einer App auswählt, die mit Google Pay bezahlt, werden die Karten als E-Commerce-Token gespeichert, die die hinterlegten Karten darstellen. Weder die Haftungsverschiebung noch 3D Secure werden derzeit für E-Commerce-Token unterstützt.
Für Sigma-Nutzer/innen enthält die Tabelle `charges` das Feld `card_token_type`, das den Typ der Google Pay-Transaktion angibt. Eine FPAN-Transaktion legt den `card_token_type` auf `fpan` fest. DPAN- und E-Commerce-Token-Transaktionen legen den `card_token_type` auf `dpan_or_ecommerce_token` fest.
## Rückerstattungen
Sie können jede erfolgreiche Google Pay-Zahlung teilweise oder vollständig zurückerstatten. Das Rückerstattungsverfahren läuft genau wie bei Kartenzahlungen ab. Anweisungen zum Initiieren oder Verwalten von Rückerstattungen finden Sie unter [Zahlungen zurückerstatten und abbrechen](https://docs.stripe.com/refunds.md).