Projet

Général

Profil

Bug #64460

vue paiement direct vs élément déjà payé

Ajouté par Frédéric Péters il y a environ 2 ans. Mis à jour il y a environ 2 ans.

Statut:
Nouveau
Priorité:
Normal
Assigné à:
-
Version cible:
-
Début:
22 avril 2022
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

Une vue type /lingo/item/MTUwOQ.1ngWle.9GXe4Ug1vxNNuF2qrHW61O2z2Vw/pay, prévue pour du paiement direct, sans panier.

Qui correspond à un truc payé,

 'creation_date': datetime.datetime(2022, 4, 18, 19, 10, 34, 148213, tzinfo=<UTC>),
 'cancellation_date': None,
 'waiting_date': None,
 'payment_date': datetime.datetime(2022, 4, 18, 19, 14, 49, 288307, tzinfo=<UTC>),
 'notification_date': datetime.datetime(2022, 4, 18, 19, 14, 50, 953646, tzinfo=<UTC>),

Si la vue est à nouveau appelée, ça redéclenche un trigger "paid" (qui tombe dans le vide, 404 et par mail trace d'erreur avec l'info).


Fichiers

Révisions associées

Révision 9dba7d12 (diff)
Ajouté par Frédéric Péters il y a environ 2 ans

lingo: comment is_notifiable() and do not log non-errors (#64460)

Historique

#2

Mis à jour par Frédéric Péters il y a environ 2 ans

À investiguer je tombe sur plus étrange, un item pas payé, qui déclenche aussi trigger/paid/

        for item in items:
            if not item.is_notifiable():
                messages.error(request, _('At least one item is not linked to a payable form.'))
                return HttpResponseRedirect(next_url)

is_notifiable, ça fait l'appel ?

    def is_notifiable(self, status='paid'):
        if not self.source_url:
            return True
        url = self.source_url + 'jump/trigger/%s' % status
        req = requests.get(url, remote_service='auto', timeout=5)
        if req.status_code == 404:
            return False
        return True

Grosse frayeur mais en fait le .get() ne déclenchera pas le trigger.

Je serais pour 1/ ajouter un commentaire explicite au code, 2/ ne pas envoyer de trace à l'admin quand on tombe sur une 404.

Ensuite, réflexion peut-être pour un autre ticket : on fait redirection vers la demande mais avec une demande par un usager pas authentifié, qui somehow avait noté l'url de paiement quelque part (?) et rejoue ça plus tard, ça va l'envoyer vers une demande à laquelle il n'a pas accès, ça va l'envoyer vers la page de connexion, où il ne pourra pas faire, sans doute pas terrible. (je ne lance pas d'idée).

#3

Mis à jour par Frédéric Péters il y a environ 2 ans

#4

Mis à jour par Benjamin Dauvergne il y a environ 2 ans

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

Ok pour le commentaire mais à revenir sur la situation initiale, si un item est déjà payé on ne peut pas arriver jusque là, car juste avant il y a :

        if any(item.paid for item in remote_items):
            messages.error(request, _('Some items are already paid.'))
            return HttpResponseRedirect(next_url)

PS: ok, le bug est là, ça ne parcourt que remote_items, ça devrait vérifier items aussi.

#5

Mis à jour par Benjamin Dauvergne il y a environ 2 ans

  • Statut changé de Solution validée à Nouveau
#6

Mis à jour par Frédéric Péters il y a environ 2 ans

Oui j'ai dévié en voyant la notif d'erreur aussi pour un élément pas payé, j'en fais un ticket dédié.

Formats disponibles : Atom PDF