ClubRezo / NantarenaWebsite

Dépôt officiel des sources du site de la Nantarena. Réalisé avec le framework Symfony 2.3.
http://www.nantarena.net
0 stars 6 forks source link

Bundle de paiement #24

Closed OlivierB closed 9 years ago

OlivierB commented 11 years ago

Après l'inscription à l’événement, il y a le paiement.

Après avoir jeté un coup d'oeil à des bundles déjà fait (JMSPaymentPaypal), je n'ai pas trouvé quelque chose à mon gout. Un système basique comme on a besoin demande 1 bouton et une page php de retour pour validation. En cas de besoins plus exigeants quelques lignes de cette nouvelle paypal RESTful API feront l'affaire. Le plus complexe est au niveau des options proposées.

Il faut définir les possibilités de paiement :

Le problème des cas particuliers (Joueuses et gagnant des dernières éditions) .

Je propose un système de coupons :

C'est le seul système que j'ai trouvé pour avoir quelque chose d'adaptatif et cohérent. Ca ouvre de nombreuses possibilités pour des innovations futures.

Je ne compte pas implémenter de système de remboursement (au moins au niveau paypal). Libre aux futur admin de le faire.

Pour le paiement, je propose un système de transactions :

Si on se contente d'un paiement par personne sans gestion de remboursement on peut mettre sur la table d'inscription d'un joueur à un événement un champ qui contient l'id de la transaction (ou nul si non payé).

Pour pouvoir gérer le paiement multiple et les remboursements, je propose une table intermédiaire entre les inscrits et la transaction. S'il y a une transaction pour 5 personnes, cette table contient 5 lignes.

Problème visibles :

Toute autre solution ou structure est bienvenue.

Jaconil commented 11 years ago

ping @KenTiN, @Lulububu, @alexandrescieux

Jaconil commented 11 years ago

Je suis tout de même un petit peu réservé sur ton système de coupons... ça me paraît un peu compliqué d'un point de vue joueur...

OlivierB commented 11 years ago

je me disais qu'une presentation comme sur les sites machants ne perturberiat pas trop les joueurs.

Quelque soit le systeme, il faut que :

Si on fait un systeme de paiement 1 par 1, l'ensemble est relativement simple.

Jaconil commented 11 years ago

donc tu crois que si on donne un code de réduction "NA133CSGO" à un joueur pour une prochaine édition, il va s'en rappeler pendant 6 mois ? Personnellement je paris qu'il y aura un mail ou un post sur le forum "Eh, j'ai gagné la dernière édition, mais c'est encore marqué que je dois payer sur le site, vous pouvez me passer en payé svp ?" ...

OlivierB commented 11 years ago

Pour les gagnant, je pensais utiliser un coupon unique attribue a la personne. Ca veut dire que l'id de l'utilisateur est integre dans le coupon.

Il est donc facile de faire une page de paiement "Choix de vos coupons" qui affiche les coupons que la personne possede (checkbox pour la selection). Puis une seconde categorie "Coupons du moment" qui contient celui pour les filles.

Donc un gagnant n'a rien besoin de se souvenir et heureusement !

Maintenant, si un coupon est offert par un de nos partenaires, c'est sur que la il aura beosin du code du coupon.

Jaconil commented 11 years ago

Ben au pire pour les gagnants oui faudrait associer automatiquement le coupon au joueur dans l'admin. Pourquoi la page "sélection de vos coupons" ? Les coupons sont automatiquement appliqués si le joueur en a non ?

OlivierB commented 11 years ago

Ben au pire pour les gagnants oui faudrait associer automatiquement le coupon au joueur dans l'admin.

Et la reponse :

A la fin d'une LAN, on pourras associer un coupon pour chaque gagnant. Ce système peut être facilement automatiser pour créer des coupons pour toute l'équipe avec un simple bouton

Et :

Pourquoi la page "sélection de vos coupons" ? Les coupons sont automatiquement appliqués si le joueur en a non ?

Ca implique que tu es pour ce systeme ? c'est un detail pas vraiment defini. Si la personne a deux coupons ?

J'aimerais aussi les reactions de @KenTiN @Lulububu @alexandrescieux si possible ;) N'hesitez pas a proposer un autre systeme...

Jaconil commented 11 years ago

Penser également à gérer le cas des gens payant au BDE ou lors des préinscriptions à l'école.

Lulububu commented 11 years ago

J'en ai pas mal parlé avec Olivier IRL. Cela me paraît être la solution la plus souple pour nous et user friendly.

Pour les preinscriptions, il y a deux possibilités.

Je préfère utiliser à fond le système de coupon perso.

Jaconil commented 11 years ago

