Transaction : créer des formulaires avec paiement en ligne

Transaction est une extension du plugin de création de formulaires Formidable pour concevoir des formulaires de paiement en ligne et les connecter aux principales API bancaires françaises.

Attention, l’interface de paiement avec les prestataires bancaires n’est plus maintenue dans ce plugin. On préfèrera l’alternative Paiement avec Formidable qui utilise le plugin de gestion des prestataires bancaires https://github.com/nursit/bank

Présentation

Transaction introduit 3 nouveaux types de champs, qui modifieront le comportement d’un formulaire lorsque ceux-ci lui sont ajoutés.

Un champ “montant fixe” pour définir un prix
Ce champ offre la possibilité de définir un montant qui sera associé au formulaire. C’est le montant qui sera réglé par le visiteur après avoir validé le formulaire. Ce mode est le mode classique pouvant être utilisé pour l’achat d’un produit.

Deux champ “saisie montant” et “sélection montant” : c’est l’internaute qui choisit le montant à payer
Ces deux champs offrent au visiteur la possibilité de saisir un montant libre ou de sélectionner un montant parmi une liste de montant proposés. Ce mode de fonctionnement est utilisable par exemple dans le cas d’un formulaire de don.

L’interface de paramétrage des traitements associés au formulaire est complétée de nouveaux traitements dédiés au paiement en ligne : un traitement par module de paiement bancaire.

Modules de paiement livrés avec les plugin

CMCIC Crédit Mutuel, CIC, Banque OBC,..
PAYPAL Paypal
CHEQUE Paiement par chèque
VIREMENT Paiement par virement
ATOS Société Générale, BNP Paribas (Mercanet)
PAYBOX Crédit coopératif, La poste,...

Ce sont des adaptations des modules de paiement Thélia.

Installation

Le plugin transaction s’installe comme tout plugin SPIP et requiert l’installation préalable du plugin Formidable.

Appel du formulaire

Il est possible d’appeler le formulaire formidable en l’appelant par son id

  • dans un article <formulaire|formidable|id=34> ou bien <formulaire|formidable|id=contact>
  • depuis un squelette : #FORMULAIRE_FORMIDABLE{34} ou bien #FORMULAIRE_FORMIDABLE{contact} ; il est alors possible de passer en paramètre la valeur de certains champs par exemple celui du montant fixe #FORMULAIRE_FORMIDABLE{contact, #ARRAY{montant_fixe_1, Ma valeur}}

ou d’utiliser le modèle transaction pour appeler le formulaire en passant en paramètre la valeur du champ.

  • dans un article <transaction|id=contact|montant_fixe_1=Ma valeur>

Message de retour du formulaire

Attention : il ne faut pas utiliser le « message de retour » de formidable dans la configuration du formulaire sinon celui-ci prends le devant et aucun mode de paiement ne s’affiche à la validation du formulaire.

Paramétrage

Documentation extraite des modules Thélia et adaptée pour Transaction

  • Paramétrage CMCIC
    • Editez le fichier paiement/cmcic/config.php et configurez les variables avec les données que vous a fournit votre banque.
    • La banque vous fournira toutes les valeurs (exceptées les url de retour)
    • Pour utiliser la réponse automatique, vous devrez fournir l’url à appeler à votre banque. Renommez paiement/cmcic/paiement_cmcic_confirmation.php avec un nom personnalisé (ex : confirmdupond2011.php)
    • Dans l’onglet “configurer les traitements” associé au formulaire, indiquez quelle API bancaire doit être appelée parmi CIC, Crédit Mutuel ou Banque OBC, et activez le mode test ou le mode production.
  • Paramétrage Paypal
    • Dans l’onglet “configurer les traitements” associé au formulaire, indiquez simplement l’adresse email du compte à créditer.

L’Environnement de test PayPal permet de tester la plupart des aspects du système PayPal incluant la notification instantanée de paiement. Pour effectuer un test sur l’Environnement de test :

