Plugin Bank

Le plugin Bank prend en charge l’interface technique de paiement avec de nombreux prestataires de paiement par Carte Bleue, SEPA… Il prend également en charge la conservation de l’historique des transactions de paiement et de leur état et offre une API pour permettre aux autres plugins d’offrir des fonctionnalités autour des paiements (plugins de dons et souscriptions, paiement avec formidable, gestion de commandes…)

Attention, pour le moment les transactions se sont gérées qu’en euros, y compris avec les prestataires qui savent gérer d’autres devises.

À partir de septembre 2019, la réglementation DSP2 exige l’utilisation de l’authentification forte du client, aussi appelée Strong Customer Authentication (SCA) pour la plupart des paiements en ligne réalisés par les clients européens dans le but de réduire la fraude.

La v4 du plugin Bank prend en compte les modifications nécessaires et est donc requise pour la mise en conformité avec la DSP2.

Configuration

La configuration du plugin permet d’ajouter, activer, ordonner et configurer les modules de paiement que vous souhaitez utiliser ainsi que les notifications [1].

Configuration du plugin Bank

L’ordre dans lequel vous positionnez les modules de paiement dans cette configuration sera l’ordre dans lequel ils seront proposés aux visiteurs sur les pages de paiement.

Paiements à l’acte

Paiements à l’acte par Carte Bancaire
Le plugin permet les paiements uniques par Carte Bancaire avec

Paiements à l’acte par SEPA
Les paiements à l’acte sont possibles par SEPA via le prestataire Payzen.

Paiements à l’acte par Chèque
Les paiements par chèque sont pris en compte par un module dédié.

Paiements à l’acte par Virement
Les paiements par virement sont pris en compte par un module dédié.

Paiements à l’acte sur la facture du fournisseur Internet

Supprimé à partir de la v4

Le module de paiement Internet+ permet le paiement des petits montants directement via la facture du fournisseur Internet du visiteur.

Simulation du paiement
Le plugin permet également la simulation du paiement en phase de développement du site.

Paiements récurrents

Paiements récurrents par Carte Bancaire
Les paiements récurrents sont possibles par Carte Bancaire via les prestataires Paybox, Payzen et Stripe.

Paiements récurrents par SEPA
Les paiements récurrents sont possibles par SEPA via le prestataire Payzen.

Paiements récurrents sur la facture du fournisseur Internet

Supprimé à partir de la v4

Le module de paiement Internet+ permet le paiement récurrent de petits montants directement via la facture du fournisseur Internet du visiteur.

Notifications

Le plugin génère un ticket d’achat comportant les informations techniques de chaque paiement, et vous pouvez configurer l’adresse email qui recevra ce ticket ainsi que l’email expéditeur.

Il en est de même pour le récapitulatif journalier des paiements : indiquez l’adresse qui recevra ce récapitulatif par mail.

Suivi des transactions

Avant tout affichage du formulaire de paiement, une transaction est créée en base avec toutes les informations concernant le paiement (prix, prix HT, id_auteur ou email associé, date de la transaction).

Le menu Activités > Transactions permet de retrouver la liste de toutes les transactions et de les trier par statut :

  • OK pour les transactions dont le paiement a été réalisé
  • Commande pour les transactions créées mais qui restent en attente de paiement
  • Attente pour les transactions dont le paiement a été initié par un mode qui ne permet pas l’encaissement instantané (chèque, virement)
  • Echec lorsqu’une tentative de paiement a eu lieu mais n’a pas réussi. Le code d’erreur est alors visible au survol du statut de la transaction
  • Abandon pour les transactions abandonnées (si votre site permet l’abandon de commandes par exemple)
  • Remboursées pour les transactions remboursées à posteriori
Liste des transactions

Pour chaque transaction la liste affiche le mode de paiement utilisé (nom et identifiant du module de paiement), le numéro d’autorisation, dont le format dépend du module de paiement, et le lien vers l’auteur si il est connu.

Certaines transactions peuvent avoir le mode ’gratuit’ indiqué. Ce « mode de paiement » est automatiquement utilisé lorsqu’on demande le paiement d’une transaction dont le montant est nul (cas de remises ou cadeaux), il se compose d’un simple bouton de validation, mais permet le passage dans tout le processus de paiement, comme pour le paiement via une plateforme externe.

La recherche permet de retrouver une transaction par son numéro d’autorisation, ou toutes les transactions utilisant un mode de paiement particulier.

Squelettes