Moi je voudrais vraiment minimiser l'utilisation des coupons par les joueurs eux-même... c'est trop compliqué selon moi. Eux ce qu'ils veulent c'est juste s'inscrire. Pas "ah oui mais attends parce qu'il faut que j'utilise ce coupon qu'on m'avait donné, pour que je puisse m'inscrire avec un prix réduit, ah ouais mais alors je clique où du coup pour m'inscrire avec le coupon, mais... oh la la c'est compliqué jvais poster sur le forum ils vont le faire pour moi basta".

Pour information, les autres fois il y avait des comptes joueurs que je créais moi-même pour ceux qui venaient payer à l'école.

OlivierB commented 11 years ago

Et tu trouves ca normal de devoir creer un nouveau compte toi meme ?

Il vient te payer en liquide, s'il a un compte tu valides la transaction (pas besoin de coupon) sinon, tu lui crees un coupon "tiquet" qu'il utilisera lors du paiement pour valider sa place apres s'etre cree un compte.

Prends pas non plus les joueurs pour des idiots. Les coupons n'ont rien d'un systeme innovant. Tu trouves la meme chose sur tous les sites marchant.

64q commented 11 years ago

Et tu trouves ca normal de devoir creer un nouveau compte toi meme ?

D'ailleurs sur ce point il faudra toujours pouvoir le faire @Jaconil non ? Je sais que tous les gens ne sont pas inscrits sur le site et ça permettrait de le faire lors des inscriptions comme tu l'as souligné.

Pour le système de coupon je suis moyennement chaud, si un joueur a gagné l'édition précédente il vaut mieux qu'on mette un lien vers le formulaire de contact et un admin validera sa participation. Vaut mieux garder cet aspect manuel, encore une fois ça fonctionne très bien si quelqu'un s'en charge humainement.

Jaconil commented 11 years ago

D'ailleurs sur ce point il faudra toujours pouvoir le faire @Jaconil non ?

C'est déjà possible.

OlivierB commented 11 years ago

Vaut mieux garder cet aspect manuel, encore une fois ça fonctionne très bien si quelqu'un s'en charge humainement.

Ok je propose un super truc : on garde l'ancien site !

Tout ce que l'on fait, onl'a deja sur l'ancien site ! Pourquoi perdre notre temps a en faire un nouveau ?

En fait je propose :

Il ne reste plus qu'a enfermer @Jaconil dans un bureau pour faire croire au gens que tout se fait en live.

Jaconil commented 11 years ago

et puis on a Maxime pour aller faire les modifications en base de donnees

Hélas ce module souffre de plusieurs bugs critiques...

OlivierB commented 11 years ago

Voila le système que je compte mettre en place. Je ne présente pas les coupons ici, c'est un second temps.

Comme, je vous l'ai expliqué, une fois une action de paiement effectuée, elle n'est plus modifiable (cas particulier sur certain type de paiement fait par les admin)

Pour sauvegarder un paiement, j'ai besoin de 3 tables:

J'ai assez de données en dur dans ces deux tables pour pouvoir reconstruire un paiement cohérent. Et je me base sur des champs suffisamment "solides" pour éviter des pertes d'information

Les règles:

requête : le paiement valide d'un joueur peut facilement être retrouvé avec user-id, event-id et refund-id == null.

Maintenant, il serait bien de voir comment lier une transaction avec une Entry (user-id; event-id)

  1. pas de liaison, on se contente de la requête précédente:
    • requête un peu plus complexe
    • plus lourd pour le système
  2. je peux mettre une Entry à la place de user-id et event-id dans la transaction :
    • si la place (Entry) est supprimée, je perds la raison du paiement
    • peut être corrigé par un champ text desc construit automatiquement dans le paiement (beurk)
  3. Un transaction-id intégré à la table Entry:
    • si le champ est null, la personne n'a pas payé
    • sinon il contient l'id de la transaction
    • L'information est, d'une certaine manière, doublée puisqu'on pourait la calculé (0)
    • pour moi, c'est un gain de performance et ça apporte une liaison simple avec l'Entry, ou plutôt, on peut facilement retrouver la transaction valide liée à la place.
  4. donnez moi des idées !

je suis pour la 3 perso -_-

D'autre idées de champs important pour le système ?

OlivierB commented 11 years ago

Je viens d'avoir un imprévu.

Jaconil commented 11 years ago

C'est une faille critique

Jaconil commented 11 years ago

Pourquoi n'associerais-tu pas la transaction au couple User / Event ?

OlivierB commented 11 years ago

Je le fais déjà @Jaconil mais en fait, quand je récupère la transaction en cours, j'ignore l'évent associé pour éviter d'avoir a passer le slug event a chaque fois.

En revanche il n'y a pas de risque de confondre 2 events

OlivierB commented 11 years ago
OlivierB commented 11 years ago

@Jaconil @KenTiN Vous pouvez check mon essai pour garder l'integrite de la BDD ici

J'ai l'impression qu'il y a encore une erreur qui peut s'intercaler entre mon validator et mon flush.

Il faut peut etre rajouter une fonction qui verifie l'integrite complete juste avant le commit ?