Project

General

Profile

Bug #9039

paiement sans être loggué

Added by Frédéric Péters almost 4 years ago. Updated 7 days ago.

Status:
Nouveau
Priority:
Normal
Assignee:
-
Target version:
-
Start date:
19 Nov 2015
Due date:
% Done:

0%

Patch proposed:
No
Planning:
No

Description

C'est peut-être quelque chose dont on aurait besoin; à discuter un peu avant de réfléchir à la manière de faire.


Related issues

Related to Lingo - Development #25547: Permettre le paiment en ligne pour un usager sans compte Rejeté 31 Jul 2018
Related to Lingo - Development #36875: Paiement sans authentification : ajustements dans l'API Nouveau 13 Oct 2019
Related to Lingo - Support #36876: Paiement sans authentification : vue d'attente après paiement sur la plateforme de paiement Nouveau 13 Oct 2019

History

#1 Updated by Benjamin Dauvergne almost 4 years ago

Pour la manière je ne saurai dire, mais pour l'usage ce qui était évoqué pour Orléans c'est la possibilité d'avoir une URL qui permette de payer une facture/un pannier sans authentification; la page devra donner des informations minimales sur le paiement, juste un intitulé, les dates d'émission et de limite de paiement et un montant et non pas la totalité de la facture ou son PDF.

#2 Updated by Thomas Noël almost 4 years ago

C'est très utile pour permettre à une personne de demander à un tiers de régler une facture. Ceci étant, il faut permettre le paiement tout en diffusant un minimum d'information sur l'objet à payer ; typiquement pas d'accès au PDF détaillant la facture (lieu de scolarisation des enfants, pointages horaires, etc).

Ce qui est en place à Orléans :
  • une URL permet d'accéder à une vue HTML de la facture (avec info minimale, typiquement description+montant dû) ; cette URL comporte un "secret" (code sur 6 à 10 caractère), un code d'accès
  • cette vue de la facture est enrichie si un utilisateur est loggué et qu'il est propriétaire de la facture (on lui présente aussi les détails, lien vers le PDF, etc)

Cette URL "avec un petit code" peut être envoyée au compte lié à la facture dans un mail, ce qui lui permet de la payer rapidement sans se logguer, mais aussi de la diffuser à qui il veut, pour en demander le paiement.

NB: on ajoute un "petit code secret" car les numéros de factures sont en général séquentiels et très faciles à deviner, donc une URL https://lingo/invoice/F987123/ ne suffit pas, on doit y ajouter https://lingo/invoice/F987123/?code=7J9jd81

A noter que dans ce cadre, on ne permet pas de grouper un ensemble de factures à payer... ça serait un peu plus compliqué à faire, je pense, ergonomiquement surtout (faire une interface compréhensible par celui qui envoie les choses à payer, puis par celui qui doit les payer).

Voilà, à voir comment on veut généraliser/améliorer.

#3 Updated by Frédéric Péters about 1 year ago

  • Related to Development #25547: Permettre le paiment en ligne pour un usager sans compte added

#4 Updated by Frédéric Péters about 1 year ago

  • Subject changed from paiement sans être loggué (?) to paiement sans être loggué

Parce que la question est revenue, concernant des éléments à payer qui arriveraient via wcs, (et donc la notion de panier dans combo), pour suivre les commentaires posés ci-dessus le plan pourrait être d'offrir un accès direct à un "basketitem" pour payer celui-ci, comme on a lingo/item/(?P<regie_id>[\w,-]+)/(?P<item_crypto_id>[\w,-]+)/ aujourd'hui pour les factures.

#5 Updated by Emmanuel Cazenave 7 days ago

Je remet les élément posés par Fred dans la thread de mail "Paiement en ligne obligatoire pour les collectivités, chiffrage de #9039".

1/ autoriser l'API l'ajout d'éléments à payer ne précisant pas
d'usager :

@ -125,7 +125,7 @ class AddBasketItemApiView(View):
elif request.GET.get('email'):
user = User.objects.get(email=request.GET.get('email'))
else:
- raise Exception('no user specified')
+ user = None
except User.DoesNotExist:
raise Exception('unknown user')

2/ inclure un bout de signature dans l'URL, pour faire genre, (il y a
aussi un truc de crypto_id pour les factures, je ne sais plus trop
pourquoi on s'était trouvé à faire ça)

@ -166,7 +166,7 @ class AddBasketItemApiView(View):
item.save()
item.regie.compute_extra_fees(user=item.user)

- payment_url = reverse('basket-item-pay-view', kwargs={'item_id': item.id})
+ payment_url = reverse('basket-item-pay-view', kwargs={'item_id': item.id, 'signature': XXX})
return JsonResponse({'result': 'success', 'id': str(item.id),
'payment_url': request.build_absolute_uri(payment_url)})

3/ lors du paiement, s'il y a cette signature, ne pas vérifier
l'usager,

@ -406,16 +406,18 @ class PayView(PayMixin, View):
class BasketItemPayView(PayMixin, View):
def get(self, request, *args, **kwargs):
next_url = request.GET.get('next_url') or '/'
- if not (request.user and request.user.is_authenticated()):
- return HttpResponseForbidden()
+ if not valid_signature(...):
+ if not (request.user and request.user.is_authenticated()):
+ return HttpResponseForbidden(
('No item payment allowed for anonymous users.'))

item = BasketItem.objects.get(pk=kwargs['item_id'])
regie = item.regie
if regie.extra_fees_ws_url:
return HttpResponseForbidden(_('No item payment allowed as extra fees set.'))

- if item.user != request.user:
- return HttpResponseForbidden()
+ if not valid_signature(...):
+ if item.user != request.user:
+ return HttpResponseForbidden(
('Wrong item: payment not allowed.'))

return self.handle_payment(request, regie, [item], [], next_url)

#6 Updated by Emmanuel Cazenave 1 day ago

  • Related to Development #36875: Paiement sans authentification : ajustements dans l'API added

#7 Updated by Emmanuel Cazenave 1 day ago

  • Related to Support #36876: Paiement sans authentification : vue d'attente après paiement sur la plateforme de paiement added

Also available in: Atom PDF