Google Pay API można używać w połączeniu z innymi obsługiwanymi formami płatności w PaymentRequest.
Krok 1. Utwórz obiekt PaymentDataRequest
Skonfiguruj obiekt PaymentDataRequest, podając swoją bramę płatności i akceptowane formy płatności.
Zalecamy uzyskanie adresu dostawy, adresu e-mail i numeru telefonu za pomocą argumentu przeglądarki PaymentRequest options, a nie za pomocą Google Pay API. W ten sposób zachowasz spójność między różnymi formami płatności.
Używaj Google Pay API do otrzymywania samych danych uwierzytelniających płatność i opcjonalnego adresu rozliczeniowego.
const googlePaymentDataRequest = { environment: 'TEST', apiVersion: 2, apiVersionMinor: 0, merchantInfo: { // A merchant ID is available after approval by Google. // @see {@link https://developers.google.com/pay/api/web/guides/test-and-deploy/integration-checklist} // merchantId: '12345678901234567890', merchantName: 'Example Merchant' }, allowedPaymentMethods: [{ type: 'CARD', parameters: { allowedAuthMethods: ["PAN_ONLY", "CRYPTOGRAM_3DS"], allowedCardNetworks: ["AMEX", "DISCOVER", "INTERAC", "JCB", "MASTERCARD", "VISA"] }, tokenizationSpecification: { type: 'PAYMENT_GATEWAY', // Check with your payment gateway on the parameters to pass. // @see {@link https://developers.google.com/pay/api/web/reference/request-objects#gateway} parameters: { 'gateway': 'example', 'gatewayMerchantId': 'exampleGatewayMerchantId' } } }] };
Krok 2. Zadeklaruj, że obsługujesz Google Pay API
Dodaj identyfikator formy płatności Google Pay API oraz jego konfigurację do parametru methodData przekazywanego do PaymentRequest.
const methodData = [ {supportedMethods: 'https://google.com/pay', data: googlePaymentDataRequest}, {supportedMethods: 'basic-card'} ];
Jak to wszystko połączyć
Poniższe przykłady przedstawiają implementację Google Pay API w połączeniu z innymi obsługiwanymi formami płatności w PaymentRequest:
<div id="checkout">
<button id="buyButton">Checkout</button>
</div>
<script>
const allowedCardNetworks = ["AMEX", "DISCOVER", "INTERAC", "JCB", "MASTERCARD", "VISA"];
const allowedCardAuthMethods = ["PAN_ONLY", "CRYPTOGRAM_3DS"];
if (window.PaymentRequest) {
const request = createPaymentRequest();
request.canMakePayment()
.then(function(result) {
if (result) {
// Display PaymentRequest dialog on interaction with the existing checkout button
document.getElementById('buyButton')
.addEventListener('click', onBuyClicked);
}
})
.catch(function(err) {
showErrorForDebugging(
'canMakePayment() error! ' + err.name + ' error: ' + err.message);
});
} else {
showErrorForDebugging('PaymentRequest API not available.');
}
/**
* Show a PaymentRequest dialog after a user clicks the checkout button
*/
function onBuyClicked() {
createPaymentRequest()
.show()
.then(function(response) {
// Dismiss payment dialog.
response.complete('success');
handlePaymentResponse(response);
})
.catch(function(err) {
showErrorForDebugging(
'show() error! ' + err.name + ' error: ' + err.message);
});
}
/**
* Define your unique Google Pay API configuration
*
* @returns {object} data attribute suitable for PaymentMethodData
*/
function getGooglePaymentsConfiguration() {
return {
environment: 'TEST',
apiVersion: 2,
apiVersionMinor: 0,
merchantInfo: {
// A merchant ID is available after approval by Google.
// 'merchantId':'12345678901234567890',
merchantName: 'Example Merchant'
},
allowedPaymentMethods: [{
type: 'CARD',
parameters: {
allowedAuthMethods: allowedCardAuthMethods,
allowedCardNetworks: allowedCardNetworks
},
tokenizationSpecification: {
type: 'PAYMENT_GATEWAY',
// Check with your payment gateway on the parameters to pass.
// @see {@link https://developers.google.com/pay/api/web/reference/request-objects#gateway}
parameters: {
'gateway': 'example',
'gatewayMerchantId': 'exampleGatewayMerchantId'
}
}
}]
};
}
/**
* Create a PaymentRequest
*
* @returns {PaymentRequest}
*/
function createPaymentRequest() {
// Add support for the Google Pay API.
const methodData = [{
supportedMethods: 'https://google.com/pay',
data: getGooglePaymentsConfiguration()
}];
// Add other supported payment methods.
methodData.push({
supportedMethods: 'basic-card',
data: {
supportedNetworks:
Array.from(allowedCardNetworks, (network) => network.toLowerCase())
}
});
const details = {
total: {label: 'Test Purchase', amount: {currency: 'USD', value: '1.00'}}
};
const options = {
requestPayerEmail: true,
requestPayerName: true
};
return new PaymentRequest(methodData, details, options);
}
/**
* Process a PaymentResponse
*
* @param {PaymentResponse} response returned when a user approves the payment request
*/
function handlePaymentResponse(response) {
const formattedResponse = document.createElement('pre');
formattedResponse.appendChild(
document.createTextNode(JSON.stringify(response.toJSON(), null, 2)));
document.getElementById('checkout')
.insertAdjacentElement('afterend', formattedResponse);
}
/**
* Display an error message for debugging
*
* @param {string} text message to display
*/
function showErrorForDebugging(text) {
const errorDisplay = document.createElement('code');
errorDisplay.style.color = 'red';
errorDisplay.appendChild(document.createTextNode(text));
const p = document.createElement('p');
p.appendChild(errorDisplay);
document.getElementById('checkout').insertAdjacentElement('afterend', p);
}
</script>Lista parametrów formy płatności
Konfiguracja Google Pay API przekazana w PaymentRequest jest podobna do obiektu PaymentDataRequest używanego przez bibliotekę klienta JavaScript Google Pay API, ale istnieje kilka wyjątków:
- Ustaw właściwość
environmentw obiekcie zgodną z wartością ciągu znaków opisaną wPaymentOptions. - Pomiń właściwość
transactionInfo. Łączna cena i waluta powinny być zamiast tego określone w argumenciedetailsprzekazywanym doPaymentRequest.
Dodatkowe właściwości obiektów określane w przypadku formy płatności Google Pay API we właściwości danych formy płatności PaymentRequest:
| Właściwość | Typ | Czy jest wymagana | Opis |
|---|---|---|---|
environment |
ciąg znaków | opcjonalna |
|