Projet

Général

Profil

Bug #37214

type de données sur POST de callback

Ajouté par Frédéric Péters il y a plus de 4 ans. Mis à jour il y a plus de 4 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
-
Version cible:
-
Début:
25 octobre 2019
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

Sur un GET de callback on récupère environ['QUERY_STRING'] et c'est une str mais sur un POST on récupère request.body qui est bytes; assurons-nous en fin de course qu'eopayment reçoit bien du texte.


Fichiers

Révisions associées

Révision 3be27ce1 (diff)
Ajouté par Frédéric Péters il y a plus de 4 ans

lingo: make sure eopayment is given a string (#37214)

Révision 4f5b0d91 (diff)
Ajouté par Frédéric Péters il y a plus de 4 ans

lingo: make sure eopayment is given a string (#37214)

Historique

#1

Mis à jour par Frédéric Péters il y a plus de 4 ans

#2

Mis à jour par Paul Marillonnet il y a plus de 4 ans

Je préférerais voir ça apparaître dans les (apparemment seulement deux) fonctions appelantes :

diff --git a/combo/apps/lingo/views.py b/combo/apps/lingo/views.py
index 18670f6..d47f373 100644
--- a/combo/apps/lingo/views.py
+++ b/combo/apps/lingo/views.py
@@ -569,7 +569,7 @@ class CallbackView(PaymentView):
         return self.handle_callback(request, request.environ['QUERY_STRING'], **kwargs)

     def post(self, request, *args, **kwargs):
-        return self.handle_callback(request, request.body, **kwargs)
+        return self.handle_callback(request, force_text(request.body), **kwargs)

     @csrf_exempt
     def dispatch(self, *args, **kwargs):
@@ -587,7 +587,7 @@ class ReturnView(PaymentView):
         return self.handle_return(request, request.environ['QUERY_STRING'], **kwargs)

     def post(self, request, *args, **kwargs):
-        return self.handle_return(request, request.body, **kwargs)
+        return self.handle_return(request, force_text(request.body), **kwargs)

     def handle_return(self, request, backend_response, **kwargs):
         transaction = None

#3

Mis à jour par Frédéric Péters il y a plus de 4 ans

Ok, j'avais un peu peur, peut-être en imaginant une dimension avec environ['QUERY_STRING'] qui serait bytes. Mais faisons ainsi.

#4

Mis à jour par Paul Marillonnet il y a plus de 4 ans

  • Statut changé de Solution proposée à Solution validée

On fera un ticket supplémentaire si jamais cette dimension se méta-cristallise dans la nôtre.

#5

Mis à jour par Frédéric Péters il y a plus de 4 ans

  • Statut changé de Solution validée à Résolu (à déployer)
commit 3be27ce16bc73378dae0350a3578c11c49017bc8
Author: Frédéric Péters <fpeters@entrouvert.com>
Date:   Fri Oct 25 09:49:10 2019 +0200

    lingo: make sure eopayment is given a string (#37214)
#6

Mis à jour par Frédéric Péters il y a plus de 4 ans

Pour mémoire, pas encore déployé, la trace qui correspond est :

File "/usr/lib/python3/dist-packages/combo/apps/lingo/views.py" in post
  572.         return self.handle_callback(request, request.body, **kwargs)

File "/usr/lib/python3/dist-packages/combo/apps/lingo/views.py" in handle_callback
  561.             self.handle_response(request, backend_response, **kwargs)

File "/usr/lib/python3/dist-packages/combo/apps/lingo/views.py" in handle_response
  472.             payment_response = payment.response(backend_response)

File "/usr/lib/python3/dist-packages/eopayment/__init__.py" in response
  174.         return self.backend.response(query_string, **kwargs)

File "/usr/lib/python3/dist-packages/eopayment/systempayv2.py" in response
  369.         fields = urlparse.parse_qs(query_string, True)

File "/usr/lib/python3.5/urllib/parse.py" in parse_qs
  577.                       encoding=encoding, errors=errors)

File "/usr/lib/python3.5/urllib/parse.py" in parse_qsl
  629.             value = _coerce_result(value)

File "/usr/lib/python3.5/urllib/parse.py" in _encode_result
  95.     return obj.encode(encoding, errors)

Exception Type: UnicodeEncodeError at /lingo/callback/3/
Exception Value: 'ascii' codec can't encode character '\xe9' in position 28: ordinal not in range(128)
#7

Mis à jour par Frédéric Péters il y a plus de 4 ans

  • Statut changé de Résolu (à déployer) à Solution déployée

Formats disponibles : Atom PDF