GP webpay

331 views
Skip to first unread message

Michal Raška

unread,
Jun 18, 2014, 12:29:56 PM6/18/14
to djan...@googlegroups.com
Ahojte,

měl bych dotaz (lehce offtopic) na někoho, kdo implementoval GP webpay (což by mělo být velice podobné MUZO paymentu).
Hodně jsem se inspiroval https://github.com/yedpodtrzitko/django-muzo-payment a až na pár detailů (třeba že tahám privátní klíč spolu s veřejným klíčem ze souboru, a krapet jsem upravil některé metody), jsem moc změn nedělal.

Co je ale zásadní změna oproti MUZO, je odpověď od banky, kde očekávám parametry následně: 'OPERATION', 'ORDERNUMBER', 'MERORDERNUM', 'MD', 'PRCODE', 'SRCODE', 'RESULTTEXT' a za nimi ještě následuje DIGEST a DIGEST1, které slouží k ověření, že parametry cestou nikdo nezměnil.
No a nějak se mi nedaří ověřovat pomocí DIGEST a už vůbec ne DIGEST1.

Kód pro ověření parametrů digestem má podobu:
user_cert = M2Crypto.X509.load_cert(self.gp_public_key_file)
pub_key = user_cert.get_pubkey()
pub_key.verify_init()
pub_key.verify_update(text_params)
is_valid = pub_key.verify_final(digest)

kde:
gp_public_key_file je cesta k souboru s certifikátem (gpe_key.pem)
text_params je string, který generuju z requestu a má podobu: "CREATE_ORDER|348|||0|0|OK"
a digest je string co mi posílá banka takže: request.GET['DIGEST']

is_valid může nabývat hodnot:
1 - ok
0 - digest nesedí
-1 - nějaká chyba

A když si to zkouším, tak pokaždé mi verifikace neprojde a is_valid má hodnotu 0.

Privátní klíč tahám z toho samého souboru (gpe_key.pem), kterým jsou podepsány parametry odesílané bance a všechno OK, takže kódování souboru s klíčem si myslím je v pořádku; pořadí parametrů, ze kterých skládám string pro ověření digestem jsem kontroloval několikrát, tak snad nejsem úplně slepý :-) a jinak nevím v čem by mohla být krpa...?

Netušíte někdo?

yedpodtrzitko

unread,
Jun 18, 2014, 1:50:48 PM6/18/14
to djan...@googlegroups.com
Pamatuju si, ze jsme tam taky meli nejake problemy s overovanim. Teda spis "nepamatuju" - nepamatuju kde presne v kodu to bylo, ale to overeni nefungovalo, kdyz se na nejaky parametr predal jako unicode namisto stringu (nebo obracene).

Michal Raška

unread,
Jun 19, 2014, 3:57:50 AM6/19/14
to djan...@googlegroups.com
Já jich ze začátku měl... Protože jsem si říkal, že v pohodě, napíšu to sám, jenže jak jsem to napsal, tak mi brána odpovídala furt 403-kou, no, nevěděl jsem si rady, tak jsem se podíval do vašeho projektu, kde generujete parametry url v přesném pořadí, stejně jak je potřeba z nich pak vytvořit digest (což by mě nikdy nenapadlo, že může hrát roli), a pak ještě kód měny, používal jsem znakový a brána vyžadovala číselný, přitom je to jedno a to samé ISO :-).

Jenže i když jsem už pak zkopíroval zpracování odpovědi od banky (kde se ověřují parametry digestem na naší straně), protože jsem nechtěl dál experimentovat, tak to i tak stále nefunguje. Zkoušel jsem převést digest z unicode na string, to samé s textovými parametry (ve stringu oddělené pomocí |) a nic.. Fakt to nemáte nikdo funkčně implementované? Byli bychom ochotni za funkční řešení i zaplatit.


Dne středa, 18. června 2014 19:50:48 UTC+2 yedpodtrzitko napsal(a):

Petr Pokorny

unread,
Jun 19, 2014, 3:53:14 PM6/19/14
to djan...@googlegroups.com
Ahoj,

udělal jsem to před pár lety podle návodu, co k tomu poslali. Už si moc nevzpomínám na detaily, ale do teď to funguje. Tady je výtah [1].
Možná je problém, že v tom text_params nesmíš mít ty prázdný hodnoty?

[1] https://gist.github.com/0101/ec952638b7b81efc91b9


--
--
E-mailová skupina djan...@googlegroups.com
Správa: http://groups.google.cz/group/django-cs

---
Tuto zprávu jste obdrželi, protože jste přihlášeni k odběru skupiny „django-cs“ ve Skupinách Google.
Chcete-li zrušit odběr skupiny a přestat dostávat e-maily ze skupiny, zašlete e-mail na adresu django-cs+...@googlegroups.com.
Další možnosti najdete na https://groups.google.com/d/optout.

Michal Raška

unread,
Jun 20, 2014, 6:33:00 AM6/20/14
to djan...@googlegroups.com
Díky,
sice mi to stále nejede, ale rozdíl jsem měl v tom, že jsem počítal i s parametry, které nebyly v requestu a že jsem nedekódoval digest.
Udělal jsem i to, že jsem zkusil celou metodu webpay_response překopírovat, kde WEBPAY_CERT byla cesta k souboru gpe_key.pem, ale stále verification_result == 0.

Tím pádem, jestli že to funguje, si to nedovedu vysvětlit jinak, než že musím mít špatný certifikát (používám soubor gpe_key.pem, který se používá i k vygenerování digestu pro request na bránu).
Zkoušel jsem z gpe_key.pem vytáhnout jen úsek certifikátu a hodit ho do odděleného souboru, jehož cestu jsem předával metodě X509.load_cert, ale výsledek stejný.
Žádné jiné pem soubory jsem nedostal a ty s příponou cer, ks, pfx; pokud se nepletu, přece nepotřebuji. Nebo se platu?


Dne čtvrtek, 19. června 2014 21:53:14 UTC+2 Petr Pokorny napsal(a):

Michal Raška

unread,
Jun 23, 2014, 7:45:29 AM6/23/14
to djan...@googlegroups.com
Tak kód od Petra funguje.

Chyba byla z poloviny ve mě a z poloviny u GP. Díky neznalosti jsem používal náš veřejný klíč, ale jak jsem zjistil, že je to blbost, tak jsme zažádali GP o jejich veřejný klíč, který, jak na potvoru, nám poslali chybný :-). Až když zaslali i soubor s cer příponou, tak jsem si pomocí openssl z něj vygeneroval soubor s příponou .pem a jede to.

Díky moc za pomoc.

Michal

Dne pátek, 20. června 2014 12:33:00 UTC+2 Michal Raška napsal(a):

Petr Chalupný

unread,
Jun 24, 2014, 2:08:46 PM6/24/14
to djan...@googlegroups.com
Ahoj,

nahodil jsem na github kod, ktery jsem vytvoril pro komunikaci s Muzo GP webpay... tak treba se bude nekomu hodit.


P.

Dne středa, 18. června 2014 18:29:56 UTC+2 Michal Raška napsal(a):
Reply all
Reply to author
Forward
0 new messages