Metody pro Google Pay - csob/platebnibrana GitHub Wiki

Stručný přehled metod pro Google Pay (googlepay@shop)

Metoda Popis
googlepay/echo Získání parametrů pro inicializaci Google Pay.
googlepay/init Založení Google Pay platby pro googlepay@shop.
googlepay/process Spuštění zpracování Google Pay platby.

Následující schéma zachycuje průběh Google Pay platby:

Zákazník platí na e-shopu svou objednávku. Obchodník zobrazuje zákazníkovi možnost zaplatit pomocí Google Pay platby, přičemž parametry pro inicializaci získává pomocí volání operace googlepay/echo (0).

Poté, co zákazník zvolí Google Pay platbu, e-shop incializuje na platební bráně platbu pomocí operace googlepay/init. V odpovědi získává identifikaci platby payId (1).

Na rozdíl od standardní platby kartou na bráně zůstává zákazník při Google Pay platbě na e-shopu obchodníka, potřebné údaje pro platbu (číslo karty a expirace) si platební brána dešifruje z payloadu poslaného v rámci operace googlepay/init.

Platební brána provádí u některých plateb tzv. otisk zařízení (2). Jedná se o odeslání údajů z prohlížeče zákazníka vydavateli karty, který tato data následně použije pro následné ověření platby. Obchodník spouští další zpracování voláním operace googlepay/process (3). Otisk zařízení je obchodník povinnen provést na straně e-shopu v rámci 1px iframe.

U některých plateb je v rámci ověření vyžadováno od zákazníka potvrzení platby (5). Stejně jako u otisku zařízení i potvrzení platby je obchodník povinnen provést na straně e-shopu, otevírá iframe nebo provádí přesměrování do top.location na základě parametrů přijatých z platební brány.

Obchodník průběžně zjišťuje stav platby pomocí volání operace payment/status (4). V případě, že je vyžadováno potvrzení platby, je po dokončení ověření a autorizaci platby zákazník přesměrován pomocí returnMethod na returnUrl e-shopu. Po dokončení ověření a dokončení autorizace platby zobrazuje obchodník zákazníkovi výsledek platby.

Tučně uvedené parametry jsou pro volání povinné.


Metoda googlepay/echo  

POST https://api.platebnibrana.csob.cz/api/v1.9/googlepay/echo

Tato operace umožňuje získat parametry pro inicializaci Google Pay. Parametry může obchodník uložit do cache a použít opakovaně pro zobrazení stránky s možností zaplatit pomocí Google Pay.

Položka Typ Popis
merchantId String ID obchodníka přiřazené platební bránou.
dttm String Datum a čas odeslání požadavku ve formátu YYYYMMDDHHMMSS.
signature String Podpis požadavku, kódováno v BASE64.

Příklad požadavku:

{
  "merchantId":"M1MIPS0000",
  "dttm":"20220125131559",
  "signature":"base64-encoded-signature-of-payment-request"
}

Návratové hodnoty  

Položka Typ Popis
dttm String Datum a čas odpovědi ve formátu YYYYMMDDHHMMSS.
resultCode Number Výsledek operace, viz výčet.
resultMessage String Textový popis výsledku operace.
initParams Object Parametry pro inicializaci javascriptu pro Google Pay platbu, vyplněno v případě, že resultCode je 0.
signature String Podpis odpovědi, kódováno v BASE64.

Popis parametrů objektu initParams, obchodník dané hodnoty v nezměněné podobě vyplní do js (viz dále) pro inicializaci Google Pay.

