bcurtu / django-sermepa

Use Redsys/sermepa Virtual POS with django (payments, recurrent payments and refunds)
MIT License
32 stars 31 forks source link

Problemas codificación Merchant_parameters con Python 3 #22

Open poor-man opened 5 years ago

poor-man commented 5 years ago

Buenas

Estoy teniendo algún problema con la compatibilidad con Python 3 ¿finalmente funciona?

Por mi parte no he sido capaz. He usado el código #19 ligeramente modificando la función sign_hmac256, ya que hmac.new().digest() va a dejar de usarse en favor de hmac.digest() (aunque usando el método antiguo tampoco funciona), pero por lo demás es exactamente igual.

Cuando intento realizar un pago Redsys me devuelve el error SIS0431 - Error del objeto JSON que se envía codificado en el parámetro Ds_MerchantParameters Por lo que entiendo que el error debe estar en la codificación base64 del Merchant_Parameters, es decir, en las dos líneas de la función encode_parameters, la cual por cierto funcionaba perfectamente en Python 2.7.

Lo único extraño que he podido averiguar es que la función sign_hmac256 devuelve objetos diferentes para la misma entrada en 2.7 y 3.7 (usando exactamente la misma función).

poor-man commented 5 years ago

Lo encontré

En Pyton 3.7, el tipo de lo que devuelven las funciones encode_parameters y sign_hmac256 (dentro de utils.py) es bytes, pero Redsys necesita que estos parámetros sean una cadena de texto, por lo que hay que aplicarles un .decode('utf-8') antes de enviarlos.

bcurtu commented 5 years ago

Hola, Te recomiendo rehacer el código, o como mínimo hacer un fork. Yo hace bastante que no actualizo este repo. En cualquier caso, gracias por tus notas, aquí quedará por si alguien se lo encuentra en el futuro.