1. Einführung
Aufgaben
Am Ende dieses Codelabs haben Sie eine minimal funktionsfähige Website mit einer funktionierenden Google Pay-Integration. In diesem Projekt wird ein Zahlungstoken abgerufen, das zur Verarbeitung an einen Zahlungsdienstleister gesendet werden kann.
Lerninhalte
- Google Pay API laden und konfigurieren
- Google Pay-Schaltfläche anzeigen und Klicks verarbeiten
- Zahlungstoken von Google Pay anfordern
Voraussetzungen
- Ein Texteditor Ihrer Wahl zum Bearbeiten von HTML- und JavaScript-Dateien.
- Der Webbrowser Google Chrome oder eine andere Möglichkeit zum Testen einer lokalen Website.
- Für die Produktion benötigen Sie ein Google Pay-
merchantId. Die Registrierung in der Google Pay & Wallet Console dauert nur eine Minute. Sie können sie also gleich erledigen.
Mit Firebase Studio nachvollziehen
2. HTML-Seite erstellen
Projektdateien erstellen
- Erstellen Sie auf Ihrem Computer einen Ordner mit dem Namen
gpay-web-101und darin zwei leere Textdateien mit den Namenindex.htmlundmain.js.Ihre Verzeichnisstruktur sollte so aussehen:gpay-web-101/ index.html main.js
- Öffnen Sie
index.htmlin Ihrer bevorzugten IDE und fügen Sie den folgenden Code hinzu:<!doctype html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Google Pay API for Web 101</title> </head> <body> <div id="gpay-container"></div> <p>Transaction info and errors will be logged to the console.</p> <script type="text/javascript" src="main.js"></script> <script async src="https://pay.google.com/gp/p/js/pay.js" onload="onGooglePayLoaded()"> </script> </body> </html>
Codeerklärung
- Der Seite wird ein leeres DIV mit der ID
gpay-containerhinzugefügt. Dieses DOM-Element ist das übergeordnete Element, dem die Google Pay-Schaltfläche hinzugefügt wird. Sie können dieses Element an einer geeigneten Stelle im Layout Ihrer Website platzieren. - Das
main.js-Script-Tag wird im DOM nach demgpay-container-Element platziert. Das ist erforderlich, damit das Container-DIV im DOM vorhanden ist, bevormain.jsdanach sucht. Außerdem ist das Skript synchron, damit es vor dem Laden vonpay.jsgeladen wird, da dieonGooglePayLoaded()-Methode vor dem Abschluss des Ladevorgangs vorhanden sein muss. Es gibt auch andere Möglichkeiten, denselben Effekt zu erzielen, die hier jedoch nicht behandelt werden. - Schließlich wird
pay.jsasynchron geladen undonGooglePayLoaded()alsonload-Handler konfiguriert. Diese Methode wird inmain.jsdefiniert.
3. Google Pay konfigurieren
Für eine Google Pay-Zahlungsanfrage ist ein Anfrageobjekt erforderlich. Das hier als baseGooglePayRequest definierte Objekt enthält die minimalen gemeinsamen Einstellungen für alle Anfragen. Je nach Anfrage werden zusätzliche Einstellungen hinzugefügt, die wir in diesem Codelab näher betrachten.
Fügen Sie der leeren Datei main.js die Google Pay-Konfigurationskonstanten hinzu:
//=============================================================================
// Configuration
//=============================================================================
// The DOM element that the Google Pay button will be rendered into
const GPAY_BUTTON_CONTAINER_ID = 'gpay-container';
// Update the `merchantId` and `merchantName` properties with your own values.
// Your real info is required when the environment is `PRODUCTION`.
const merchantInfo = {
merchantId: '12345678901234567890',
merchantName: 'Example Merchant'
};
// This is the base configuration for all Google Pay payment data requests.
const baseGooglePayRequest = {
apiVersion: 2,
apiVersionMinor: 0,
allowedPaymentMethods: [
{
type: 'CARD',
parameters: {
allowedAuthMethods: [
"PAN_ONLY", "CRYPTOGRAM_3DS"
],
allowedCardNetworks: [
"AMEX", "DISCOVER", "INTERAC", "JCB", "MASTERCARD", "VISA"
]
},
tokenizationSpecification: {
type: 'PAYMENT_GATEWAY',
parameters: {
gateway: 'example',
gatewayMerchantId: 'exampleGatewayMerchantId'
}
}
}
],
merchantInfo
};
// Prevent accidental edits to the base configuration. Mutations will be
// handled by cloning the config using deepCopy() and modifying the copy.
Object.freeze(baseGooglePayRequest);
Codeerklärung
- Legen Sie die konstante Variable
GPAY_BUTTON_CONTAINER_IDauf die ID des DOM-Elements fest, das auf der HTML-Seite als übergeordneter Container für die Google Pay-Schaltfläche verwendet wird. - Erstellen Sie das Konfigurationsobjekt
baseGooglePayRequestmit den relevanten Einstellungen für Ihre Anwendung. Die einzelnen Eigenschaften und Werte finden Sie in der Referenzdokumentation. Die in diesem Beispiel gezeigten Werte entsprechen möglicherweise nicht genau Ihren Anforderungen. Prüfen Sie sie daher sorgfältig. - Aktualisieren Sie die Properties
merchantIdundmerchantNamemit Ihren eigenen Werten. Diese Felder sind optional, wenn die UmgebungTESTist.
Ressourcen
- Blogpost: Sie möchten einen reibungsloseren Bezahlvorgang mit Google Pay? Zahlungsoptionen konfigurieren
- API-Referenz: Dokumentation zu Anfrageobjekten der Google Pay API
- API-Referenz: Weitere Informationen zu den zulässigen Autorisierungsmethoden, zulässigen Kartennetzwerken und Tokenisierungsspezifikationen, einschließlich des richtigen Gateway-Werts, finden Sie unter
PaymentMethod.
4. Zahlungsclient hinzufügen
Ein Zahlungsclient wird verwendet, um Zahlungsanfragen zu stellen und Rückrufe zu registrieren. In diesem Codelab werden nur Zahlungsanfragen gestellt. Außerdem können Sie PaymentDataCallbacks so konfigurieren, dass Änderungen an Zahlungsdaten oder Autorisierungen berücksichtigt werden. Diese weiterführenden Themen werden in diesem Codelab jedoch nicht behandelt.
Fügen Sie diesen Clientcode am Ende von main.js ein:
//=============================================================================
// Google Payments client singleton
//=============================================================================
let paymentsClient = null;
function getGooglePaymentsClient() {
if (paymentsClient === null) {
paymentsClient = new google.payments.api.PaymentsClient({
environment: 'TEST',
merchantInfo,
// todo: paymentDataCallbacks (codelab pay-web-201)
});
}
return paymentsClient;
}
Codeerklärung
- Die
paymentsClient-Variable enthält die Instanz für den Client, sobald sie erstellt wurde. Auf die Variable wird nicht direkt über unseren Code zugegriffen, sondern immer über die MethodegetGooglePaymentsClient(). - Die Methode
getGooglePaymentsClient()prüft, ob ein Client bereits instanziiert wurde, und gibt diese Instanz zurück. Wenn noch keine Instanz erstellt wurde, wird eine erstellt, gespeichert und zurückgegeben. Mit dieser Methode wird dafür gesorgt, dass während der gesamten Lebensdauer dieses Skripts nur eine Instanz erstellt und verwendet wird. - Zum Instanziieren eines Clients wird die Methode
PaymentsClient()aufgerufen. In diesem Beispiel teilen wir dem Client mit, dass wir uns in einerTEST-Umgebung befinden. Die Alternative istPRODUCTION.TESTist jedoch der Standardwert und kann weggelassen werden.
5. Helfer hinzufügen
Die folgenden Hilfsfunktionen werden später im Skript verwendet und wurden nur hinzugefügt, um die Lesbarkeit und Wartbarkeit des Codes zu verbessern.
Hängen Sie die Hilfsfunktionen an das Ende von main.js an:
//=============================================================================
// Helpers
//=============================================================================
const deepCopy = (obj) => JSON.parse(JSON.stringify(obj));
function renderGooglePayButton() {
const button = getGooglePaymentsClient().createButton({
onClick: onGooglePaymentButtonClicked
});
document.getElementById(GPAY_BUTTON_CONTAINER_ID).appendChild(button);
}
Codeerklärung
deepCopy()ist ein Dienstprogramm, mit dem mithilfe der JSON-Serialisierung und ‑Deserialisierung eine vollständige Kopie des bereitgestellten Objekts erstellt wird. So können Sie Objekte ganz einfach klonen, ohne sich um gemeinsame Referenzen kümmern zu müssen.renderGooglePayButton()ist ein Dienstprogramm, mit dem die BibliotheksmethodecreateButton()aufgerufen wird, um die Google Pay-Schaltfläche zu präsentieren. Das übergebene Argument ist eine Reihe von Optionen, die das Verhalten der Schaltfläche definieren, z. B. die Registrierung der FunktiononGooglePaymentButtonClicked()zur Verarbeitung von Schaltflächenklicks.
6. Event-Handler hinzufügen
In diesem Skript konfigurieren wir zwei Event-Handler. Die erste wird aufgerufen, wenn die pay.js-Bibliothek geladen wurde, und die zweite, wenn auf die Google Pay-Schaltfläche geklickt wird.
Hängen Sie die Event-Handler an das Ende von main.js an:
//=============================================================================
// Event Handlers
//=============================================================================
function onGooglePayLoaded() {
const req = deepCopy(baseGooglePayRequest);
getGooglePaymentsClient()
.isReadyToPay(req)
.then(function(res) {
if (res.result) {
renderGooglePayButton();
} else {
console.log("Google Pay is not ready for this user.");
}
})
.catch(console.error);
}
function onGooglePaymentButtonClicked() {
// Create a new request data object for this request
const req = {
...deepCopy(baseGooglePayRequest),
transactionInfo: {
countryCode: 'US',
currencyCode: 'USD',
totalPriceStatus: 'FINAL',
totalPrice: (Math.random() * 999 + 1).toFixed(2),
},
// todo: callbackIntents (codelab gpay-web-201)
};
// Write request object to console for debugging
console.log(req);
getGooglePaymentsClient()
.loadPaymentData(req)
.then(function (res) {
// Write response object to console for debugging
console.log(res);
// @todo pass payment token to your gateway to process payment
// @note DO NOT save the payment credentials for future transactions
paymentToken = res.paymentMethodData.tokenizationData.token;
})
.catch(console.error);
}
Codeerklärung
onGooglePayLoaded()wird aufgerufen, wenn das Laden despay.js-Scripts abgeschlossen ist, wie in der HTML-Datei definiert. DieisReadyToPay()-Methode wird aufgerufen, um zu ermitteln, ob die Google Pay-Schaltfläche angezeigt werden soll. Wenn der Kunde bereit ist zu bezahlen (d. h. er hat eine Zahlungsart zu seinem Google Wallet hinzugefügt), wird die Google Pay-Schaltfläche gerendert.onGooglePaymentButtonClicked()wird aufgerufen, wenn auf den Google Pay-Button geklickt wird. Mit dieser Methode wird die BibliotheksmethodeloadPaymentData()aufgerufen, mit der ein Zahlungstoken abgerufen wird. Sobald Sie das Zahlungstoken haben, senden Sie es zur Verarbeitung der Transaktion an Ihr Zahlungs-Gateway.transactionInfobeschreibt die Transaktion, die mit diesem Klick auf die Schaltfläche verarbeitet werden soll.
7. Fazit
Sie haben dieses Codelab abgeschlossen. Sie haben gelernt, wie Sie die Google Pay API in eine Website einbinden.
Projekt ausführen
Mit Google Chrome testen
Öffnen Sie index.html im Webbrowser Google Chrome über das Hauptmenü von Chrome mit Datei > Datei öffnen…. Chrome führt main.js aus, wenn das Projekt auf diese Weise geöffnet wird. In anderen Webbrowsern ist die Ausführung von JavaScript möglicherweise nicht zulässig.
– oder –
Mit einem lokalen Webserver testen
Wenn Sie Python installiert haben, führen Sie python3 -m http.server über eine Terminalaufforderung im Stammordner pay-web-101 aus.
$ cd /your/path/to/pay-web-101
$ python3 -m http.server
Serving HTTP on :: port 8000 (http://[::]:8000/) ...
Rufen Sie dann Ihre Website unter http://localhost:8000 auf.
So geht es weiter
- Google for Web 201: Advanced
- Google Pay-Schaltfläche anpassen
- Checkliste für die Integration ansehen
Zusätzliche Ressourcen
- Tauschen Sie sich auf Discord im Kanal#payments aus.
- @GooglePayDevs auf X folgen
- Videos zu Google Pay auf YouTube ansehen