#FORMULAIRE_PAYER_ACTE

Ce formulaire permet de proposer un formulaire de paiement.

[(#FORMULAIRE_PAYER_ACTE{10,
		      #ARRAY{
			      montant_ht,8,
			      id_auteur,#ID_AUTEUR,
		      }
})]

La transaction est automatiquement créée. Les arguments sont les mêmes que pour l’API inserer_transaction ci-dessous.

modeles/payer_acte.html

Ce modèle permet d’afficher le formulaire de paiement pour une transaction existante :

<INCLURE{fond=modeles/payer_acte,id_transaction,env} />

Les modules de paiements à l’acte activés et configurés seront utilisés pour proposer les modes de paiement aux visiteur.

modeles/payer_abonnement.html

Ce modèle permet d’afficher le formulaire de paiement récurrent pour une transaction existante :

<INCLURE{fond=modeles/payer_abonnement,id_transaction,env} />

Les modules de paiements récurrents activés et configurés seront utilisés pour proposer les modes de paiement aux visiteurs.

modeles/transaction_details.html

Ce modèle est utilisé pour afficher le détail du paiement de la transaction, par exemple sur les factures (via un plugin externe). Vous pouvez le surcharger pour afficher une liste de produits associée à la transaction et qui en constituent le prix par exemple.

content/payer.html

Ce squelette affiche le contenu minimum d’une page de paiement d’une transaction.

content/bank_retour_ok.html

Ce squelette fournit le contenu de la page de retour après paiement réussi. Vous pouvez l’utiliser pour fournir une page spip.php?page=bank_retour_ok fonctionnelle qui est nécessaire au fonctionnement du plugin.

content/bank_retour_attente.html

Ce squelette fournit le contenu de la page de retour après un paiement en attente d’encaissement (typiquement lors du paiement par chèque ou virement). Vous pouvez l’utiliser pour fournir une page spip.php?page=bank_retour_attente fonctionnelle qui est nécessaire au fonctionnement du plugin.

content/bank_retour_echec.html

Ce squelette fournit le contenu de la page de retour après paiement échoué. Vous pouvez l’utiliser pour fournir une page spip.php?page=bank_retour_echec fonctionnelle qui est nécessaire au fonctionnement du plugin.

API

inserer_transaction

$inserer_transaction = charger_fonction('inserer_transaction','bank');
$id_transaction = $inserer_transaction($montant,$options);
Paramètre
string $montant montant a payer
array $options tableau d’options
   string montant_ht Montant HT du paiement
   int id_auteur id_auteur associé à la transaction 
   string auteur_id  autre identifiant de l’auteur
   string auteur nom ou email de l’auteur
   string parrain parrain/tracking associé à la transaction
   int tracking_id numéro de tracking
   bool force false pour recycler une transaction identique encore au statut commande (par défaut), true pour forcer la creation d’une nouvelle transaction
   array champs autre champs ajoutés a la transaction

La fonction retourne l’id_transaction de la transaction créée, ou 0 en cas d’erreur.

Pipelines

Les pipelines suivants permettent de s’insérer dans le processus de paiement et de personnaliser selon vos besoins.

bank_dsp2_renseigner_facturation

A partir de la v4. Mise en conformité DSP2

Ce pipeline sert a renseigner les informations personnelles (nom et adresse de facturation, email) de la personne réalisant l’achat et avec le passage à la DSP2 il est fortement recommandé de les renseigner pour faciliter le paiement et éviter que les banques ne demandent systématiquement une authentification de type 3DSv2

bank_pre_facturer_reglement

Le pipeline est appelé après le règlement d’une transaction, avant facturation éventuelle de la transaction. Le pipeline peut servir a créer un compte client post-achat (mais avant facturation). Il a le même format de données que bank_traiter_reglement. Il est possible de récupérer les informations éventuellement fournies par la banque sur l’identité du client dans la globale $GLOBALS['bank_session']

bank_facturer_reglement

Le pipeline est appelé après le règlement d’une transaction, lorsqu’on peut facturer la transaction (si nécessaire). Le pipeline est utilisé par un éventuel plugin de facturation. Il a le même format de données que bank_traiter_reglement.
Il est possible de récupérer les informations éventuellement fournies par la banque sur l’identité du client dans la globale $GLOBALS['bank_session']

bank_traiter_reglement

Le pipeline est appelé lors du règlement d’une transaction
Il est possible de récupérer les informations éventuellement fournies par la banque sur l’identité du client dans la globale $GLOBALS['bank_session']

