Projet

Général

Profil

Bug #9039

paiement sans être loggué

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

Statut:
Fermé
Priorité:
Normal
Assigné à:
-
Version cible:
-
Début:
19 novembre 2015
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Non
Planning:
Non

Description

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


Demandes liées

Lié à Combo - Development #25547: Permettre le paiment en ligne pour un usager sans compteRejeté31 juillet 2018

Actions
Lié à Combo - Development #36875: Paiement sans authentification : ajustements dans l'APIRejeté13 octobre 2019

Actions
Lié à Combo - Development #36876: Paiement sans authentification et sans panierFermé13 octobre 2019

Actions

Historique

#1

Mis à jour par Benjamin Dauvergne il y a plus de 8 ans

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

Mis à jour par Thomas Noël il y a plus de 8 ans

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

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

  • Lié à Development #25547: Permettre le paiment en ligne pour un usager sans compte ajouté
#4

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

  • Sujet changé de paiement sans être loggué (?) à 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

Mis à jour par Emmanuel Cazenave il y a plus de 4 ans

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

Mis à jour par Emmanuel Cazenave il y a plus de 4 ans

  • Lié à Development #36875: Paiement sans authentification : ajustements dans l'API ajouté
#7

Mis à jour par Emmanuel Cazenave il y a plus de 4 ans

#8

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

  • Statut changé de Nouveau à Fermé

C'est désormais possible.

Formats disponibles : Atom PDF