1. Wprowadzenie
Ten warsztat jest kontynuacją Google Pay API for Web 101: Basics i korzysta z kodu napisanego w tym warsztacie. Aby ukończyć to ćwiczenie, musisz najpierw ukończyć to.
Czego się nauczysz
- Jak dostosować przycisk Google Pay
- Jak rozpocząć proces płatności
- Jak potwierdzić stan autoryzacji płatności
- Jak obsługiwać zmiany adresu dostawy
- Jak postępować z kodami do wykorzystania
Czego potrzebujesz
- Edytor tekstu do edycji plików HTML i JavaScript.
- przeglądarka Google Chrome lub inny sposób testowania witryny lokalnej.
- W przypadku wersji produkcyjnej potrzebujesz Google Pay
merchantId
. Rejestracja w Konsoli usług Google Pay i Portfela Google zajmuje tylko minutę, więc warto to zrobić już teraz.
Obserwowanie Project IDX
2. Dostosowywanie przycisku
Oto krótki przegląd ButtonOptions
. Aby uzyskać bardziej szczegółowe wyjaśnienie, zapoznaj się z dokumentacją
Opcja | Niezbędność | Wartości |
onClick | Wymagane | Nazwa modułu obsługi zdarzenia JavaScript |
allowedPaymentMethods | Opcjonalny | |
buttonColor | Opcjonalny | domyślny, czarny, biały |
buttonLocale | Opcjonalny | 2-literowy kod ISO 639-1. |
buttonRadius | Opcjonalny | Od 0 do 100 |
buttonRootNode | Opcjonalny | HTMLDocument lub ShadowRoot |
buttonSizeMode | Opcjonalny | statyczne, wypełnienie |
buttonType | Opcjonalny | book, buy, checkout, donate, order, pay, plain, subscribe |
W pliku main.js
odszukaj metodę renderGooglePayButton()
i zastąp ją kodem podanym tutaj.
function renderGooglePayButton() {
const button = getGooglePaymentsClient().createButton({
buttonColor: 'default',
buttonType: 'buy',
buttonRadius: 4,
buttonLocale: 'en',
onClick: onGooglePaymentButtonClicked,
allowedPaymentMethods: baseGooglePayRequest.allowedPaymentMethods,
});
document.getElementById(GPAY_BUTTON_CONTAINER_ID).appendChild(button);
}
Wyjaśnienie kodu
- Metoda
createButton()
z biblioteki korzysta z argumentu konfiguracjiButtonOptions
, który pozwala określić wygląd i działanie przycisku.
3. Wywołania zwrotne dotyczące danych płatności
Klient płatności udostępnia mechanizm rejestrowania funkcji, które mają obsługiwać określone zdarzenia. Pierwszym jest autoryzacja płatności, a drugim zmiana danych do płatności.
- Znajdź w pliku
main.js
komentarz// todo: paymentDataCallbacks
i zastąp go tym kodem.paymentDataCallbacks: { onPaymentAuthorized: onPaymentAuthorized, onPaymentDataChanged: onPaymentDataChanged },
- Następnie odszukaj sekcję
Event Handlers
w plikumain.js
i dodaj na jej końcu podany niżej kod.function onPaymentAuthorized(paymentData) { // We'll fill this in later } function onPaymentDataChanged(intermediatePaymentData) { // We'll fill this in later }
- Na koniec znajdź komentarz
// todo: callbackIntents
w elementachmain.js
i zastąp go tym kodem. W tym laboratorium programistycznym zaimplementujemy wszystkie 4 zamiary.callbackIntents: [ 'PAYMENT_AUTHORIZATION', 'SHIPPING_ADDRESS', 'SHIPPING_OPTION', 'OFFER', ], shippingAddressRequired: true, shippingOptionRequired: true, shippingOptionParameters: { defaultSelectedOptionId: 'shipping-001', shippingOptions: [ { id: 'shipping-001', label: '$0.00: Free shipping', description: 'Free Shipping delivered in 5 business days.' }, { id: 'shipping-002', label: '$1.99: Standard shipping', description: 'Standard shipping delivered in 3 business days.' }, { id: 'shipping-003', label: '$1000: Express shipping', description: 'Express shipping delivered in 1 business day.' }, ], },
Wyjaśnienie kodu
- Właściwość
PaymentDataCallbacks
ma 2 właściwości podrzędne: jedną dla wywołania zwrotnego autoryzacji płatności i drugą dla wywołania zwrotnego zmiany danych płatności. - Jeśli implementujesz wywołania zwrotne,
onPaymentAuthorized
jest wymagany. To wywołanie zwrotne jest wywoływane, gdy listacallbackIntents
zawiera elementPAYMENT_AUTHORIZATION
w elementachPaymentDataRequest
. onPaymentDataChanged
jest opcjonalny. Ten wywoływany z powrotem kod jest wykonywany, gdy na liściecallbackIntents
znajduje się wartośćOFFER
,SHIPPING_ADDRESS
lubSHIPPING_OPTION
w elementachPaymentDataRequest
.- Aby wywołać oba wywołania zwrotne w ramach tego ćwiczenia z programowaniem, ustaw
callbackIntents
w funkcjiPaymentDataRequest
.
4. Autoryzacja płatności
Autoryzacja płatności służy do rozpoczęcia procesu płatności i potwierdzenia statusu autoryzacji płatności.
Znajdź w funkcji main.js
, którą dodano w ostatnim kroku, funkcję onPaymentAuthorized()
i zastąp ją tym kodem.
function onPaymentAuthorized(paymentData) {
return new Promise(function(resolve, reject) {
// Write the data to console for debugging
console.log("onPaymentAuthorized", paymentData);
// Do something here to pass token to your gateway
// To simulate the payment processing, there is a 70% chance of success
const paymentAuthorizationResult = (Math.random() > 0.3)
? {transactionState: 'SUCCESS'}
: {
transactionState: 'ERROR',
error: {
intent: 'PAYMENT_AUTHORIZATION',
message: 'Insufficient funds',
reason: 'PAYMENT_DATA_INVALID'
}
};
resolve(paymentAuthorizationResult);
});
}
Wyjaśnienie kodu
- Funkcja wywołania zwrotnego
onPaymentAuthorized()
jest wywoływana z argumentemPaymentData
i musi zwracać obietnicę. W tym przykładzie funkcja losowo wybiera, czy zwrócić wartość true czy false. W projekcie wykorzystasz tę możliwość do przetworzenia transakcji z bramą, używając tokena znalezionego wpaymentData
o godz.paymentData.paymentMethodData.tokenizationData.token
.
5. Zmiana danych karty
Dzięki funkcji Dynamiczne aktualizacje cen sprzedawcy mogą dynamicznie aktualizować opcje dostawy i informacje o transakcjach na podstawie wybranego adresu dostawy. Mogą także dynamicznie aktualizować informacje o transakcjach na podstawie wybranej opcji dostawy.
Znajdź w funkcji main.js
, którą dodano w ostatnim kroku, funkcję onPaymentDataChanged()
i zastąp ją tym kodem.
function onPaymentDataChanged(intermediatePaymentData) {
return new Promise(function(resolve, reject) {
let paymentDataRequestUpdate = {};
// Write the data to console for debugging
console.log("onPaymentDataChanged", intermediatePaymentData);
switch(intermediatePaymentData.callbackTrigger)
{
case "INITIALIZE":
// Handle initialize
break;
case "SHIPPING_ADDRESS":
// Read intermediatePaymentData.transactionInfo
// Read intermediatePaymentData.shippingAddress
// Update paymentDataRequestUpdate.newTransactionInfo
break;
case "SHIPPING_OPTION":
// Read intermediatePaymentData.transactionInfo
// Read intermediatePaymentData.shippingOptionData
// Update paymentDataRequestUpdate.newTransactionInfo
// Update paymentDataRequestUpdate.newShippingOptionParameters
break;
case "OFFER":
// Read intermediatePaymentData.offerData
// Read intermediatePaymentData.transactionInfo
// Update paymentDataRequestUpdate.newTransactionInfo
// Update paymentDataRequestUpdate.newOfferInfo
break;
default:
// Update paymentDataRequestUpdate.error
}
resolve(paymentDataRequestUpdate);
});
}
Wyjaśnienie kodu
- Funkcja
onPaymentDataChanged()
przyjmuje jako argumentIntermediatePaymentData
. Ta funkcja jest wywoływana, gdy w arkuszu płatności zmieni się adres dostawy lub opcje dostawy. - Funkcja
onPaymentDataChanged()
musi zwracać obietnicę, która rozwiązuje obiektPaymentDataRequestUpdate
określający nowe informacje o transakcji, opcje dostawy i błąd. O te dane ma być zaktualizowany arkusz płatności. redemptionCodes
to zestaw kodów promocyjnych wpisanych w arkuszu płatności. Obejmuje kody, które zostały już zatwierdzone.
6. Podsumowanie
Gratulujemy ukończenia tego ćwiczenia. Poznasz te zagadnienia:
Uruchamianie projektu
Testowanie w Google Chrome
W przeglądarce Google Chrome otwórz plik index.html
, korzystając z menu głównego Chrome Plik > Otwórz plik…. Gdy otworzysz projekt w ten sposób, Chrome wykona main.js
. Inne przeglądarki mogą nie zezwalać na wykonywanie kodu JavaScript.
– lub –
Testowanie z lokalnym serwerem WWW
Jeśli masz zainstalowany Python, uruchom python3 -m http.server
w terminalu w folderze głównym pay-web-101
.
$ cd /your/path/to/pay-web-101
$ python3 -m http.server
Serving HTTP on :: port 8000 (http://[::]:8000/) ...
Następnie otwórz swoją witrynę pod adresem http://localhost:8000
.
Co dalej
Dodatkowe materiały
- Dołącz do rozmowy w kanale#payments w Discordzie.
- Obserwuj konto @GooglePayDevs na X
- Oglądanie filmów związanych z Google Pay w YouTube