Položka Typ Popis
apiVersion Number Verze použitého Google Pay API.
apiVersionMinor Number Minor verze použitého Google Pay API.
paymentMethodType String Identifikátor typu platebního prostředku použitého v Google Pay, bude předvyplněno na základě nastavení platební brány, příklad: CARD.
allowedCardNetworks String Seznam akceptovaných karetních brandů, které bude Google pay od zákazníka akceptovat, bude předvyplněno platební bránou na základě nastavení obchodníka, příklad: [ "VISA", "MASTERCARD" ].
allowedCardAuthMethods String Seznam akceptovaných typů karet uložených v rámci Google Pay, bude předvyplněno na základě nastavení platební brány, příklad: [ "CRYPTOGRAM_3DS" ].
assuranceDetailsRequired Boolean Příznak, zda je požadováno vrácení assuranceDetails dat (obsahují informace o provedené autentizaci).
billingAddressRequired Boolean Příznak, zda je požadováno vrácení fakturační adresy z Google Pay.
billingAddressParametersFormat String Formát vrácené fakturační adresy, bude předvyplněno na základě nastavení platební brány, příklad: FULL.
tokenizationSpecificationType String Určuje způsob zpracování platebních dat, bude předvyplněno na základě nastavení platební brány, příklad: PAYMENT_GATEWAY.
gateway String Identifikátor platební brány / providera registrovaného u Google, pomocí kterého je provedena vlastní autorizace platby.
gatewayMerchantId String Identifikátor obchodníka přidělený platební bránou, používá se pro kontrolu konzistence předávaného payloadu.
googlepayMerchantId String Identifikátor obchodníka přidělený společností Google po dokončení registrace obchodníka.
merchantName String Název obchodníka, který se zobrazuje v GooglePay peněžence pro zaplacení dané platby.
environment String Určuje prostředí, ve kterém je platba odehrává, možné hodnoty jsou TEST, PRODUCTION.
totalPriceStatus String Typ předávané ceny, bude přednastaveno platební bránou na hodnotu FINAL.
countryCode String Kód země dle standardu ISO 3166-1 alpha-2, ve které je platba zpracovávána.

Příklad návratových hodnot pro googlepay/echo (googlepay@shop má obchodník povolen):

{
  "dttm":"20220125131601",
  "resultCode": 0,
  "resultMessage":"OK",
  "initParams": {
    "apiVersion": 2,
    "apiVersionMinor": 0,
    "paymentMethodType": "CARD",
    "allowedCardNetworks": ["VISA", "MASTERCARD"],
    "allowedCardAuthMethods": ["CRYPTOGRAM_3DS"],
    "assuranceDetailsRequired": true,
    "billingAddressRequired": true,
    "billingAddressParametersFormat": "FULL",
    "tokenizationSpecificationType": "PAYMENT_GATEWAY",
    "gateway":"csob",
    "gatewayMerchantId":"M1MIPS0000",
    "googlepayMerchantId":"01234567890123456789",
    "merchantName":"Váš obchod, a.s.",
    "environment":"TEST",
    "totalPriceStatus":"FINAL",
    "countryCode":"CZ"
  },
  "signature":"base64-encoded-response-signature"
 }

Příklad návratových hodnot pro googlepay/echo (googlepay@shop má obchodník zakázán):

{
  "dttm":"20220125131601",
  "resultCode": 160,
  "resultMessage":"Payment method disabled",
  "signature":"base64-encoded-response-signature"
 }

Poté, co obchodník získá v odpovědi na volání googlepay/echo parametry předané v initParams, provede na straně e-shopu vložení/vygenerování javascriptu pro inicializaci Google Pay platby, javascript je možné vygenerovat podle následující šablony, je potřeba nahradit všechny výskyty proměnných, které jsou uvedeny ve formátu ${variable}.

Parametry ${totalPrice} a ${currencyCode} nejsou součástí initParams, je potřeba je vyplnit dle zpracovávané platby. Částku nastavte jako celkovou částku s přesností na dvě desetinná místa. Formát měny musí odpovídat ISO 4217 alphabetic currency code.

function processPayment(paymentData) {
  // show returned data in developer console for debugging
  console.log(paymentData);
  // @todo pass payment data response to your gateway to process payment
}

Ukázková šablona pro obslužný javascript pro Google Pay pro e-shop obchodníka:

<script>
/**
 * Define the version of the Google Pay API referenced when creating your
 * configuration
 *
 * @see {@link https://developers.google.com/pay/api/web/reference/object#PaymentDataRequest|apiVersion in PaymentDataRequest}
 */
const baseRequest = {
  apiVersion: ${apiVersion},
  apiVersionMinor: ${apiVersionMinor}
};

