csob/platebnibrana

API 1.9 Google Pay - Invalid param colorDepth

vzikmund opened this issue · 7 comments

Zdravím,
máme na produkci implementované API 1.9 včetně Google Pay a Apple Pay přímo na stránce obchodu. Platby přes tyto metody probíhají bez problému a v pořádku se zpracovávají.

Občas ale vyskočí chyba v API odpovědi:

{"resultCode": 110,"resultMessage": "Invalid param colorDepth"}

Hodnoty, které posíláme v požadavku jsou např. následující (vybral jsem dva případy různých zákazníků):

{
      "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:107.0) Gecko/20100101 Firefox/107.0",
      "acceptHeader": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
      "language": "en-US",
      "javascriptEnabled": "true",
      "colorDepth": "30",
      "screenHeight": "1050",
      "screenWidth": "1680",
      "timezone": "-60",
      "javaEnabled": "false",
      "challengeWindowSize": "05"
 }
{
      "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36",
      "acceptHeader": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
      "language": "sk-SK",
      "javascriptEnabled": "true",
      "colorDepth": "30",
      "screenHeight": "1440",
      "screenWidth": "2560",
      "timezone": "-60",
      "javaEnabled": "false",
      "challengeWindowSize": "05"
}

Mohu poprosit o info, proč je "colorDepth": "30" problémová hodnota a případně zda je možné i tak zákazníkům povolit platit?

Díky :)

Dobrý den,
Váš požadavek byl předán k řešení.
O dalším průběhu Vás budeme informovat.

@vzikmund
Dobrý den,
je to omezeno obecnou specifikací pro 3D secure.
Hodnoty parametru colorDepth mohou dle specifikace nabývat pouze těchto hodnot:
obrazek
pokud získáte z prohlížeče jinou hodnotu, měl by jste ji upravit na nejbližší povolenou hodnotu, v tomto případě tedy 30 -> 32

@mrazekl Díky za info. Upravím kód. Unikla mi tahle vlastnost, kdy Chrome může vrátit 30, ale třeba Safari vrátí 24.

Po chvilce googlení jsem našel článek - tak kdyby někdo se stejným issue se chtěl začíst. Je tam i code snippet, který by měl fungovat pro převod 30 -> 24. Na základě doporučení jsem ho upravil, abych dostal 30 -> 32.

const handler = {
  get(target, prop) {
    const propsToPatch = ["colorDepth", "pixelDepth"];
    if (propsToPatch.includes(prop) === false) {
      return target[prop];
    }
    
    const normal = [1,4,8,15,16,24,32,48];
    return normal.find((depth) => depth >= target[prop]) || 24;
  }
};
if ("Proxy" in window) {
  window.screen = new Proxy(window.screen, handler);
}

@mrazekl 3D2 server tyto hodnoty sam zaokrouhluje na nejblizsi povolene, neni proto duvod na API zamitat celou transakci jen proto, ze hodnota neni z vyctu v dokumentaci — tato validace klidne muze byt rozvolnena, pripadna nejblizsi hodnota se vybere sama v dalsi upstream komunikaci…

dmarek commented

bude opraveno v ramci EPAPG-1138 (uprava validace) a EPAPG-1139 (doplneni do dokumentace)