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:
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…
bude opraveno v ramci EPAPG-1138 (uprava validace) a EPAPG-1139 (doplneni do dokumentace)