/**
 * Card networks supported by your site and your gateway
 *
 * @see {@link https://developers.google.com/pay/api/web/reference/object#CardParameters|CardParameters}
 * @todo confirm card networks supported by your site and gateway
 */
const allowedCardNetworks = ${allowedCardNetworks};

/**
 * Card authentication methods supported by your site and your gateway
 *
 * @see {@link https://developers.google.com/pay/api/web/reference/object#CardParameters|CardParameters}
 * @todo confirm your processor supports Android device tokens for your
 * supported card networks
 */
const allowedCardAuthMethods = ${allowedCardAuthMethods};

/**
 * Identify your gateway and your site's gateway merchant identifier
 *
 * The Google Pay API response will return an encrypted payment method capable
 * of being charged by a supported gateway after payer authorization
 *
 * @todo check with your gateway on the parameters to pass
 * @see {@link https://developers.google.com/pay/api/web/reference/object#Gateway|PaymentMethodTokenizationSpecification}
 */
const tokenizationSpecification = {
  type: '${tokenizationSpecificationType}',
  parameters: {
    'gateway': '${gateway}',
    'gatewayMerchantId': '${gatewayMerchantId}'
  }
};

/**
 * Describe your site's support for the CARD payment method and its required
 * fields
 *
 * @see {@link https://developers.google.com/pay/api/web/reference/object#CardParameters|CardParameters}
 */
const baseCardPaymentMethod = {
  type: '${paymentMethodType}',
  parameters: {
    allowedAuthMethods: allowedCardAuthMethods,
    allowedCardNetworks: allowedCardNetworks,
    assuranceDetailsRequired: ${assuranceDetailsRequired},
    billingAddressRequired: ${billingAddressRequired},
    billingAddressParameters: {
      format: '${billingAddressParametersFormat}'
    }
  }
};

/**
 * Describe your site's support for the CARD payment method including optional
 * fields
 *
 * @see {@link https://developers.google.com/pay/api/web/reference/object#CardParameters|CardParameters}
 */
const cardPaymentMethod = Object.assign(
  {},
  baseCardPaymentMethod,
  {
    tokenizationSpecification: tokenizationSpecification
  }
);

/**
 * An initialized google.payments.api.PaymentsClient object or null if not yet set
 *
 * @see {@link getGooglePaymentsClient}
 */
let paymentsClient = null;

/**
 * Configure your site's support for payment methods supported by the Google Pay
 * API.
 *
 * Each member of allowedPaymentMethods should contain only the required fields,
 * allowing reuse of this base request when determining a viewer's ability
 * to pay and later requesting a supported payment method
 *
 * @returns {object} Google Pay API version, payment methods supported by the site
 */
function getGoogleIsReadyToPayRequest() {
  return Object.assign(
      {},
      baseRequest,
      {
        allowedPaymentMethods: [baseCardPaymentMethod]
      }
  );
}

/**
 * Configure support for the Google Pay API
 *
 * @see {@link https://developers.google.com/pay/api/web/reference/object#PaymentDataRequest|PaymentDataRequest}
 * @returns {object} PaymentDataRequest fields
 */
function getGooglePaymentDataRequest() {
  const paymentDataRequest = Object.assign({}, baseRequest);
  paymentDataRequest.allowedPaymentMethods = [cardPaymentMethod];
  paymentDataRequest.transactionInfo = getGoogleTransactionInfo();
  paymentDataRequest.merchantInfo = {
    // @todo a merchant ID is available for a production environment after approval by Google
    // See {@link https://developers.google.com/pay/api/web/guides/test-and-deploy/integration-checklist|Integration checklist}
    merchantId: '${googlepayMerchantId}',
    merchantName: '${merchantName}'
  };
  return paymentDataRequest;
}

/**
 * Return an active PaymentsClient or initialize
 *
 * @see {@link https://developers.google.com/pay/api/web/reference/client#PaymentsClient|PaymentsClient constructor}
 * @returns {google.payments.api.PaymentsClient} Google Pay API client
 */
