1. Введение
Данный практический урок является продолжением урока «Google Pay API для веб-разработки: основы» и основан на коде, написанном в этом уроке. Для выполнения этого урока обязательно сначала выполните тот.
Что вы узнаете
- Как настроить кнопку Google Pay
- Как начать процесс оплаты
- Как подтвердить статус авторизации платежа
- Как обрабатывать изменения адреса доставки
- Как работать с кодами активации
Что вам понадобится
- Текстовый редактор на ваш выбор для редактирования HTML- и JavaScript-файлов.
- Веб-браузер Google Chrome или другой способ тестирования локального веб-сайта.
- Для запуска в производство вам потребуется
merchantIdGoogle Pay. Регистрация в консоли Google Pay & Wallet займет всего минуту, так что можете позаботиться об этом прямо сейчас.
Следуйте инструкциям, используя Firebase Studio.
2. Настройка кнопок
Это краткий обзор параметров ButtonOptions . Для более подробного объяснения обратитесь к документации.
Вариант | Необходимость | Ценности |
onClick | Необходимый | Название обработчика событий JavaScript |
разрешенные методы оплаты | Необязательный | |
buttonColor | Необязательный | по умолчанию, черный, белый |
buttonLocale | Необязательный | Двухбуквенный код ISO 639-1. |
buttonRadius | Необязательный | от 0 до 100 |
buttonRootNode | Необязательный | HTMLDocument или ShadowRoot |
buttonSizeMode | Необязательный | статический, заполнение |
buttonType | Необязательный | забронировать, купить, оформить заказ, пожертвовать, заказать, оплатить, простой, подписаться |
Найдите метод renderGooglePayButton() в файле main.js и замените его кодом, указанным здесь.
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);
}
пояснение к коду
- Метод библиотеки
createButton()принимает аргумент конфигурацииButtonOptions, который позволяет определить внешний вид и поведение кнопки.
3. Обратные вызовы для обработки платежных данных
Клиент для обработки платежей предоставляет механизм для регистрации функций, которые будут обрабатывать определенные события. Первое — это авторизация платежа, а второе — изменение платежных данных.
- Найдите комментарий
// todo: paymentDataCallbacksвmain.jsи замените его этим кодом.paymentDataCallbacks: { onPaymentAuthorized: onPaymentAuthorized, onPaymentDataChanged: onPaymentDataChanged }, - Затем найдите раздел «
Event Handlersв файлеmain.jsи добавьте следующий код в конец этого раздела.function onPaymentAuthorized(paymentData) { // We'll fill this in later } function onPaymentDataChanged(intermediatePaymentData) { // We'll fill this in later } - Наконец, найдите комментарий
// todo: callbackIntentsв файлеmain.jsи замените его этим кодом. В этом практическом занятии мы реализуем все 4 типа интентов.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.' }, ], },
пояснение к коду
- Свойство
PaymentDataCallbacksимеет два подсвойства: одно для обратного вызова авторизации платежа, а второе — для обратного вызова при изменении данных платежа. - При реализации коллбэков требуется
onPaymentAuthorized. Этот коллбэк вызывается, когда списокcallbackIntentsсодержитPAYMENT_AUTHORIZATIONв объектеPaymentDataRequest. -
onPaymentDataChangedявляется необязательным . Этот коллбэк вызывается, когда списокcallbackIntentsсодержитOFFER,SHIPPING_ADDRESSилиSHIPPING_OPTIONвPaymentDataRequest. - Установите параметры
callbackIntentsв объектеPaymentDataRequest, чтобы запустить оба обратных вызова для этого практического задания.
4. Авторизация платежа
Функция «Авторизация платежей» используется для запуска процесса оплаты и подтверждения статуса авторизации платежа.
Найдите функцию onPaymentAuthorized() в main.js , которую вы добавили на предыдущем шаге, и замените её следующим кодом.
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);
});
}
пояснение к коду
- Функция обратного вызова
onPaymentAuthorized()вызывается с аргументомPaymentDataи должна возвращать промис. В этом примере функция случайным образом выбирает, возвращать ли успешный результат или ошибку. В вашем проекте вы воспользуетесь этой возможностью для обработки транзакции с вашим платежным шлюзом, используя токен, найденный вpaymentDataпо адресуpaymentData.paymentMethodData.tokenizationData.token.
5. Изменение платежных данных
Функция динамического обновления цен позволяет продавцу динамически обновлять варианты доставки и информацию о транзакциях в зависимости от выбранного адреса доставки. Кроме того, вы можете динамически обновлять информацию о транзакциях в зависимости от выбранного варианта доставки.
Найдите функцию onPaymentDataChanged() в main.js , которую вы добавили на предыдущем шаге, и замените её следующим кодом.
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);
});
}
пояснение к коду
- Функция
onPaymentDataChanged()принимает в качестве аргументаIntermediatePaymentData. Эта функция вызывается при изменении адреса доставки или вариантов доставки в платежной форме. - Функция
onPaymentDataChanged()должна возвращать промис, который разрешает объектPaymentDataRequestUpdate, указывающий новую информацию о транзакции, варианты доставки и ошибку для обновления платежной ведомости. -
redemptionCodes— это набор промокодов, вводимых в платежную форму. Включает в себя коды, которые уже были одобрены.
6. Заключение
Поздравляем с завершением этого практического занятия! Вы научились...
Запустите проект
Протестировано в Google Chrome
В браузере Google Chrome откройте index.html , используя меню «Файл» > «Открыть файл...» . Chrome запустит main.js при открытии проекта таким образом. Другие веб-браузеры могут не разрешать выполнение JavaScript.
- или -
Протестируйте с помощью локального веб-сервера.
Если у вас установлен Python, запустите команду python3 -m http.server в терминале в корневой папке pay-web-101 .
$ cd /your/path/to/pay-web-101
$ python3 -m http.server
Serving HTTP on :: port 8000 (http://[::]:8000/) ...
Затем перейдите на свой сайт по адресу http://localhost:8000 .
Что делать дальше?
Дополнительные ресурсы
- Присоединяйтесь к обсуждению в канале #payments в Discord.
- Подписывайтесь на @GooglePayDevs в X
- Смотрите видеоролики, посвященные Google Pay, на YouTube.