csob / paymentgateway

English documentation of the ČSOB Payment Gateway that offers an API for credit card payments, Apple Pay, Google Pay, mallpay and ČSOB Payment Button.
https://platbakartou.csob.cz/platebni-brana
GNU General Public License v3.0
121 stars 68 forks source link

v1.9 example: nevalidní podpis merchantData v PaymentStatusResponse #635

Closed radekhulan closed 1 year ago

radekhulan commented 2 years ago

PHP eAPI 1.9: pokud do PaymentInitRequest dám svoje merchantData , tak po návratu na returnUrl se mi tento vrátí, ale Payment(Status)Response hlásí invalid signature. Bez použití merchantData vše projde v pořádku.

janbrasna commented 2 years ago

@radekhulan Diky Radku, vypada to na bug v example validaci. Predavam…

radekhulan commented 2 years ago
  1. PaymentInitRequest s obdobou config/payment-init-base-extended.json
  2. PaymentProcessRequest a přechod na bránu ČSOB
  3. -> návrat na moji returnURL
  4. pokud je v návratu merchantData, CryptoService->verifySignature hodí Exception
janbrasna commented 2 years ago

@radekhulan Ano, je videt ze ta trida vubec takovy parametr do stringbuilderu nepridava… Nahlaseno. Diky za odchyceni!

janbrasna commented 2 years ago

Evidentne ad #630 to neni problem jen PHP, ale merchantData chybi ve validacich i C# a Java… @rlombart

michaelhillCzechia commented 2 years ago

Dobrý den, Váš požadavek byl předán na servis.

S pozdravem Bc. Michal Horák IT Support Specialist

rlombart commented 2 years ago

Dobrý den, v příkladech je uvedena třída pro volání payment/status a tato skutečne merchantData neobsahuje (https://github.com/csob/platebnibrana/wiki/Z%C3%A1kladn%C3%AD-metody#payment-status-operation): image

V případě redirectu zpět na eshop je použita struktura (https://github.com/csob/platebnibrana/wiki/Z%C3%A1kladn%C3%AD-metody#payment-process-operation): image

a tato merchantData obsahuje, co jsem teď testoval tak se provede redirect s parametry: payId=64a660e295fd%40HG&dttm=20220725141537&resultCode=0&resultMessage=OK&paymentStatus=7&authCode=448372&merchantData=c29tZS1iYXNlNjQtZW5jb2RlZC1tZXJjaGFudC1kYXRh&signature=rjdLEYvEbYtfkSJ9H2%2FiKsPepv1%2FXpOxvGBOcW1GI%2BhEr6Ld8nDmmImvM3pWsQx0PKqtFOLd3ERVUgXSZCVThlQMlsqfyUNZJjX2pWIV%2Be64T9BIFTybjMhkG3rmiZu9ZPatCRxKLsuI1TO6UCMyfTYieRHNd7B3VEnJ7nuvaTfLbt1ggqYl%2FdxEnbg9uiwD%2Bizs5BT9%2FSsELPj1RxRGzYMemV4Wy6xxRx8tmZeCJOu7u62yr58AiOG%2F7lpWuJmLcVGHjx3r43c7acIUNIwzcLFGrEF1leM%2Bd57cLAu%2FRFeHvGPvmIIRx10Tj4XjAJj1jC8VBdHCbqUABKOTb9sYcg%3D%3D

a příslušný toSign že kterého byl vygenerován podpis: 64a660e295fd@HG|20220725141537|0|OK|7|448372|c29tZS1iYXNlNjQtZW5jb2RlZC1tZXJjaGFudC1kYXRh

janbrasna commented 1 year ago

@rlombart Tzn. chapu to tak, ze PHP example neobsahuje kod na vyhodnoceni vraceneho redirectu/POSTu (kde ta merchantData jsou), ale pouze na nasledne vytazeni si payment/status vysledku (kde se ta hodnota uz nevyskytuje)?

rlombart commented 1 year ago

ano, process response nema zadnou strukturu, v examples jenom zobrazi url - brana totiz na process vraci redirect na dane url a nevraci zadna strukturovana data v json

janbrasna commented 1 year ago

@radekhulan Chapu to tak, ze vedome CryptoService v examples neni zamyslena pro produkcni provoz, a proto krom overeni podpisu odpovedi na vyjmenovana volani (napr. status) neumi jine payloady ktere mohou mimo tato example volani nastavat (jako treba predavany result na returnUrl). Pokud si myslis ze je to chybne rozhodnuti, a example kod by mel umet obslouzit i finalni navrat a je to neco co v PHP examples chybi, tak to nejlepe sdel svemu obchodnimu zastupci v bance, aby to nechal dat do pripadnych priorit na zmeny. Protoze podle dostupnych informaci to vypada, ze soucasne chovani je takto omezene vedome. 🤷