function getGooglePaymentsClient() {
  if ( paymentsClient === null ) {
    paymentsClient = new google.payments.api.PaymentsClient({environment: '${environment}'});
  }
  return paymentsClient;
}

/**
 * Initialize Google PaymentsClient after Google-hosted JavaScript has loaded
 *
 * Display a Google Pay payment button after confirmation of the viewer's
 * ability to pay.
 */
function onGooglePayLoaded() {
  const paymentsClient = getGooglePaymentsClient();
  paymentsClient.isReadyToPay(getGoogleIsReadyToPayRequest())
      .then(function(response) {
        if (response.result) {
          addGooglePayButton();
          // @todo prefetch payment data to improve performance after confirming site functionality
          // prefetchGooglePaymentData();
        }
      })
      .catch(function(err) {
        // show error in developer console for debugging
        console.log('something went wrong ...');
        console.error(err);
      });
}

/**
 * Add a Google Pay purchase button alongside an existing checkout button
 *
 * @see {@link https://developers.google.com/pay/api/web/reference/object#ButtonOptions|Button options}
 * @see {@link https://developers.google.com/pay/api/web/guides/brand-guidelines|Google Pay brand guidelines}
 */
function addGooglePayButton() {
  const paymentsClient = getGooglePaymentsClient();
  const button =
      paymentsClient.createButton({onClick: onGooglePaymentButtonClicked});
  document.getElementById('container').appendChild(button);
}

/**
 * Provide Google Pay API with a payment amount, currency, and amount status
 *
 * @see {@link https://developers.google.com/pay/api/web/reference/object#TransactionInfo|TransactionInfo}
 * @returns {object} transaction info, suitable for use as transactionInfo property of PaymentDataRequest
 */
function getGoogleTransactionInfo() {
  return {
    currencyCode: '${currencyCode}',
    totalPriceStatus: '${totalPriceStatus}',
    totalPrice: '${totalPrice}',
    countryCode: '${countryCode}'
  };
}

/**
 * g payment data to improve performance
 *
 * @see {@link https://developers.google.com/pay/api/web/reference/client#prefetchPaymentData|prefetchPaymentData()}
 */
function prefetchGooglePaymentData() {
  const paymentDataRequest = getGooglePaymentDataRequest();
  // transactionInfo must be set but does not affect cache
  paymentDataRequest.transactionInfo = {
    totalPriceStatus: 'NOT_CURRENTLY_KNOWN',
    currencyCode: '${currencyCode}'
  };
  const paymentsClient = getGooglePaymentsClient();
  paymentsClient.prefetchPaymentData(paymentDataRequest);
}

/**
 * Show Google Pay payment sheet when Google Pay payment button is clicked
 */
function onGooglePaymentButtonClicked() {
  const paymentDataRequest = getGooglePaymentDataRequest();
  paymentDataRequest.transactionInfo = getGoogleTransactionInfo();

  const paymentsClient = getGooglePaymentsClient();
  paymentsClient.loadPaymentData(paymentDataRequest)
      .then(function(paymentData) {
        // handle the response
        processPayment(paymentData);
      })
      .catch(function(err) {
        // show error in developer console for debugging
        console.error(err);
      });
}

/**
 * Process payment data returned by the Google Pay API
 *
 * @param {object} paymentData response from Google Pay API after user approves payment
 * @see {@link https://developers.google.com/pay/api/web/reference/object#PaymentData|PaymentData object reference}
 */
function processPayment(paymentData) {
  // show returned data in developer console for debugging
  console.log(paymentData);
  // @todo pass payment data response to the payment gateway to process payment
  // encode paymentData.paymentMethodData.tokenizationData.token into base64 and send it as payload parametr within googlepay/init call
}
</script>
<script async
  src="https://pay.google.com/gp/p/js/pay.js"
  onload="onGooglePayLoaded()"></script>

Metoda googlepay/init  

POST https://api.platebnibrana.csob.cz/api/v1.9/googlepay/init

Operace provede založení Google Pay platby pro googlepay@shop, volá se po získání payloadu z Google Pay.

