Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Odpověď HTTP 200 na payment/process #135

Closed
janlanger opened this issue Feb 4, 2016 · 7 comments
Closed

Odpověď HTTP 200 na payment/process #135

janlanger opened this issue Feb 4, 2016 · 7 comments

Comments

@janlanger
Copy link

Jak je možné že brána na požadavek payment/process vrací HTTP 200 a žádnou hlavičku Location?

Merchant M1E3CB0860, payID 3767423803f4eBB

Celá response

SlevomatCsobGateway\Api\Response #0833
    responseCode private => SlevomatCsobGateway\Api\ResponseCode #0834
        value private => 200
    data private => NULL
    headers private => array (10)
        Server => "nginx"
        Date => "Thu, 04 Feb 2016 07:22:44 GMT"
        "Content-Type" => "text/html"
        "Transfer-Encoding" => "chunked"
        Connection => "keep-alive"
        Vary => array (2)
            0 => "Accept-Encoding"
            1 => "Accept-Encoding"
        "Cache-Control" => "no-cache, no-store, must-revalidate"
        Expires => "0"
        Pragma => "no-cache"
        "Set-Cookie" => "BIGipServerasors_platebnibrana.csob.cz_6443_pool=hyl+gHza9+v7cNzjBKM/0wuNmVa8y3I7CAz2tHjuXtl93J8L/GwqZUvG+pu1GcO30h+91uELe0ELrhMAAAAB;secure; path=/"
@dmarek
Copy link
Contributor

dmarek commented Feb 8, 2016

V logu byl poslan 303 redirect ... (nektere nepodstatne citlive udaje vynechany ...)
Nedival jste se az na vysledny druhy response?

2016-02-04 07:19:06,423 INFO ... - Inbound Message
----------------------------
ID: 400019
Address: http://..../api/v1.5/payment/process/M1E3CB0860/3767423803f4eBB/20160204071906/WVcayz1FlVunoEZPvJ0efa9Y79Ov3NEUNC%2FBL3J9ILWnQO7v5axzDE2bVYuuOeNlwdaQyc6OfnNBA5ltaxjSTJzkQ0zYyXNph1EohtHDRtQjr0leXh7K4UgAZubhJ41QXGnPGkYsVukoGQxN%2BxcvbWQb4zlSmhK6tQhC6FS4YKqK33UMW8dWSJ2.....
Encoding: UTF-8
Http-Method: GET
Content-Type: application/json
Headers: ...
--------------------------------------
2016-02-04 07:19:06,448 INFO ... - Outbound Message
---------------------------
ID: 400019
Response-Code: 303
Content-Type:
Headers: {Location=[https://platebnibrana.csob.cz/pay/www.slevomat.cz/e115807a-71fe-480a-....], Date=[Thu, 04 Feb 2016 06:19:06 GMT], Cache-Control=[no-cache, no-store, must-revalidate], Pragma=[no-cache], Expires=[0], Content-Length=[0]}

@janlanger
Copy link
Author

@dmarek Jde zřejmě o jiný požadavek se stejným payId, podle našeho logu byla url payment/process/M1E3CB0860/3767423803f4eBB/20160204082244/ZXuJVPQPAzgy7VJRUbzjVa%2BoyXTMyrZld9TAQJZTPUagV2K5%2FbAuSq0J4FaBGFdLpziMcv%2Bbq5oPJamkt65Tyj... (podpis je zkrácený) a prováděný v 08:22:44, tzn o hodinu později.

Napadá mě že v tehdy už zřejmě byla platba expirovaná. Jak brána reaguje pokud je payment/process prováděn na expirované payId?

@dmarek
Copy link
Contributor

dmarek commented Feb 8, 2016

V pripade expirovane platby se renderuje 200 OK s "cervenou chybou" a provadi se redirect zpet na eshop obchodnik a s response code 130, session expired

@janlanger
Copy link
Author

A proč se endpoint nechová stejně jako dokud platba ještě neexpirovala - nevrací URL na kterém by teprve byla "červená chyba"? Původní url ("https://platebnibrana.csob.cz/pay/www.slevomat.cz/e115807a-71fe-480a-....)" přeci zůstává dostupná i po expiraci platby. Jak máme tuhle situaci řešit a reagovat na ni? Máme považovat HTTP 200 jako chybovou odpověď? Nebo hledat v odpovědi HTML? To snad ne.

Celý tenhle endpoint navíc porušuje principy zabezpečení a způsoby komunikace které používají ostatní endpointy eAPI. Jak validní tak i tato "chybová" response neobsahuje žádný podpis, takže když to vezmu do důsledků, nemáme jak ověřit že odpověď není podvržená.

A jako už tradičně, v dokumentaci není o tomto chování ani slovo... mimochodem dokumentace obsahuje informaci, že payment/process odpovídá HTTP kódem 302 a ne 303 jak je vidět ve vašem logu.

@janbrasna
Copy link
Contributor

@janlanger Ja se zeptam co tim konkretne resite v implementaci — at vim co kdyztak pozadovat jako dalsi rozsireni od banky. Potrebujete neco jako #46 (coz snad bude brzy), nebo jde o nejaky jiny case?

@dmarek Nebylo by na vyexpirovane platbe mozna lepsi posilat 410 Gone? Nebo to muze nejak ovlivnit dalsi chovani browseru ad presmerovani atp.?

@janlanger
Copy link
Author

@janbrasna Zákazníkům umožňujeme více pokusů o platbu kartou pokud se jim nepodaří a to po 60 minut od odeslání objednávky. Pokusy si ukládáme a v případě že máme založenou platbu ale nemáme žádnou odpověď (zákazník zavře tab a platební bránou nebo něco podobného), voláme jen payment/process. V případě že máme response z brány (neúspěšnou, tzn. typicky stavy 3 a 6), zakládáme novou platbu přes payment/init + payment/process. Nechceme volat payment/init při každém pokusu protože by zákazník mohl skončit s více platnými požadavky o platbu jedné objednávky.

Asi dokážeme tuhle situaci ošetřit kontrolou stavu platby na bráně, ale chování endpointu je... zvláštní

@janbrasna
Copy link
Contributor

Jasně, tzn. obecně stav platby strojově. Na to by ta #46 měla být řešením. (Nebo custom délka platnosti transakce…) Mělo by to být snad brzy venku, kdybych něco zjistil od vendora/banky, dám vědět.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants