Project

General

Profile

Bug #64460

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

Added by Frédéric Péters 9 months ago. Updated 9 months ago.

Status:
Nouveau
Priority:
Normal
Assignee:
-
Target version:
-
Start date:
22 April 2022
Due date:
% Done:

0%

Estimated time:
Patch proposed:
Yes
Planning:
No

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).


Files

Associated revisions

Revision 9dba7d12 (diff)
Added by Frédéric Péters 9 months ago

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

History

#2

Updated by Frédéric Péters 9 months ago

À 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

Updated by Frédéric Péters 9 months ago

#4

Updated by Benjamin Dauvergne 9 months ago

  • Status changed from Solution proposée to 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

Updated by Benjamin Dauvergne 9 months ago

  • Status changed from Solution validée to Nouveau
#6

Updated by Frédéric Péters 9 months ago

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é.

Also available in: Atom PDF