Google Pay
Integracja Google Pay umożliwia klientom płatność za pomoca kart zapisanych na ich koncie Google. Płatność odbywa się natywnie w przeglądarce lub aplikacji, bez konieczności wpisywania danych karty.
Schemat działania
Krok 1: Rejestracja płatności
Zarejestruj transakcję standardowo:
curl -X POST https://api-payments.dpay.pl/api/v1_0/payments/register \
-H "Content-Type: application/json" \
-d '{
"transactionType": "transfers",
"service": "abc123",
"value": "49.99",
"url_success": "https://mojsklep.pl/sukces",
"url_fail": "https://mojsklep.pl/błąd",
"url_ipn": "https://mojsklep.pl/api/ipn",
"checksum": "..."
}'
Zapisz transactionId z odpowiedzi.
Krok 2: Konfiguracja przycisku Google Pay
Dodaj skrypt Google Pay API i skonfiguruj przycisk na swójej stronie:
<script src="https://pay.google.com/gp/p/js/pay.js"></script>
<div id="google-pay-button"></div>
Konfiguracja JavaScript
// Konfiguracja Google Pay
const googlePayConfig = {
apiVersion: 2,
apiVersionMinor: 0,
allowedPaymentMethods: [
{
type: 'CARD',
parameters: {
allowedAuthMethods: ['PAN_ONLY', 'CRYPTOGRAM_3DS'],
allowedCardNetworks: ['VISA', 'MASTERCARD'],
},
tokenizationSpecification: {
type: 'PAYMENT_GATEWAY',
parameters: {
gateway: 'aciworldwide',
gatewayMerchantId: 'YOUR_MERCHANT_ID', // ID wskazane przez BOK dpay
},
},
},
],
};
// Konfiguracja zapytania o płatność
const paymentDataRequest = {
...googlePayConfig,
transactionInfo: {
totalPriceStatus: 'FINAL',
totalPrice: '49.99',
currencyCode: 'PLN',
countryCode: 'PL',
},
merchantInfo: {
merchantName: 'Moj Sklep',
merchantId: 'BCR2DN4T...', // Twoje Google Merchant ID
},
};
Inicjalizacja i wyświetlenie przycisku
let paymentsClient;
async function initGooglePay() {
paymentsClient = new google.payments.api.PaymentsClient({
environment: 'PRODUCTION', // lub 'TEST' dla testow
});
// Sprawdz, czy Google Pay jest dostępny
const isReadyToPay = await paymentsClient.isReadyToPay(googlePayConfig);
if (isReadyToPay.result) {
const button = paymentsClient.createButton({
onClick: onGooglePayClicked,
buttonColor: 'black',
buttonType: 'pay',
buttonLocale: 'pl',
});
document.getElementById('google-pay-button').appendChild(button);
}
}
async function onGooglePayClicked() {
try {
const paymentData = await paymentsClient.loadPaymentData(paymentDataRequest);
await processGooglePayPayment(paymentData);
} catch (error) {
console.error('Google Pay error:', error);
}
}
// Inicjalizuj po zaladowaniu strony
google.payments.api.PaymentsClient && initGooglePay();
Krok 3: Wysłanie tokenu do dpay.pl
Po zatwierdzeniu płatności przez klienta w Google Pay, wyślij otrzymany token do dpay.pl:
POST https://api-payments.dpay.pl/api/v1_0/cards/payment/{transactionId}/pay/google-pay
Content-Type: application/json
Parametry zapytania
{
"xPayType": "GOOGLE_PAY",
"paymentData": {
"apiVersion": 2,
"apiVersionMinor": 0,
"paymentMethodData": {
"type": "CARD",
"tokenizationData": {
"type": "PAYMENT_GATEWAY",
"token": "... token z Google Pay ..."
}
}
},
"deviceInfo": {
"browserJavaEnabled": false,
"browserLanguage": "pl-PL",
"browserColorDepth": "24",
"browserScreenHeight": "1080",
"browserScreenWidth": "1920",
"browserTZ": "-60",
"browserUserAgent": "Mozilla/5.0 ...",
"browserAcceptHeader": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"browserJavascriptEnabled": true
}
}
JavaScript - przetwarzanie płatności
async function processGooglePayPayment(paymentData) {
const transactionId = '...'; // Z Kroku 1
const deviceInfo = {
browserJavaEnabled: navigator.javaEnabled ? navigator.javaEnabled() : false,
browserLanguage: navigator.language || 'pl-PL',
browserColorDepth: String(screen.colorDepth),
browserScreenHeight: String(screen.height),
browserScreenWidth: String(screen.width),
browserTZ: String(new Date().getTimezoneOffset()),
browserUserAgent: navigator.userAgent,
browserAcceptHeader: 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
browserJavascriptEnabled: true,
};
const response = await fetch(`/api/pay/google-pay`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
transactionId,
paymentData,
deviceInfo,
}),
});
const result = await response.json();
if (result.error) {
alert('Błąd płatności: ' + result.msg);
} else if (result.redirectType === 'FORM') {
// Obsługa 3D Secure
handle3DSRedirect(result);
} else {
window.location.href = result.url_success || '/sukces';
}
}
Serwer (Node.js) - proxy do dpay.pl
app.post('/api/pay/google-pay', async (req, res) => {
const { transactionId, paymentData, deviceInfo } = req.body;
const response = await axios.post(
`https://api-payments.dpay.pl/api/v1_0/cards/payment/${transactionId}/pay/google-pay`,
{
xPayType: 'GOOGLE_PAY',
paymentData,
deviceInfo,
}
);
res.json(response.data);
});
Odpowiedz API
Sukces
{
"error": false,
"status": "paid",
"transactionId": "abc-def-123-456"
}
3D Secure wymagane
{
"error": false,
"status": "3DS_REQUIRED",
"redirectType": "FORM",
"redirectUrl": "https://acs-bank.example.com/3ds",
"redirectParams": { ... }
}
Środowisko testowe
Do testow użyj środowiska TEST w konfiguracji Google Pay:
const paymentsClient = new google.payments.api.PaymentsClient({
environment: 'TEST',
});
W środowisku testowym Google Pay zwraca fikcyjne tokeny, które można wykorzystac do testowania integracji.
Wymagania
- Twoja strona musi byc dostępna przez HTTPS
- Musisz posiadać zweryfikowane Google Merchant ID (dla produkcji)
- Domena musi byc zarejestrowana w Google Pay & Wallet Console