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?