-  1. Créez un compte développeur dans l’Espace Intégration http://developer.paypal.com
-  2. Créez un compte Personnel dans l’Environnement de test et ajoutez une carte bancaire.
-  3. Créez un compte Business dans l’Environnement de test puis ajoutez et confirmez un compte bancaire.
-  4. Dans votre bouton PayPal et le script de gestion NPI, utilisez l’URL https://www.sandbox.paypal.com/cgi-bin/webscr là où vous utiliseriez normalement https://www.paypal.com/cgi-bin/webscr.
-  5. Procédez à un paiement en utilisant l’email et le mot de passe du compte Personnel pour la connexion.

  • Paramétrage Paybox
    • Renommez paiement/paybox/paiement_paybox_confirmation.php avec un nom personnalisé (ex : confirmdupond2011.php)
    • Editez le fichier paiement/paybox/paiement.php et remplacez les valeurs par les valeurs fournies par paybox.
  • Paramétrage ATOS
    • Copiez les binaires fournis par ATOS dans le répertoire paiement/atos/bin/
      il s’agit de request et response
    • Renommez paiement/atos/paiement_atos_confirmation.php avec un nom personnalisé (ex : confirmdupond2011.php)
    • Copiez le contenu du certificat fourni par votre banque dans paiement/atos/conf/certif.fr.xxxxxxxxxxxxxxx
    • Editez le fichier paiement/atos/conf/parcom.xxxxxxxxxxxxxxx et indiquez les bonnes url (n’oubliez pas de remplacer paiement_atos_confirmation.php par votre nom personnalisé)
    • Renommez les fichier paiement/atos/conf/certif.fr.xxxxxxxxxxxxxxx et paiement/atos/conf/parcom.xxxxxxxxxxxxxxx
      remplacez tout simplement les xxxxxxxxxxxxxxx par votre n° de marchand
    • Editez le fichier paiement/atos/paiement.php et inscrivez votre n° de marchand.

Sécurité des données bancaires et validation des paiements

Tous les paiements bancaires s’effectuent sur le site des banques, aucune donnée bancaire (numéro de carte, code de vérification, ...) n’est traitée dans l’environnement SPIP.

Comme dans tout module de vente en ligne, il convient de toujours vérifier qu’un paiement a été effectivement réalisé dans l’espace d’administration de vos paiements reçus, fourni par votre banque.

Exemple - démo

Voici un formulaire en phase de mise en place, que vous pouvez tester. Le portail CMN utilisé ici ne traitant que le montant, le formulaire se charge de recueillir les coordonnées complètes du donateur. Dans le cas d’un paiement par Paypal, cela serait inutile puisque Paypal se charge déjà de les recueillir (autre exemple à venir).

Discussion