bank_traiter_remboursement

Le pipeline est appelé lors du remboursement d’une transaction. Le format des données est le même que pour le pipeline bank_traiter_reglement.

bank_editer_ticket_reglement

Le pipeline est appelé après le règlement d’une transaction, lors de l’édition du ticket de paiement (ticket interne, à destination des administrateurs du site et non du client).

bank_redirige_apres_retour_transaction

Le pipeline est appelé au moment de déterminer l’URL de retour après transaction. Par défaut on retourne vers l’une des URLs ?page=bank_retour_ok, ?page=bank_retour_attente ou ?page=bank_retour_echec mais ce pipeline permet de modifier ce comportement pour changer la page de retour en fonction du module de paiement utilisé ou d’autres paramètres liés à la transaction.

trig_bank_notifier_reglement

Le pipeline est appelé après le règlement, pour notifier le bon règlement. Il a le même format de données que bank_redirige_apres_retour_transaction.

trig_bank_reglement_en_attente

Le pipeline est appelé lorsqu’une transaction est marquée en mode de paiement chèque ou virement, et que le règlement effectif devra attendre la réception du chèque ou virement. Cela permet par exemple d’envoyer un mail aux administrateurs ou au client.

trig_bank_reglement_en_echec

Le pipeline est appelé lorsqu’un échec ou un abandon de paiement est constaté sur une transaction.

API Abonnements

Le plugin prend en charge les paiements récurrents, mais pas du tout les abonnements associés à ces paiements récurrents qui sont du ressort d’un autre plugin.
Une API est fournie et doit être implémentée pour le bon fonctionnement des paiements récurrents.

Pour ces 4 fonctions une implémentation minimale incomplète est fournie dans le dossier abos/ du plugin et contient les informations nécessaires pour son implémentation complète. Pour chacune on pourra réaliser l’implémentation par le pipeline idoine, ou par surcharge du fichier, selon les cas.

abos/decrire_echeance

Cette fonction est appelée lors de l’affichage du formulaire de paiement récurrent, pour connaître le détail de la récurrence : périodicité, montant des échéances (qui peut être différent du montant du premier paiement), numéro d’offre abonnement pour Internet+

abos/activer_abonnement

Cette fonction est appelée après que le premier paiement ait été reçu. Elle a en charge l’activation de l’abonnement lié à la transaction.
Attention, dans le cas où le paiement de la première transaction est à encaissement différé (SEPA par exemple), la fonction sera appelée une première fois à l’enregistrement du mode de paiement (avec la transaction en statut attente) et une seconde fois quand le paiement de la transaction sera effectivement encaissé. Il convient donc de vérifier le statut de la transaction pour décider d’activer ou non l’abonnement (avec une période d’essai par exemple).

abos/preparer_echeance

Cette fonction est appelée lorsque le plugin est notifié d’un paiement récurrent. La fonction doit créer une nouvelle transaction correspondant à l’échéance attendue de l’abonnement concerné et la retourner pour permettre la prise en compte du bon paiement ou du rejet du paiement de cette transaction.

abos/renouveler_abonnement

Cette fonction est appelée lorsque le plugin est notifié d’un paiement récurrent réussi, après avoir traiter le règlement de la transaction correspondant à l’échéance. Elle peut par exemple se charger de prolonger la date de validité de l’abonnement jusqu’à la prochaine échéance.

abos/resilier

Cette fonction est appelée lorsque le plugin est notifié d’un paiement récurrent échoué.

Notes

[1Vous pouvez configurer plusieurs modules du même prestataire, avec des configurations différentes dans le cas où vous disposez de plusieurs contrats.

Discussion

65 discussions

  • Polar oïd

    Bonjour, j’aimerais insérer un traitement particulier lorsque qu’un paiement (cas paypal) est validé. Il s’agirait de faire une mise à jour de certains champs de la table spip_auteurs pour l’id_auteur ayant réalisé une transaction et sur la base des information collectées par le formulaire de paiement (id_transaction)... Pourriez-vous m’indiquer une direction à prendre ?

    Merci :)

    Répondre à ce message

  • Je rencontre aussi le problème ci dessus mais uniquement sur le navigateur Safari sur mac. Je ne comprends pas d’où viens l’erreur.

    Répondre à ce message

  • Bonjour,

    le plugin marche très bien pour SystemPay. En revanche, bizarrement, le chèque renvoie vers une page d’erreur 404... Bug ?

    Répondre à ce message

  • 6

    Bonjour,

    Le plugin ne se trouve pas dans le dépot : http://plugins.spip.net/depots/principal.xml !
    Je passe au mauvais moment ? C’est un choix du développeur ? Une incitation à utiliser le « téléchargement du plugin depuis son archive » ? Une erreur de ma part ? Je viens de trouver un bug ?

    • Bonjour, le plugin est dans le dépot externals http://plugins.spip.net/spip.php?page=plugins&id_depot=5
      dont le xml est disponible à l’URL http://files.spip.org/externals/archives_externals.xml

    • Merci Cerdic pour la réponse, je l’aurais pas deviné.
      Merci aussi pour tous les développements que je trouve à ton nom, merci aussi à ton équipe ... Depuis que je travaille avec Spip (V1.3) j’apprends, Spipr m’a fait faire encore quelques pas, merci ...

      Ceci étant dit.
      J’ai bien enregistré le nouveau dépot, puis au moment de l’installation de bank, d’abord le plugin apparait en clair dans la liste des plugins trouvés et à l’installation

      Erreurs survenues
          Impossible de déballer ../sites/ssdomaine.mondomaine.tld/tmp/cache/chargeur/v3.0.20-c7a977cd-bank.zip

      Oui, je suis en mutualisé. Je vais voir le fichier en question, il fait 16 Mo, mais mon dézippeur (ark) réponds « aucune archive ouverte ».

      Difficulté contournée par la copie manuelle du plugin dans le dossier « /plugins ». Pas idéal pour les mises à jour, mais fonctionnel pour le moment.

    • Ah, le fichier zip fait normalement 27Mo environ, il a été tronqué à 16Mo à cause d’une taille limite trop petite spécifiée dans les téléchargements des plugins. Je remonte le bug

    • Argg, je tombe sur une autre difficulté : je ne suis pas en France mais au Québec, la monaie à utiliser est le $Canadien. Je pensais utiliser paypal, mais pas « .fr » ... C’est grave docteur ?
      Super réactivité, bravo !

    • Ah oui là c’est fatal, le plugin ne gère pas encore les devises, tout est en Euro en dur, quel que soit le mode de paiement utilisé.
      C’est au programme de la prochaine évolution, mais sans doute pas avant octobre…

    • La version 3.0.27 corrige le problème du ZIP trop gros, il est donc possible de télécharger bank par svp en ajoutant le dépot http://files.spip.org/externals/archives_externals.xml

    Répondre à ce message

  • 5

    Bonjour à tous,
    Ce plugin semble extra ! J’ai toutefois une erreur avec le module Paybox en mode test. J’ai renseigné les champs identifiant, rang, site, clé HMAC de dev.
    Mais lorsque je tente un paiement, je suis redirigé sur le site Paybox de préprod qui m’indique :
    « Erreur de protection.
    Nous regrettons de ne pouvoir donner une suite favorable à votre demande de paiement. »

    J’ai ensuite reçu un mail spip « Transaction invalide » avec dans le corps du message :
    « call_response : Transaction Invalide/Frauduleuse #0 (Reponse sans tx ni txn_id) »

    Est-ce que quelqu’un a déjà rencontré cette erreur ?
    Merci

    • Est-ce que tu as bien coché la case « Utiliser en mode test » ?

    • Merci pour ta réponse. Oui j’ai bien coché pour Paybox : « Utiliser en mode TEST (aucun paiement réel) »
      Et la clé HMAC de préprod est indiquée dans le champ « PBX_HMAC_KEY (Test) »

    • PBX_RANG doit être sur 2 chiffres, sous la forme 01 par exemple, et pas 001. Je crois que quelqu’un a déjà eu ce problème, ce ne serait pas ça ?

    • Merci pour ta réponse rapide ! C’est bien ça !!
      Le problème en effet est que Paybox fournit un « Rang » à 3 chiffres et spip n’en accepte que 2.
      Est-il possible de mettre le plugin à jour pour mentionner ceci ou le corriger ? car beaucoup d’utilisateurs Paybox vont être bloqués sur ça...

    • En fait c’est le serveur de Paybox qui n’en accepte que 2, et si on lui envoie les 3 chiffres de la configuration fournie par Paybox, c’est pas bon... Bref, c’est corrigé dans la version 3.0.20 pour n’envoyer à Paybox que 2 chiffres dans tous les cas.
      (fait la mise à jour, il y a un autre bug embêtant que j’ai corrigé en même temps)

    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