Položka Typ Popis
merchantId String ID obchodníka přiřazené platební bránou.
orderNo String Referenční číslo objednávky využívané pro párování plateb, které bude uvedeno také na výpisu z banky. Numerická hodnota, maximální délka je 10 číslic.
dttm String Datum a čas odeslání požadavku ve formátu YYYYMMDDHHMMSS.
clientIp String IP adresa zákazníka (jeho browseru) přistupující na e-shop obchodníka, formát ipv4 nebo ipv6.
totalAmount Number Celková cena v setinách základní měny. Obchodník může nastavit celkovou cenu, která reflektuje způsob dopravy na základě adresy získané z Google Pay apod. Tato hodnota bude poslána do autorizace na platební bráně jako finální celková částka k zaplacení. Cena musí být stejná nebo menší jak částka autentizovaná držitelem karty v Google Pay.
currency String Kód měny. Povolené hodnoty: CZK, EUR, USD, GBP, HUF, PLN, RON, NOK, SEK.
closePayment Boolean Indikuje, zda má být platba automaticky zahrnuta do uzávěrky a proplacena. Povolené hodnoty: true / false. Od verze 1.9 nepovinný parametr, defaultní hodnota: true.
payload String Data ve formátu JSON (paymentData.paymentMethodData.tokenizationData.token) přijatá obchodníkem v e-shopu v rámci Google Pay obchodník kóduje jako BASE64 a následně předává v parametru payload. Payment data obsahují Google Pay Payment Token potřebný pro autorizaci platby na platební bráně.
returnUrl String URL adresa, na kterou bude klient přesměrován zpět do e-shopu po dokončení platby v případě, že u platby je vyžadováno potvrzení v rámci ověření platby. Maximální délka 300 znaků. Při přesměrování zpět na e-shop se předává stejná sada parametrů jako v případě návratu z platební brány při platbě kartou.
returnMethod String Metoda návratu na URL adresu e-shopu. Povolené hodnoty POST, GET. Doporučená metoda je POST.
customer Object Dodatečná data o nákupu týkající se zákazníka. Viz detailní popis struktury customer.
order Object Dodatečná data o nákupu týkající se objednávky. Viz detailní popis struktury order.
sdkUsed Boolean Indikuje, zda je ověření platby prováděno přes 3DS SDK (v případě mobilní aplikace) nebo ne (platba přes prohlížeč). Povolené hodnoty: true / false. Defaultní hodnota: false.
merchantData String Libovolná pomocná data, která předává obchodník na bránu, musí být kódována v BASE64. Maximální délka po zakódování je 255 znaků. V případě obchodního modelu "Marketplace" musí obchodník identifikovat svého retailera pomocí IČO. Tento identifikátor je třeba plnit do hranatých závorek [] a může být umístěn libovolně v rámci položky merchantData. V případě, že se nákupu účastní vícero retailerů, hodnoty IČO se oddělují čárkou - např. [12345678,87654321].
language String Preferovaná jazyková mutace, která se použije v případě, že se provádí potvrzení platby. Povolené hodnoty: cs,en,de,fr,hu,it,ja,pl,pt,ro,ru,sk,es,tr,vi,hr,sl,sv.
ttlSec Number Nastavení životnosti platby, v sekundách, min. povolená hodnota 300, max. povolená hodnota 1800 (5-30 min). Defaultní hodnota: 1800. Životnost platby je počítána od okamžiku provolání googlepay/init.
signature String Podpis požadavku, kódováno v BASE64.

Příklad požadavku:

{
  "merchantId":"M1MIPS0000",
  "orderNo":"51966",
  "dttm":"20220125131559",
  "clientIp":"192.0.2.2",
  "totalAmount":12300,
  "currency":"CZK",
  "payload":"base64-encoded-payload-from-googlepay",
  "returnUrl":"https://shop.example.com/return",
  "returnMethod":"POST",
  "signature":"base64-encoded-signature-of-payment-request"
}

Příklad požadavku:

{
  "merchantId":"M1MIPS0000",
  "orderNo":"51966",
  "dttm":"20220125131559",
  "clientIp":"192.0.2.2",
  "totalAmount":12300,
  "currency":"CZK",
  "closePayment": true,
  "payload":"base64-encoded-payload-from-googlepay",
  "returnUrl":"https://shop.example.com/return",
  "returnMethod":"POST",
  "customer": {
    "name":"Jan Novák",
    "email":"[email protected]",
    "mobilePhone":"+420.800300300"
  },
  "order": {
    "type":"purchase",
    "availability":"now",
    "delivery":"digital",
    "deliveryMode": "0",
    "deliveryEmail": "[email protected]"
  },
  "signature":"base64-encoded-signature-of-payment-request"
}

Návratové hodnoty  

Položka Typ Popis
payId String Jednoznačné ID platby (přidělené platební bránou v operaci googlepay/init, obsahuje 15-znakový řetězec).
dttm String Datum a čas odpovědi ve formátu YYYYMMDDHHMMSS.
resultCode Number Výsledek operace, viz výčet.
resultMessage String Textový popis výsledku operace.
paymentStatus Number Stav platby, viz životní cyklus transakce.
statusDetail String Detailní stav platby (tzv. mikrostav), obsahuje například důvod zamítnutí platby, viz popis.
actions Object Struktura pro předání potřebných dat pro provedení otisku zařízení. Viz struktura actions.
signature String Podpis odpovědi, kódováno v BASE64.

Příklad návratových hodnot pro googlepay/init -- úspěšně založená platba:

{
  "payId":"7624c5e60252@HA",
  "dttm":"20220125131601",
  "resultCode": 0,
  "resultMessage":"OK",
  "paymentStatus": 1,
  "signature":"base64-encoded-response-signature"
 }

Příklad návratových hodnot pro googlepay/init -- úspěšně založená platba, včetně parametrů pro provedení otisku zařízení:

{
  "payId":"7624c5e60252@HA",
  "dttm":"20220125131601",
  "resultCode": 0,
  "resultMessage":"OK",
  "paymentStatus": 1,
  "actions": {
    "fingerprint": {
      "browserInit": {
        "url":"https://example.com/3ds-method-endpoint"
      }
    }
  },
  "signature":"base64-encoded-response-signature"
 }

Příklad návratových hodnot pro googlepay/init -- úspěšně založená platba, včetně parametrů pro inicializaci 3DS SDK pro ověření platby:

{
  "payId":"7624c5e60252@HA",
  "dttm":"20220125131601",
  "resultCode": 0,
  "resultMessage":"OK",
  "paymentStatus": 1,
  "actions": {
    "fingerprint": {
      "sdkInit": {
        "directoryServerID":"A000000003",
        "schemeId":"Visa",
        "messageVersion":"2.2.0"
      }
    }
  },
  "signature":"base64-encoded-response-signature"
 }

V případě nevalidního požadavku vrací platební brána odpověď obsahující popis chyby. Detailní popis je uveden na stránce Volání rozhraní eAPI.


Metoda googlepay/process  

POST https://api.platebnibrana.csob.cz/api/v1.9/googlepay/process

Operace spustí zpracování Google Pay platby.

Položka Typ Popis
merchantId String ID obchodníka přiřazené platební bránou.
payId String payID získané při založení Google Pay platby pomocí operace googlepay/init.
dttm String Datum a čas odeslání požadavku ve formátu YYYYMMDDHHMMSS.
fingerprint Object Dodatečná data pro ověření platby. Viz struktura fingerprint.
signature String Podpis požadavku, kódováno v BASE64.

Příklad požadavku: (googlepay@shop, platba prováděná z prohlížeče zákazníka)

Obchodník předává v požadavku parametry prohlížeče zákazníka.

{
  "merchantId":"M1MIPS0000",
  "payId":"7624c5e60252@HA",
  "dttm":"20220125131615",
  "fingerprint": {
    "browser": {
      "userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36",
      "acceptHeader":"text/html,application/xhtml+xml,application/xml;",
      "language":"en",
      "javascriptEnabled":false
    }
  },
  "signature":"base64-encoded-request-signature"
}

Příklad požadavku: (googlepay@shop, platba prováděná z mobilní aplikace s integrovaným 3DS SDK)

Obchodník předává v požadavku parametry poté, co se provedla inicializace 3DS SDK.

{
  "merchantId":"M1MIPS0000",
  "payId":"7624c5e60252@HA",
  "dttm":"20220125131615",
  "fingerprint": {
    "sdk": {
      "appID":"198d0791-0025-4183-b9ae-900c88dd80e0",
      "encData":"encrypted-data",
      "ephemPubKey": "encoded-public-key",
      "maxTimeout": 5,
      "referenceNumber":"sdk-reference-number",
      "transID":"7f101033-df46-4f5c-9e96-9575c924e1e7"
    }
  },
  "signature":"base64-encoded-request-signature"
}

Návratové hodnoty  

Položka Typ Popis
payId String Jednoznačné ID platby (přidělené platební bránou v operaci googlepay/init, obsahuje 15-znakový řetězec).
dttm String Datum a čas odpovědi ve formátu YYYYMMDDHHMMSS.
resultCode Number Výsledek operace, viz výčet.
resultMessage String Textový popis výsledku operace.
paymentStatus Number Stav platby, viz životní cyklus transakce.
statusDetail String Detailní stav platby (tzv. mikrostav), obsahuje například důvod zamítnutí platby, viz popis.
actions Object Struktura pro předání potřebných dat pro provedení potvrzení v rámci ověření platby. Viz struktura actions.
signature String Podpis odpovědi, kódováno v BASE64.

Příklad návratových hodnot pro googlepay/process (bez nutnosti provést potvrzení v rámci ověření platby)

{
  "payId":"7624c5e60252@HA",
  "dttm":"20220125131618",
  "resultCode": 0,
  "resultMessage":"OK",
  "paymentStatus": 2,
  "signature":"base64-encoded-response-signature"
 }

Příklad návratových hodnot pro googlepay/process (včetně parametrů pro provedení potvrzení v rámci ověření platby v prohlížeči zákazníka)

{
  "payId":"7624c5e60252@HA",
  "dttm":"20220125131618",
  "resultCode": 0,
  "resultMessage":"OK",
  "paymentStatus": 2,
  "actions": {
    "authenticate": {
      "browserChallenge": {
        "url":"https://example.com/challenge-endpoint"
      }
    }
  },
  "signature":"base64-encoded-response-signature"
 }

Příklad návratových hodnot pro googlepay/process (včetně parametrů pro provedení potvrzení v rámci ověření platby pomocí 3DS SDK)

{
  "payId":"7624c5e60252@HA",
  "dttm":"20220125131618",
  "resultCode": 0,
  "resultMessage":"OK",
  "paymentStatus": 2,
  "actions": {
    "authenticate": {
      "sdkChallenge": {
        "threeDSServerTransID":"eeddda80-6ca7-4b22-9d6a-eb8e84791ec9",
        "acsReferenceNumber":"3DS_LOA_ACS_201_13579",
        "acsTransID":"7f3296a8-08c4-4afb-a3e2-8ce31b2e9069",
        "acsSignedContent":"base64-encoded-acs-signed-content"
      }
    }
  },
  "signature":"base64-encoded-response-signature"
 }

Výsledek ověření a následné autorizace je potřeba zjistit následným voláním payment/status. Doba zpracování se může lišit v závislosti na tom, zda je vyžadováno potvrzení platby v rámci jejího ověření:

  • pokud potvrzení není vyžadováno, je doporučená doba volání je 2-3 vteřiny po volání googlepay/process, pokud je stav platby stále 2 (platba probíhá), doporučujeme periodicky volat v intervalu 5 vteřin (celková doba autorizace závisí na zpracování požadavku v systémech VISA/MC a může být v nejhorším případě až 60 vteřin).
  • pokud je potvrzení vyžadováno, může trvat řádově minuty, než je zákazníkem platba potvrzena a vydavatel karty dokončí ověření. V tomto případě doporučujeme volat payment/status periodicky v delším intervalu např. 30 vteřin.
⚠️ **GitHub.com Fallback** ⚠️