47 discussions

  • 8

    Oui, j’ai compris çà après avoir posté.
    Mais quid de mon problème de phase de paiement zappée ? Quelqu’un d’autre à le même problème ?
    Merci Eric.
    pour voir en ligne

    • A noter qu’il ne faut pas utiliser le « message de retour » de formidable dans les configurations du formulaire, sinon celui-ci prend le devant sur transaction. (je vais le préciser dans la doc)

      Est-ce bien le cas pour ton formulaire ?

    • Et bien oui, le problème venait de là...
      Merci pour cette précieuse remarque qui rend mon formulaire fonctionnel. A préciser dans la doc, oui, en gros ! ;-)
      Merci Eric.

    • Je viens de l’ajouter dans la doc.
      En fait il faudrait modifier formidable pour qu’il contrôle si des traitements externes sont prévu afin qu’il n’applique le message de retour qu’en dernier recours.

    • C’est à moi de faire çà ? ou bien c’est prévu dans l’évolution du plugin formidable ?
      Parce que je ne sais pas si je saurais faire.
      Bon, maintenant que je passe à l’écran Paiement, il se trouve que mon raccourci @montant_fixe_1@ n’est pas remplacé dans le texte qui s’affiche à l’écran.

      Voici le texte saisi dans le champ de configuration du Paiement par chèque

      <h3>Paiement par chèque.</h3>
      <p>Veuillez envoyer votre règlement de @montant_fixe_1@ € par chèque à l'ordre de SOCIETE et à l'adresse :</p> <p>ADRESSE</p>
      <p>Votre réservation sera validée à réception du paiement.</p>

      De même, le tableau construit avec l’écriture Spip pour les données du paiement bancaire (avec les « pipe ») n’apparait pas correctement.

      Tu peux tester un envoi : les messages arrivent chez moi.

      Et puis, tant que j’y suis, est-il possible de préciser dans le mail reçu par le client quel mode de paiement il a choisi ? Est-ce que ce paramètre existe et peut être récupéré pour construire le mail ?
      Merci !!

    • Non je donne les détails, car en regardant dans le code, je vois que cela se passe dans le noyau de formidable, il faudrait prévoir une évolution de formidable pour qu’il intègre des extensions comme transaction.

      Il suffit d’utiliser %montant% qui est générique pour tout les types de champ (saisie libre ou liste), je vais étudier une évolution du plugin pour conserver le nommage standard de ces raccourcis.

    • Ok. Ça marche avec %montant%.
      J’ai viré aussi mon tableau en raccourcis spip et c’est nickel.
      Un grand merci pour ta disponibilité !!

    • Concernant ta demande d’envoi du choix du mode de paiement dans le mail, il faudrait désactiver l’envoi du mail de formidable et ajouter dans les traitements de chaque mode de paiement la fonction d’envoi de mail.

      De cette façon c’est directement le traiter du mode de paiement utilisé qui construit le mail, donc on peut imaginer un modèle différent pour chaque mode de paiement.

    • Oui, excellent !
      Je viens de regarder dans le code de Transaction (bravo pour la clarté des commentaires !).
      Je vais regarder si je peux faire çà.
      Je pense que l’info sur le mode de paiement choisi est indispensable pour le client dans tous les cas.
      Le fait de pouvoir préciser certaines infos en fonction du paiement choisi serait bien sûr un plus.
      Merci !

    Répondre à ce message

  • 4

    Bonjour,

    J’ai bien l’impression qu’avec les versions SVN actuelles de formidable+Saisie, Transaction ne fonctionne plus.

    Pour être précis, j’ai créé un formulaire (Nom, prénom, email, montant libre), j’ai indiqué comme méthode de Paiement Atos.

    Et quand je valide le formulaire, au lieu d’avoir la 2e page qui devrait me permettre de choisir le moyen de paiement, j’ai juste le texte de remerciement d’avoir rempli le formulaire.

    • En fait, l’exemple de point cœur est trompeur ;-)

      Il fallait dire que le formulaire redirige vers le fichier de paiement.php : cheminde/paiement/atos/paiement.php

      Mais maintenant, c’est bin/request que j’ai mis sur le serveur qui n’est pas trouvé.

    • Même constat pour moi. Après les mises à jour aujourd’hui-même de Saisies, Transaction et Formidable, et pour un montant fixe, je ne passe plus par la page des paiements et ce, quels que soient les modes de paiement configurés (chèque, virement paypal, CIC).
      D’autre part, dans l’espace privé, les blocs de configuration pour Atos et Paybox ne se déplient pas (sous Firefox), je ne peux donc pas les tester.
      Je suis sous SPIP 2.1.12 [18732].

      Que se passe-t-il donc ?

    • Il n’y a rien à déplier dans les paramétrage de ATOS et PAYBOX, il suffit de copier les binaires sur le serveur et de paramétrer les fichiers tel qu’indiqué dans la doc.

    Répondre à ce message

  • lavachefolle

    Bonjour à tous

    J’aimerais que le montant d’une simple multiplication + addition soit affiché dynamiquement (puis envoyé par la suite en traitement). L’idée étant que le visiteur puisse voir le montant total et ne pas avoir la surprise du montant final.

    Par exemple PRIX1 < MULTIPLICATEUR + PRIX2

    Cette fonction est déjà peut-être intégrée mais cela fait une journée que je tourne en rond et ne parviens pas à mes fins. Tout le reste du plugin est formidable, sauf ceci (que je n’ai peut-être pas su trouver).
    Merci de votre aide,
    Jean

    Répondre à ce message

  • 1

    Bonjour,

    Lorsque je cherche à afficher la liste des réponses reçues via le formulaire, une erreur SQL s’affiche pour chacune de ces réponses :

    Erreur SQL 1054
    Unknown column 'db224794008.spipv2_formulaires_transactions.ref_transaction' in 'field list'
    SELECT spip_formulaires_transactions.ref_transaction, spip_formulaires_transactions.statut_transaction FROM spip_formulaires_transactions AS <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+c3BpcF9mb3JtdWxhaXJlc190cmFuc2FjdGlvbnM8L2NvZGU+"></span> WHERE (spip_formulaires_transactions.id_formulaires_reponse = 1)

    Cela me bloque l’accès à la page de gestion des réponses reçues. Cela, je le vois, est du au fait que j’ai changé le préfixe des tables de spip_ en spipv2_ (car j’ai deux Spip installés sur la même base de données), mais je ne trouve pas où faire ce changement dans les fichiers du plugin Transactions ! Qui saurait m’aider ?

    • QGRobrqWdIPc

      Bah l’appui sur tab pour naviguer dans les eamruloirfs ca marche meame sans ce plugin. Par contre il y a certaines options tre8s inte9ressante, je vais le tester

    Répondre à ce message

  • 2

    Bonjour,
    J’ai un problème avec le paiement ATOS.
    Je l’ai installé paramétré avec succès ( pathfile etc... )
    Bref il fonctionne avec le fichier call_request.php, fournit par ATOS mais ne fonctionne pas
    avec le fichier du plugin transaction paiement.php j’ai le message d’erreur suivant : Erreur appel API de paiement. message erreur : Error parameter (transaction_id=4dce4380633c1) too long
    SI je ne me trompe paiement .php récupère le montant du formulaire pour appeler le binaire et effectuer la transaction, hors çà ne fonctionne point.
    Utilise call_request.php, me direz-vous, mais ce script ne récupère pas le montant du formulaire,
    puisqu’arrivé à l’étape de paiement, la somme reste à 1 euro.
    Bref je tourne en rond et ATOS n’est pas des plus simple...
    J’ai donc besoin de votre aide.
    Bien cordialement.

    • le probleme est résolu en supprimant dans paiement.php la ligne :

      $parm="$parm transaction_id=" . urlencode($_SESSION['ref']);

      Mais est-ce une bonne solution ?

      Crdlt.

    • bonjour,
      non, je ne penses pas, car après
      Error in call parameters structure (amount (2.0E+23) not numeric)
      qu’estce que c’est ???
      merci de votre aide
      cordialement
      bea

    Répondre à ce message

  • Double problème suivant : je construis un formulaire qui contient un champ « saisie montant ». Il doit être multilingue, ce qui implique que parfois le séparateur décimal est une virgule, mais parfois un point. Y a-t-il manière de faire cela ?

    En plus le champ devrait pouvoir être multi-devise. Certaines devises ont des centimes, d’autres (Yen par exemple) pas, alors pour ceux-ci il faudrait ne pouvoir entrer que des entrers.

    Est-ce que quelque a une lumière sur une partie du problème ou l’autre ?

    merci !

    Répondre à ce message

  • Est-il possible d’intégrer le module de paiement en ligne SPplus de la caisse d’épargne ? si oui, quelle est la démarche à suivre ? Merci par avance

    Répondre à ce message

  • 4

    Bonjour,

    j’ai installé ce plugin, créé mon formulaire, jusque là tout se passe bien !
    Par contre lorsque je le teste, j’ai bien confirmation que j’ai rempli le formulaire mais pas de possibilité de choisir paiement par paypal ou cheque (comme je l’ai défini dans la config)

    je n’ai que la confirmation du formulaire.

    Par contre dans l’admin, l’inscription est en doublon (dont l’une notée « non payée »)

    j’ai raté quelque chose ?

    dans mon squelette j’ai inséré :

    #FORMULAIRE_FORMIDABLE{adherer}

    c’est tout. Il y aurait-il une autre manip à faire ?

    Merci de vos réponses,

    Cdt,

    Eric

    • Je ne saurais pas trop répondre pour la première question. Et je n’ai pas d’environnement de test disponible actuellement.

      Pour l’inscription en doublon, par contre, si : il s’agit d’une anomalie de conception. En fait, chaque module de paiement crée sa propre entrée dans la table des réponses (un numéro de référence pour chacun) et la place « en attente » de confirmation. Seul l’enregistrement correspondant au mode de paiement finalement choisi par l’utilisateur (chèque, paypal, etc) est confirmé dans la table. Les autres restent éternellement en « non payé ».

      Sur notre site qui propose cinq modes de paiement (lien démo ci-dessus en fin d’article), je me retrouve avec, en table, des quintuplons systématiques (on dit comme ça ? des doublons x5). Si je coche en plus « enregistrer en table » dans la configuration du formulaire pour pouvoir bénéficier de l’envoi par mail, ça me fait des sextuplons ! C’est vraiment pénible à gérer, mais pas le choix. J’ai essayé de bidouiller des filtres d’affichage.

      L’idéal aurait été un seul enregistrement en base, avec un seul numéro de référence (en obligeant tout simplement à cocher l’option « enregistrer en table » dans la configuration du formulaire). Puis que Transaction mette à jour le « statut » en fonction du mode de paiement choisi : « CMCIC », « Paypal », « Chèque »... ou « non payé ». Ça permettrait également plus facilement la mise en place d’envoi de mail dans la foulée. Pour une version 2 j’espère. A moins qu’il y ait au niveau de la programmation une difficulté que je ne vois pas ?

      Nicolas

    • Merci Nicolas, ça résout déjà un de mes problèmes.
      Pour le second, j’ai un peu cherché mais ca reste très obscur pour moi… Quelqu’un saurait s’il faut ajouter une ligne dans le header, ou quelque chose comme ca ?

      Je ne sais pas si cela a une influence, mais le formulaire est inclu dans une page rubrique

      et voici le code de la boucle article dedans :

       <B_articles>
              <div>
                  <ul>
                      <BOUCLE_articles(ARTICLES) {id_rubrique} {tout} {par date}{inverse} {pagination}>
                      <li>
                         
                          <BOUCLE_portfolio(DOCUMENTS){id_article}{mode=document}{doublons}>
                         	<div class="centrer">
                         		 <a href="#URL_DOCUMENT" target="_blank" >#_articles:TITRE</a>
                           		<div class="#EDIT{texte} texte">#TEXTE</div>
                          	</div>
                          </BOUCLE_portfolio>
                        
                      </li>
                      </BOUCLE_articles>
                  </ul>
              </div>
      
       		<div class="formAdherer">
             			 #FORMULAIRE_FORMIDABLE{adherer}
             		 </div>
              
      </B_articles>

      Merci
      Erci

    • Je ne sais pas si cela a une influence, mais le formulaire est inclu dans une page rubrique

      As-tu testé le comportement du formulaire lorsqu’il est inséré simplement dans le texte d’un article (<formulaire|formidable|id=adherer>) ? Ça permettrait déjà de savoir si c’est le formulaire qui buggue ou si c’est l’environnement dans lequel il est placé...

      Nicolas

    • Oui je viens de tester, le problème reste identique, mais merci !
      ce soir je vais essayer de l’installer sur un autre site pour tester et voir ce qu’il ne va pas dans mon code…

    Répondre à ce message

  • bonjour,

    Paiement ATOS :
    Que mettre dans paiement.php à la ligne

    $parm="$parm customer_email="

    pour permettre la récupération ( dans le log de l’auto response) du champ texte email entré dans le formulaire (formidable) .

    Merci !

    Répondre à ce message

  • Bonjour,

    Quand l’utisateur a effectué son paiement sur le site de la banque, de retour au site Spip peut-il recevoir un email accusant réception du paiement ? Est- ce prévu dans Transaction ?

    merci

    Répondre à ce message

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom