{"id":841320,"date":"2026-09-09T12:21:13","date_gmt":"2026-09-09T12:21:13","guid":{"rendered":"https:\/\/www.knowband.com\/blog\/?p=841317\/"},"modified":"2026-09-30T08:31:28","modified_gmt":"2026-09-30T08:31:28","slug":"prestashop-payment-gateway-integration","status":"publish","type":"post","link":"https:\/\/www.knowband.com\/blog\/fr\/ecommerce-blog\/prestashop-payment-gateway-integration\/","title":{"rendered":"Int\u00e9gration d&#8217;une passerelle de paiement personnalis\u00e9e dans PrestaShop&nbsp;: exigences techniques, flux API et d\u00e9fis OPC concrets"},"content":{"rendered":"<p><span style=\"font-weight: 400;\">L&#8217;int\u00e9gration d&#8217;une passerelle de paiement dans PrestaShop peut sembler simple sur le papier.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">La passerelle fournit la documentation API, les identifiants de test, les cl\u00e9s d&#8217;authentification, les URL de rappel et quelques points de terminaison. Le module PrestaShop envoie ensuite la requ\u00eate de paiement, re\u00e7oit la r\u00e9ponse, cr\u00e9e la commande et redirige le client vers la page de confirmation.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Dans une v\u00e9ritable boutique PrestaShop, cependant, la passerelle de paiement fonctionne rarement seule.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">D\u00e8s qu&#8217;un magasin utilise un module de paiement en une seule page (OPC) tel que SuperCheckout, plusieurs modules de paiement, flux de paiement personnalis\u00e9s, iframes, m\u00e9thodes de paiement bas\u00e9es sur JavaScript et personnalisations suppl\u00e9mentaires du processus de paiement peuvent tous interagir entre eux.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">C&#8217;est l\u00e0 que de nombreuses int\u00e9grations de paiement se compliquent.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Lors de nos travaux sur la compatibilit\u00e9 des passerelles de paiement, nous avons constat\u00e9 des cas o\u00f9 un mode de paiement fonctionnait parfaitement avec le processus de paiement par d\u00e9faut de PrestaShop, mais se comportait diff\u00e9remment dans OPC. Par exemple, un fournisseur de paiement pouvait s&#8217;afficher correctement sur le processus de paiement standard, tandis que des options telles que BLIK, la s\u00e9lection bancaire ou BNPL disparaissaient dans SuperCheckout.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">La le\u00e7on essentielle \u00e0 retenir est que l&#8217;int\u00e9gration d&#8217;une passerelle de paiement ne se limite pas \u00e0 la simple validation de l&#8217;appel API. Il s&#8217;agit d&#8217;assurer le bon fonctionnement de l&#8217;int\u00e9gralit\u00e9 du cycle de paiement au sein de la page de paiement PrestaShop.<\/span><\/p>\n<h2><strong>1.0 De quoi une passerelle de paiement personnalis\u00e9e a-t-elle r\u00e9ellement besoin ?<\/strong><\/h2>\n<p><a href=\"https:\/\/www.knowband.com\/blog\/wp-content\/uploads\/2026\/09\/French-2-1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-841328 size-full\" src=\"https:\/\/www.knowband.com\/blog\/wp-content\/uploads\/2026\/09\/French-2-1.jpg\" alt=\"De quoi une passerelle de paiement personnalis\u00e9e a-t-elle r\u00e9ellement besoin ?\" width=\"700\" height=\"700\" srcset=\"https:\/\/www.knowband.com\/blog\/wp-content\/uploads\/2026\/09\/French-2-1.jpg 700w, https:\/\/www.knowband.com\/blog\/wp-content\/uploads\/2026\/09\/French-2-1-300x300.jpg 300w, https:\/\/www.knowband.com\/blog\/wp-content\/uploads\/2026\/09\/French-2-1-150x150.jpg 150w, https:\/\/www.knowband.com\/blog\/wp-content\/uploads\/2026\/09\/French-2-1-60x60.jpg 60w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/a><\/p>\n<p><span style=\"font-weight: 400;\">De mani\u00e8re g\u00e9n\u00e9rale, une int\u00e9gration de paiement PrestaShop doit g\u00e9rer cinq \u00e9l\u00e9ments\u00a0:<\/span><\/p>\n<ol>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Afficher le mode de paiement lors du passage \u00e0 la caisse.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Transmettez les donn\u00e9es client ou de paiement \u00e0 la passerelle.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Recevoir et valider la r\u00e9ponse de la passerelle.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Cr\u00e9ez ou mettez \u00e0 jour correctement la commande PrestaShop.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Ramener le client \u00e0 la page de confirmation ou d&#8217;erreur appropri\u00e9e.<\/span><\/li>\n<\/ol>\n<p dir=\"ltr\">Un module de paiement typique \u00e9tend plut\u00f4t que la classe de base.<\/p>\n<p dir=\"ltr\">Le module de paiement fonctionne normalement avec des hooks tels que\u00a0:<\/p>\n<p dir=\"ltr\">Le module d&#8217;accroche permet de rendre le mode de paiement disponible \u00e0 la caisse.<\/p>\n<p dir=\"ltr\">Le module d&#8217;accroche g\u00e8re ce que le client voit apr\u00e8s son retour du processus de paiement.<\/p>\n<p><span style=\"font-weight: 400;\">Par exemple :<\/span><\/p>\n<pre>public function hookPaymentOptions($params) { if (!$this-&gt;active || !$this-&gt;checkCurrency($params['cart'])) { return []; } $paymentOption = new PaymentOption(); $paymentOption -&gt;setCallToActionText($this-&gt;l('Payer par carte')) -&gt;setAction( $this-&gt;context-&gt;link-&gt;getModuleLink( $this-&gt;name, 'redirect', [], true ) ); return [$paymentOption]; }<\/pre>\n<p><span style=\"font-weight: 400;\">L&#8217;important est que ce hook ne pr\u00e9suppose pas que le mode de paiement puisse toujours \u00eatre affich\u00e9.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">La devise, le pays, l&#8217;op\u00e9rateur, l&#8217;\u00e9tat du client, le montant du panier, la configuration du module et la disponibilit\u00e9 de la passerelle de paiement peuvent tous influencer l&#8217;affichage du mode de paiement.<\/span><\/p>\n<h2><strong>2.0 La pi\u00e8ce qui change tout\u00a0: OPC<\/strong><\/h2>\n<p><span style=\"font-weight: 400;\">Le processus de paiement par d\u00e9faut de PrestaShop et un module OPC ne traitent pas n\u00e9cessairement les m\u00e9thodes de paiement exactement de la m\u00eame mani\u00e8re.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Ce fut l&#8217;une des le\u00e7ons les plus importantes tir\u00e9es de l&#8217;utilisation de plusieurs modules de paiement.<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Avec le processus de paiement par d\u00e9faut, un module de paiement contr\u00f4le g\u00e9n\u00e9ralement lui-m\u00eame l&#8217;affichage des options de paiement et le flux de paiement.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Avec un OPC (Optical Payment Control), le module de paiement devient une couche suppl\u00e9mentaire entre le module de paiement et le client. Cela signifie que les \u00e9l\u00e9ments suivants peuvent interagir\u00a0:<\/span><\/p>\n<pre><b>Le client<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>OPC \/ SuperCheckout<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Options de paiement<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Module de paiement<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>API de passerelle<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>R\u00e9ponse de la passerelle<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Module de paiement<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>OPC \/ PrestaShop<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Confirmation de commande<\/b><\/pre>\n<p><span style=\"font-weight: 400;\">Un module de paiement peut donc \u00eatre parfaitement correct du point de vue de l&#8217;API et pourtant ne pas fonctionner correctement au sein d&#8217;un OPC.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">C\u2019est pourquoi les tests de compatibilit\u00e9 des paiements doivent toujours inclure les deux\u00a0:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Processus de paiement par d\u00e9faut de PrestaShop<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Le code OPC r\u00e9ellement utilis\u00e9 par le magasin<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">Tester uniquement la proc\u00e9dure de paiement par d\u00e9faut peut donner l&#8217;impression erron\u00e9e que l&#8217;int\u00e9gration est termin\u00e9e.<\/span><\/p>\n<h2><strong>3.0 Un exemple concret\u00a0: les options PayU sont absentes de l\u2019OPC<\/strong><\/h2>\n<p><span style=\"font-weight: 400;\">L&#8217;un des probl\u00e8mes pratiques que nous avons rencontr\u00e9s concernait les options de paiement PayU.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Sur la page de paiement standard de PrestaShop, PayU affichait correctement ses modes de paiement disponibles. Cependant, sur SuperCheckout, certaines options de paiement \u00e9taient manquantes.<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Par exemple, selon la configuration et le panier\u00a0:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">BLIK n&#8217;\u00e9tait pas visible de mani\u00e8re constante.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">La liste de s\u00e9lection des banques ne s&#8217;est pas affich\u00e9e correctement.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Certaines lignes BNPL\/paiement \u00e9taient manquantes.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Dans certains cas, BLIK est apparu puis a disparu.<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">\u00c0 premi\u00e8re vue, cela ressemblait \u00e0 un probl\u00e8me d&#8217;API PayU. Ce n&#8217;en \u00e9tait pas un.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">L&#8217;\u00e9tape diagnostique importante consistait \u00e0 comparer le flux de paiement entre la page de paiement par d\u00e9faut et SuperCheckout.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Lorsque le m\u00eame module de paiement fonctionne sur la page de paiement par d\u00e9faut mais \u00e9choue dans OPC, l&#8217;enqu\u00eate doit s&#8217;\u00e9tendre au-del\u00e0 de l&#8217;API de la passerelle.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Nous devons v\u00e9rifier comment l&#8217;OPC construit les m\u00e9thodes de paiement et quelles informations il transmet aux modules de paiement.<\/span><\/p>\n<h2><strong>4.0 Le montant du paiement peut affecter la visibilit\u00e9 du mode de paiement<\/strong><\/h2>\n<p><span style=\"font-weight: 400;\">Un aspect particuli\u00e8rement important de cette enqu\u00eate concernait le montant du panier. Les plateformes de paiement imposent souvent des limites minimales et maximales aux transactions. Par exemple\u00a0:<\/span><\/p>\n<pre><b>Mode de paiement<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>V\u00e9rifier le montant du panier<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Montant minimum\u00a0? Montant maximum\u00a0?<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Admissible \/ Non admissible<\/b><\/pre>\n<p><span style=\"font-weight: 400;\">Lors de l&#8217;enqu\u00eate de compatibilit\u00e9 avec PayU, nous avons constat\u00e9 que la logique de filtrage des m\u00e9thodes de paiement \u00e9tait li\u00e9e au fait que le montant du panier \u00e9tait transmis lors des v\u00e9rifications des m\u00e9thodes de paiement.<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Le flux concern\u00e9 impliquait le calcul du panier et le filtrage des m\u00e9thodes de paiement de PrestaShop, y compris la logique relative \u00e0\u00a0:<\/span><\/p>\n<pre>Panier::LES DEUX<\/pre>\n<p><span style=\"font-weight: 400;\">et :<\/span><\/p>\n<pre><b>PayMethodsCache::checkMinMax<\/b><\/pre>\n<p><span style=\"font-weight: 400;\">C\u2019est important car une option de paiement peut dispara\u00eetre de la page de paiement sans que l\u2019API elle-m\u00eame ne renvoie d\u2019erreur.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Il se peut tout simplement que la passerelle soit consid\u00e9r\u00e9e comme in\u00e9ligible pour le montant re\u00e7u par le module de paiement. Cela nous fournit une r\u00e8gle de d\u00e9bogage importante\u00a0:<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Si une option de paiement dispara\u00eet d&#8217;une page de paiement en ligne, ne concluez pas imm\u00e9diatement \u00e0 une d\u00e9faillance de l&#8217;API de paiement. V\u00e9rifiez d&#8217;abord le montant du panier, la devise, les limites minimales et maximales, ainsi que les valeurs correspondant aux crit\u00e8res d&#8217;\u00e9ligibilit\u00e9 du mode de paiement.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Cela devient encore plus important lorsque des remises, des frais de livraison, des taxes, des bons d&#8217;achat ou des calculs personnalis\u00e9s sont impliqu\u00e9s.<\/span><\/p>\n<h2><strong>5.0 Pourquoi certains modes de paiement fonctionnent lors du paiement par d\u00e9faut mais pas lors du SuperCheckout<\/strong><\/h2>\n<p><span style=\"font-weight: 400;\">Une m\u00e9thode utile pour \u00e9tudier ces probl\u00e8mes consiste \u00e0 comparer les deux environnements de caisse.<\/span><\/p>\n<h3><strong>5.1 Processus de paiement par d\u00e9faut de PrestaShop<\/strong><\/h3>\n<pre><b>Panier<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Recherche d'options de paiement<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>hooks paymentOptions<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Modules de paiement<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Options de paiement<\/b><\/pre>\n<h3><strong>5.2 Paiement OPC<\/strong><\/h3>\n<pre><b>Panier<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>SuperCheckout<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Modes de paiement<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Modules de paiement<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Traitement OPC suppl\u00e9mentaire<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Interface utilisateur de paiement rendue<\/b><\/pre>\n<p><span style=\"font-weight: 400;\">Le second flux comporte des pi\u00e8ces mobiles suppl\u00e9mentaires.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Par cons\u00e9quent, lors du d\u00e9bogage d&#8217;un probl\u00e8me de paiement, nous ne nous contentons pas de v\u00e9rifier : \u00ab Le module de paiement fonctionne-t-il ? \u00bb<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Nous v\u00e9rifions: <\/span><span style=\"font-weight: 400;\">\u00ab Le module de paiement fonctionne-t-il correctement lorsque sa sortie est consomm\u00e9e et affich\u00e9e par cette impl\u00e9mentation de paiement sp\u00e9cifique ? \u00bb<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Cette distinction a permis de gagner un temps consid\u00e9rable lors du d\u00e9bogage.<\/span><\/p>\n<h2><strong>6.0 L&#8217;option de paiement ne repr\u00e9sente qu&#8217;une partie de l&#8217;int\u00e9gration.<\/strong><span style=\"font-weight: 400;\"><br \/>\n<\/span><\/h2>\n<p><span style=\"font-weight: 400;\">\u00c0 partir de PrestaShop 1.7, les modules de paiement utilisent g\u00e9n\u00e9ralement la g\u00e9n\u00e9ration de code HTML de paiement via l&#8217;ancienne m\u00e9thode de hook de paiement.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Une option de paiement peut contenir des informations telles que\u00a0:<\/span><\/p>\n<pre><b>$option de paiement<\/b>\r\n<b>-&gt;setCallToActionText(...)<\/b>\r\n<b>-&gt;setAction(...)<\/b>\r\n<b>-&gt;setInputs(...)<\/b>\r\n<b>-&gt;setAdditionalInformation(...)<\/b><\/pre>\n<p><span style=\"font-weight: 400;\">objets au lieu de directement<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Diff\u00e9rentes passerelles n\u00e9cessitent diff\u00e9rentes combinaisons.<\/span><\/p>\n<h3><strong>6.1 Passerelle bas\u00e9e sur la redirection<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">Le client clique sur le mode de paiement et est redirig\u00e9 vers la passerelle de paiement.<\/span><\/p>\n<pre><b>Paiement<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Option de paiement<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Contr\u00f4leur de module<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>R\u00e9seau<\/b><\/pre>\n<h3><strong>6.2 Formulaire de paiement int\u00e9gr\u00e9<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">Les champs de paiement sont affich\u00e9s directement lors du passage \u00e0 la caisse.<\/span><\/p>\n<pre><b>Paiement<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Option de paiement<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Formulaire de carte\/paiement<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>API de passerelle<\/b><\/pre>\n<h3><strong>6.3 Paiement via iframe<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">L&#8217;interface de la passerelle est int\u00e9gr\u00e9e au processus de paiement.<\/span><\/p>\n<pre><b>Paiement<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Option de paiement<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Iframe<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>R\u00e9seau<\/b><\/pre>\n<p><span style=\"font-weight: 400;\">Les deux derni\u00e8res approches n\u00e9cessitent une attention particuli\u00e8re car JavaScript, la manipulation du DOM, le chargement des iframes et les actualisations OPC peuvent affecter l&#8217;interface de paiement.<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><\/p>\n<h2><strong>JavaScript 7.0 devient essentiel avec OPC<\/strong><\/h2>\n<p><span style=\"font-weight: 400;\">C\u2019est un aspect que les guides g\u00e9n\u00e9riques d\u2019int\u00e9gration des paiements n\u00e9gligent souvent.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Un OPC peut actualiser dynamiquement certaines parties du processus de paiement lorsque le client change\u00a0:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">adresse de livraison<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Pays<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">porteur<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">mode de paiement<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">d\u00e9tails de facturation<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">M\u00e9thode d&#8217;envoi<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">Dans ce cas, le code HTML relatif aux paiements peut \u00eatre remplac\u00e9.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Un \u00e9v\u00e9nement JavaScript qui fonctionnait lors du chargement initial de la page peut donc cesser de fonctionner apr\u00e8s une actualisation AJAX.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Par exemple :<\/span><\/p>\n<pre><b>Chargement initial de la caisse<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Paiement JS initialis\u00e9<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Le client modifie les informations de paiement\/livraison<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>OPC met \u00e0 jour sa section paiement<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>DOM d'origine remplac\u00e9<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Paiement JS non associ\u00e9<\/b><\/pre>\n<p><span style=\"font-weight: 400;\">Cela peut engendrer des sympt\u00f4mes d\u00e9routants.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Le mode de paiement peut s&#8217;afficher initialement, mais cliquer dessus ne produit aucun effet. Une iframe peut dispara\u00eetre.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">La liste des banques peut cesser de s&#8217;allonger.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Une option de paiement peut appara\u00eetre et dispara\u00eetre apr\u00e8s la modification d&#8217;un autre champ du formulaire de paiement.<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Par cons\u00e9quent, les travaux de compatibilit\u00e9 n\u00e9cessitent souvent des modifications non seulement dans PHP, mais aussi dans le JavaScript du module de paiement.<\/span><\/p>\n<h2><strong>8.0 Un exemple concret\u00a0: SimplyLease + SuperCheckout<\/strong><\/h2>\n<p><span style=\"font-weight: 400;\">Un autre exemple concerne l&#8217;int\u00e9gration de SimplyLease avec SuperCheckout. Le probl\u00e8me ne se limitait pas \u00e0 l&#8217;API de la passerelle.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Certaines informations et certains \u00e9l\u00e9ments de calcul de SimplyLease faisaient partie de la pr\u00e9sentation de paiement et devaient fonctionner correctement dans le flux SuperCheckout.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Les modifications de compatibilit\u00e9 concernaient \u00e0 la fois les mod\u00e8les de modules et l&#8217;int\u00e9gration JavaScript c\u00f4t\u00e9 SuperCheckout. Les fichiers concern\u00e9s \u00e9taient les suivants\u00a0:<\/span><\/p>\n<pre><b>modules\/simplylease\/views\/templates\/hook\/payment_info.tpl modules\/simplylease\/views\/templates\/hook\/product_calculator.tpl<\/b>\r\n\r\n<b>modules\/supercheckout\/controllers\/front\/SupercheckoutCore.php modules\/supercheckout\/views\/js\/front\/supercheckout.js\r\n<\/b><b>modules\/supercheckout\/views\/js\/front\/simplylease_supercheckout.js<\/b><\/pre>\n<p><span style=\"font-weight: 400;\">Ceci illustre bien pourquoi la compatibilit\u00e9 des paiements n\u00e9cessite parfois des modifications en dehors du module de passerelle de paiement lui-m\u00eame.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Le prestataire de paiement peut fournir les donn\u00e9es correctes, mais la page de paiement doit tout de m\u00eame\u00a0:<\/span><\/p>\n<ol>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Rendu.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Conservez-le lors des actualisations de la page de paiement.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Initialisez le JavaScript requis.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Veuillez synchroniser les informations de paiement avec le panier actuel.<\/span><\/li>\n<\/ol>\n<h2><strong>9.0 Autre probl\u00e8me courant\u00a0: le mode de paiement n\u2019appara\u00eet pas<\/strong><\/h2>\n<p><span style=\"font-weight: 400;\">Nous avons \u00e9galement rencontr\u00e9 des cas o\u00f9 un mode de paiement tel que Comfino n&#8217;apparaissait pas dans SuperCheckout m\u00eame si le module de paiement lui-m\u00eame \u00e9tait install\u00e9 et configur\u00e9.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Ce type de probl\u00e8me devrait faire l&#8217;objet d&#8217;une enqu\u00eate syst\u00e9matique.<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><\/p>\n<p><span style=\"font-weight: 400;\">V\u00e9rifier:<\/span><\/p>\n<h3><strong>9.1 Le module est-il actif\u00a0?<\/strong><\/h3>\n<pre><b>$this-&gt;actif<\/b><\/pre>\n<h3><strong>9.2 La devise est-elle prise en charge\u00a0?<\/strong><\/h3>\n<pre><b>$this-&gt;checkCurrency($params['cart'])<\/b><\/pre>\n<h3><strong>9.3 Le pays est-il soutenu ?<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">Certaines plateformes de paiement limitent les modes de paiement en fonction du pays du client.<\/span><\/p>\n<h3><strong>9.4 Le total du panier est-il inf\u00e9rieur aux limites de la passerelle de paiement\u00a0?<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">Les valeurs minimales et maximales des transactions peuvent emp\u00eacher l&#8217;affichage d&#8217;une m\u00e9thode.<\/span><\/p>\n<h3><strong>9.5 L&#8217;op\u00e9rateur est-il pris en charge\u00a0?<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">Certains modules de paiement limitent les modes de paiement en fonction de l&#8217;op\u00e9rateur.<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><\/p>\n<h3><strong>9.6 Le filtrage OPC est-il la m\u00e9thode\u00a0?<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">Le module de paiement peut renvoyer des m\u00e9thodes valides qui sont collect\u00e9es, filtr\u00e9es ou affich\u00e9es.<\/span><span style=\"font-weight: 400;\"> Mais le COP peut encore modifier les modalit\u00e9s de paiement<\/span><\/p>\n<h3><strong>9.7 JavaScript masque-t-il ou remplace-t-il l&#8217;\u00e9l\u00e9ment\u00a0?<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">Un moyen de paiement peut techniquement \u00eatre renvoy\u00e9 par PHP sans pour autant \u00eatre visible lors du passage \u00e0 la caisse.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">C\u2019est pourquoi les outils de d\u00e9veloppement du navigateur sont aussi importants que les journaux PHP lors du d\u00e9bogage des int\u00e9grations de paiement.<\/span><\/p>\n<h2><strong>10.0 Crochets auxquels nous devons r\u00e9ellement pr\u00eater attention<\/strong><\/h2>\n<p><span style=\"font-weight: 400;\">Une int\u00e9gration de paiement personnalis\u00e9e ne doit pas \u00eatre trait\u00e9e comme une impl\u00e9mentation \u00e0 point d&#8217;ancrage unique.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Les points d&#8217;ancrage exacts d\u00e9pendent de l&#8217;architecture de la passerelle et du processus de paiement, mais certains sont particuli\u00e8rement importants.<\/span><\/p>\n<h3>10.1 Options de paiement<\/h3>\n<p><span style=\"font-weight: 400;\">Il s&#8217;agit du principal moyen d&#8217;afficher le mode de paiement lors du passage en caisse.<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Il est responsable du retour<\/span> Options de paiement <span style=\"font-weight: 400;\">objets.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Les contr\u00f4les habituels comprennent\u00a0:<\/span><\/p>\n<pre><b>if (!$this-&gt;active) { return [];<\/b>\r\n<b>}<\/b>\r\n<b>if (!$this-&gt;checkCurrency($params['cart'])) { return [];<\/b>\r\n<b>}<\/b><\/pre>\n<p><span style=\"font-weight: 400;\">Des restrictions suppl\u00e9mentaires sp\u00e9cifiques \u00e0 la passerelle peuvent alors \u00eatre appliqu\u00e9es.<\/span><\/p>\n<h3>10.2 Paiement et retours<\/h3>\n<p><span style=\"font-weight: 400;\">Ceci est utilis\u00e9 une fois que le client a finalis\u00e9 son paiement ou est revenu \u00e0 la suite du processus. Cela peut afficher\u00a0:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">r\u00e9f\u00e9rence de commande<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">statut de paiement<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">instructions de paiement suppl\u00e9mentaires<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">informations sp\u00e9cifiques \u00e0 la passerelle<\/span><\/li>\n<\/ul>\n<h3>10.3 actionPresentPaymentOptions<\/h3>\n<p><span style=\"font-weight: 400;\">Ce m\u00e9canisme devient particuli\u00e8rement int\u00e9ressant lorsque plusieurs modules de paiement et un OPC sont impliqu\u00e9s.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Il fonctionne avec les options de paiement rassembl\u00e9es et peut s&#8217;av\u00e9rer utile lorsque la caisse doit inspecter ou modifier l&#8217;ensemble des options de paiement disponibles.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Cela diff\u00e8re de la mise en \u0153uvre des options de paiement d&#8217;une seule passerelle.<\/span> <span style=\"font-weight: 400;\">crochet.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Cette distinction est importante\u00a0:<\/span><\/p>\n<pre><b>options de paiement<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Chaque module de paiement apporte son option<\/b>\r\n<b>actionPr\u00e9sentOptionsDePaiement<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Les options de paiement s\u00e9lectionn\u00e9es peuvent \u00eatre trait\u00e9es.<\/b><\/pre>\n<p><span style=\"font-weight: 400;\">Lors du d\u00e9bogage de la compatibilit\u00e9 OPC, comprendre o\u00f9 les options de paiement sont collect\u00e9es par rapport \u00e0 l&#8217;endroit o\u00f9 elles sont finalement pr\u00e9sent\u00e9es peut faire la diff\u00e9rence entre trouver rapidement le probl\u00e8me et passer des heures \u00e0 l&#8217;int\u00e9rieur du module de passerelle.<\/span><\/p>\n<h2><strong>11.0 Cr\u00e9ation de commande : Ne jamais faire confiance au navigateur<\/strong><\/h2>\n<p><span style=\"font-weight: 400;\">Une fois le paiement re\u00e7u par la passerelle de paiement, l&#8217;\u00e9tape cruciale suivante est la cr\u00e9ation de la commande. La m\u00e9thode PrestaShop la plus importante \u00e0 ce stade est\u00a0:<\/span><\/p>\n<pre>validerOrder()<\/pre>\n<p><span style=\"font-weight: 400;\">Voici un exemple simplifi\u00e9\u00a0:<\/span><\/p>\n<pre><b>$this-&gt;module-&gt;validateOrder(<\/b>\r\n<b>$cart-&gt;id, Configuration::get('PS_OS_PAYMENT'),<\/b>\r\n<b>Montant pay\u00e9,<\/b>\r\n<b>$paymentMethod,<\/b>\r\n<b>$message, [],<\/b>\r\n<b>nul, faux,<\/b>\r\n<b>$client-&gt;cl\u00e9_s\u00e9curis\u00e9e<\/b>\r\n<b>);<\/b><\/pre>\n<p><span style=\"font-weight: 400;\">Trois valeurs m\u00e9ritent une attention particuli\u00e8re\u00a0:<\/span><\/p>\n<h3><strong>11.1 ID du panier<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">Le panier doit appartenir au client\/\u00e0 la session pr\u00e9vue et doit \u00eatre valide.<\/span><\/p>\n<h3><strong>11.2 Montant du paiement<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">Ne pas utiliser aveugl\u00e9ment\u00a0:<\/span><\/p>\n<pre><b>$cart-&gt;getOrderTotal()<\/b><\/pre>\n<p><span style=\"font-weight: 400;\">comme preuve que la passerelle a bien re\u00e7u ce montant.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Le montant doit \u00eatre valid\u00e9 par rapport \u00e0 la r\u00e9ponse de la passerelle.<\/span><\/p>\n<h3><strong>11.3 Cl\u00e9 de s\u00e9curit\u00e9<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">Le consommateur <\/span><span style=\"font-weight: 400;\">doit \u00eatre correctement associ\u00e9 au flux panier\/commande.<\/span><\/p>\n<h2><strong>12.0 Les webhooks doivent \u00eatre idempotents<\/strong><\/h2>\n<p><span style=\"font-weight: 400;\">Une passerelle de paiement peut envoyer le m\u00eame webhook plusieurs fois. Par exemple\u00a0:<\/span><\/p>\n<pre><b>R\u00e9seau<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Webhook<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Votre serveur<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>R\u00e9ponse 200<\/b><\/pre>\n<p><span style=\"font-weight: 400;\">Si la r\u00e9ponse est perdue\u00a0:<\/span><\/p>\n<pre><b>R\u00e9seau<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Webhook<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Votre serveur<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>R\u00e9ponse perdue<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>nouvelles tentatives de passerelle<\/b><\/pre>\n<p><span style=\"font-weight: 400;\">Si l&#8217;int\u00e9gration cr\u00e9e une commande \u00e0 chaque r\u00e9ception d&#8217;un webhook, des commandes en double sont possibles. Par cons\u00e9quent, la fonction de rappel doit v\u00e9rifier si le panier contient d\u00e9j\u00e0 une commande avant d&#8217;en cr\u00e9er une autre. Conceptuellement\u00a0:<\/span><\/p>\n<pre><b>si ($cart-&gt;OrderExists()) {<\/b>\r\n<b>\/\/ D\u00e9j\u00e0 trait\u00e9<\/b>\r\n<b>\/\/ Retourner une r\u00e9ponse positive<\/b>\r\n<b>}<\/b><\/pre>\n<p><span style=\"font-weight: 400;\">Le gestionnaire de webhook doit \u00eatre con\u00e7u pour traiter en toute s\u00e9curit\u00e9 les notifications r\u00e9p\u00e9t\u00e9es.<\/span><\/p>\n<h2><strong>13.0 Paiement synchrone vs asynchrone<\/strong><\/h2>\n<p><span style=\"font-weight: 400;\">Toutes les plateformes de paiement ne confirment pas le paiement imm\u00e9diatement.<\/span><\/p>\n<h3><strong>13.1 Synchrone<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">La passerelle confirme imm\u00e9diatement la transaction.<\/span><\/p>\n<pre><b>Le client<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>R\u00e9seau<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Paiement approuv\u00e9<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>validerOrder()<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>PAIEMENT PS_OS<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Confirmation<\/b><\/pre>\n<h3><strong>13.2 Asynchrone<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">Le client peut retourner le produit avant la r\u00e9ception de la confirmation de paiement finale.<\/span><\/p>\n<pre><b>Le client<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>R\u00e9seau<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Retour au magasin<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Commande en cours<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Webhook<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>V\u00e9rifier le paiement<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>\u00c9tat de l'ordre de modification<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Paiement accept\u00e9<\/b><\/pre>\n<p><span style=\"font-weight: 400;\">Pour les passerelles asynchrones, l&#8217;utilisation d&#8217;un \u00e9tat de commande en attente d\u00e9di\u00e9 est souvent plus s\u00fbre que de marquer imm\u00e9diatement la commande comme pay\u00e9e.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Une fois que le webhook confirme le paiement\u00a0:<\/span><\/p>\n<pre><b>$history = new OrderHistory();<\/b>\r\n<b>$history-&gt;id_order = (int) $order-&gt;id;<\/b>\r\n<b>$history-&gt;changeIdOrderState( Configuration::get('PS_OS_PAYMENT'),<\/b>\r\n<b>$commande<\/b>\r\n<b>);<\/b>\r\n<b>$history-&gt;addWithemail(true);<\/b><\/pre>\n<p><span style=\"font-weight: 400;\">Cela garantit que la transition d&#8217;\u00e9tat de la commande passe par le m\u00e9canisme d&#8217;historique des commandes de PrestaShop au lieu de simplement modifier la valeur dans la base de donn\u00e9es.<\/span><\/p>\n<h2><strong>14.0 L&#8217;une des techniques de d\u00e9bogage les plus utiles\u00a0: comparer les flux de v\u00e9rification<\/strong><\/h2>\n<p><span style=\"font-weight: 400;\">Lorsqu&#8217;un mode de paiement fonctionne dans la proc\u00e9dure de paiement par d\u00e9faut mais pas dans OPC, nous recommandons de comparer le flux complet.<\/span><\/p>\n<h3><strong>\u00c9tape 1\u00a0: V\u00e9rifier le PHP<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">Est-ce que hookPaymentOptions() <\/span><span style=\"font-weight: 400;\">ex\u00e9cut\u00e9?<\/span><\/p>\n<h3><strong>\u00c9tape 2\u00a0: Examiner les options renvoy\u00e9es<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">Le module de paiement renvoie-t-il effectivement un<\/span> option de paiement<span style=\"font-weight: 400;\">?<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><\/p>\n<h3><strong>\u00c9tape 3\u00a0: V\u00e9rifier le panier<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">Comparez:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">la totalit\u00e9 de votre cycle de coaching doit \u00eatre pay\u00e9e avant votre derni\u00e8re session.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">monnaie<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">des clients<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Pays<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">porteur<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">remises<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">imp\u00f4ts<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">frais de livraison<\/span><\/li>\n<\/ul>\n<h3><strong>\u00c9tape 4\u00a0: V\u00e9rifiez le navigateur<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">Chercher:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Erreurs JavaScript<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">\u00c9l\u00e9ments DOM manquants<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Requ\u00eates AJAX<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">requ\u00eates \u00e9chou\u00e9es<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">erreurs iframe<\/span><\/li>\n<\/ul>\n<h3><strong>\u00c9tape 5\u00a0: V\u00e9rifier l\u2019OPC<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">D\u00e9terminez si SuperCheckout est\u00a0:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">filtrer l&#8217;option de paiement<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">en rempla\u00e7ant son HTML<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">actualiser la section paiement<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">modifier le panier avant l&#8217;ex\u00e9cution du module de paiement<\/span><\/li>\n<\/ul>\n<h3><strong>\u00c9tape 6\u00a0: V\u00e9rifier la passerelle<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">Ce n&#8217;est qu&#8217;apr\u00e8s confirmation du processus de caisse local que l&#8217;enqu\u00eate devrait s&#8217;approfondir sur\u00a0:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Authentification API<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">charge utile de requ\u00eate<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Signature<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">\u00e0 un besoin identifi\u00e9<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Webhook<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">journaux de passerelle<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">Cette approche par couches est beaucoup plus rapide que de commencer syst\u00e9matiquement par l&#8217;API de passerelle.<\/span><\/p>\n<h2><strong>15.0 Probl\u00e8mes courants d&#8217;int\u00e9gration des paiements que nous avons constat\u00e9s<\/strong><\/h2>\n<p><span style=\"font-weight: 400;\">Les tests de compatibilit\u00e9 en conditions r\u00e9elles r\u00e9v\u00e8lent g\u00e9n\u00e9ralement des probl\u00e8mes qui ne sont pas \u00e9vidents \u00e0 partir de la documentation de la passerelle.<\/span><\/p>\n<h3><strong>15.1 L&#8217;option de paiement dispara\u00eet<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">Causes possibles:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">devise non prise en charge<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">restriction du pays<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Le montant du panier d\u00e9passe les limites de la passerelle.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">restriction de l&#8217;op\u00e9rateur<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Filtrage OPC<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">configuration du module de paiement<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">JavaScript masquant la m\u00e9thode<\/span><\/li>\n<\/ul>\n<h3><strong>15.2 BLIK ou une autre option de paiement appara\u00eet et dispara\u00eet<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">Causes possibles:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">consulter la mise \u00e0 jour AJAX<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">rendu de l&#8217;option de paiement<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Initialisation JavaScript<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">total du panier en cours<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">L&#8217;\u00e9ligibilit\u00e9 au portail est en cours de recalcul.<\/span><\/li>\n<\/ul>\n<h3><strong>15.3 La liste des banques ne s&#8217;\u00e9largit pas.<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">Enqu\u00eater souvent\u00a0:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Erreurs JavaScript<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">\u00e9l\u00e9ments DOM remplac\u00e9s dynamiquement<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">gestionnaires d&#8217;\u00e9v\u00e9nements attach\u00e9s avant l&#8217;actualisation OPC<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Initialisation JavaScript du fournisseur de paiement<\/span><\/li>\n<\/ul>\n<h3><strong>15.4 L&#8217;iframe dispara\u00eet<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">Enqu\u00eater:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">actualiser la page de paiement<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Initialisation de l&#8217;iframe<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Remplacement DOM<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Ex\u00e9cution de JavaScript apr\u00e8s les mises \u00e0 jour AJAX<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><\/li>\n<\/ul>\n<h3><strong>15.5 Le paiement a \u00e9t\u00e9 effectu\u00e9 avec succ\u00e8s, mais la commande reste en attente.<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">V\u00e9rifier:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">URL du webhook<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">livraison par webhook<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">v\u00e9rification de la signature<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Recherche de panier\/commande<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">transition ordre-\u00e9tat<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">authentification par rappel<\/span><\/li>\n<\/ul>\n<h3><strong>15.6 Le mode de paiement fonctionne lors du passage en caisse par d\u00e9faut, mais pas lors du passage en caisse classique.<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">Cela indique fortement que le probl\u00e8me pourrait provenir de l&#8217;interaction entre le module de paiement et l&#8217;OPC plut\u00f4t que de l&#8217;API de la passerelle elle-m\u00eame.<\/span><\/p>\n<h2><strong>16.0 Exigences de s\u00e9curit\u00e9 pour un module de paiement<\/strong><\/h2>\n<p><span style=\"font-weight: 400;\">Les modules de paiement g\u00e8rent des op\u00e9rations sensibles\u00a0; la s\u00e9curit\u00e9 ne peut donc pas \u00eatre consid\u00e9r\u00e9e comme une am\u00e9lioration optionnelle. Au minimum\u00a0:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Valider les signatures des fonctions de rappel.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Valider la relation panier\/client.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Utilisez HTTPS.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Valider les certificats TLS.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Ne vous fiez jamais uniquement aux informations de paiement fournies par votre navigateur.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Ne stockez jamais les informations brutes des cartes bancaires, sauf si l&#8217;architecture et les exigences de conformit\u00e9 le permettent explicitement.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Ne pas enregistrer les informations de paiement sensibles.<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">\n<pre><span style=\"font-weight: 400;\">\u00c9vitez les fonctions serialize() et unserialize(). <\/span>\/ pour les donn\u00e9es externes non fiables.<\/pre>\n<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Valider et convertir les valeurs entrantes.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Prot\u00e9ger les points de terminaison AJAX et de rappel personnalis\u00e9s.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Utilisez des jetons s\u00e9curis\u00e9s lorsque cela est appropri\u00e9.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Rendre le traitement des webhooks idempotent.<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">Une page de confirmation de paiement ne constitue pas une preuve de paiement.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">C\u2019est la r\u00e9ponse v\u00e9rifi\u00e9e du serveur de la passerelle qui devrait d\u00e9terminer si la commande est consid\u00e9r\u00e9e comme pay\u00e9e.<\/span><\/p>\n<h2><strong>17.0 Quels changements surviennent lors de la prise en charge de plusieurs modules de paiement\u00a0?<\/strong><\/h2>\n<p><span style=\"font-weight: 400;\">Une autre le\u00e7on tir\u00e9e des travaux sur la compatibilit\u00e9 OPC est que l&#8217;ajout d&#8217;un deuxi\u00e8me ou d&#8217;un troisi\u00e8me module de paiement peut r\u00e9v\u00e9ler des probl\u00e8mes qui n&#8217;\u00e9taient pas visibles lorsqu&#8217;il n&#8217;existait qu&#8217;un seul moyen de paiement.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Par exemple :<\/span><\/p>\n<pre><b>PayPal <\/b><b>PayU<\/b>\r\n<b>Comfino<\/b>\r\n<b>SimplyLease<\/b>\r\n<b>Virement bancaire<\/b><\/pre>\n<p><span style=\"font-weight: 400;\">Tous ces moyens de paiement peuvent \u00eatre propos\u00e9s sur la m\u00eame page de paiement. Celle-ci doit donc g\u00e9rer diff\u00e9rents types de paiements\u00a0:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Structures HTML<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">JavaScript<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">exigences relatives aux iframes<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">redirections<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Flux d&#8217;API<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">r\u00e8gles d&#8217;\u00e9ligibilit\u00e9<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">montants minimum\/maximum<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">rappels asynchrones<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">Une modification apport\u00e9e \u00e0 un mode de paiement peut affecter accidentellement un autre. C&#8217;est pourquoi les correctifs de compatibilit\u00e9 des paiements doivent \u00eatre limit\u00e9s \u00e0 des cas pr\u00e9cis.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Par exemple, au lieu de modifier globalement toute la logique de traitement des options de paiement, identifiez le mode de paiement sp\u00e9cifique et appliquez la gestion de compatibilit\u00e9 uniquement lorsque cela est n\u00e9cessaire.<\/span><\/p>\n<h2><strong>18.0 Les tests doivent inclure des sc\u00e9narios de panier r\u00e9els<\/strong><\/h2>\n<p><span style=\"font-weight: 400;\">Tester une passerelle de paiement avec un simple produit \u00e0 10 \u20ac ne suffit pas. Une matrice de test ad\u00e9quate doit inclure\u00a0:<\/span><\/p>\n<table class=\"table table-hover\">\n<tbody>\n<tr>\n<td><strong>Sc\u00e9nario<\/strong><\/td>\n<td><strong>Ce qu&#8217;il faut v\u00e9rifier<\/strong><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">produit unique<\/span><\/td>\n<td><span style=\"font-weight: 400;\">L&#8217;option de paiement appara\u00eet<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Produits multiples<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Le montant correct atteint la passerelle<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">La remise<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Le montant final \u00e0 payer est correct.<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Frais de port<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Gateway re\u00e7oit le total correct<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Fiscalit\u00e9<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Le montant de la passerelle correspond \u00e0 la commande<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Montant minimum de la passerelle<\/span><\/td>\n<td><span style=\"font-weight: 400;\">La m\u00e9thode appara\u00eet\/dispara\u00eet correctement<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Montant maximal de la passerelle<\/span><\/td>\n<td><span style=\"font-weight: 400;\">La m\u00e9thode appara\u00eet\/dispara\u00eet correctement<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Devise non prise en charge<\/span><\/td>\n<td><span style=\"font-weight: 400;\">La m\u00e9thode est cach\u00e9e<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Pays non pris en charge<\/span><\/td>\n<td><span style=\"font-weight: 400;\">La m\u00e9thode est cach\u00e9e<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Paiement par d\u00e9faut<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Le paiement fonctionne<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">OPC<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Le paiement fonctionne<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Paiement mobile<\/span><\/td>\n<td><span style=\"font-weight: 400;\">L&#8217;interface utilisateur fonctionne<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Paiement \u00e9chou\u00e9<\/span><\/td>\n<td><span style=\"font-weight: 400;\">\u00c9tat correct de la commande\/du paiement<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Paiement r\u00e9ussi<\/span><\/td>\n<td><span style=\"font-weight: 400;\">La commande a \u00e9t\u00e9 correctement cr\u00e9\u00e9e.<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">nouvelle tentative de webhook<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Pas de commande en double<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Abandon de clients<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Aucune commande pay\u00e9e incorrectement<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">D\u00e9lai d&#8217;attente de la passerelle d\u00e9pass\u00e9<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Gestion correcte des requ\u00eates en attente\/erreurs<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span style=\"font-weight: 400;\">Pour les int\u00e9grations OPC, testez \u00e9galement l&#8217;actualisation de la page de paiement. Modifiez\u00a0:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">propos<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">porteur<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Pays<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">mode de paiement<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Quantit\u00e9<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">r\u00e9duction<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">et v\u00e9rifiez que les options de paiement restent correctes apr\u00e8s chaque actualisation.<\/span><\/p>\n<h2><strong>19.0 Une approche pratique du d\u00e9veloppement<\/strong><\/h2>\n<p><span style=\"font-weight: 400;\">Compte tenu des probl\u00e8mes qui surviennent fr\u00e9quemment lors des int\u00e9grations r\u00e9elles, un ordre de d\u00e9veloppement plus s\u00fbr est le suivant\u00a0:<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><\/p>\n<h3><strong>19.1 Configurer la passerelle de paiement pour qu&#8217;elle fonctionne avec le module de paiement par d\u00e9faut de PrestaShop<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">Il faut d&#8217;abord \u00e9tablir que\u00a0:<\/span><\/p>\n<pre><b>Option de paiement<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Requ\u00eate de passerelle<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>R\u00e9ponse de la passerelle<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>validerOrder()<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Confirmation<\/b><\/pre>\n<p><span style=\"font-weight: 400;\">fonctionne correctement.<\/span><\/p>\n<h3><strong>19.2 Ajout du traitement des rappels\/webhooks<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">Ne laissez pas la confirmation asynchrone pour la fin.<\/span><\/p>\n<h3><strong>19.3 Ajouter une gestion appropri\u00e9e de l&#8217;\u00e9tat de l&#8217;ordre<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">Tester:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">succ\u00e8s<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">\u00e9chec<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">En attente<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">temps mort<\/span><\/li>\n<\/ul>\n<h3><strong>19.4 Test avec des chariots r\u00e9alistes<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">Utilisez les remises, les frais de port, les taxes, les diff\u00e9rentes devises et les totaux diff\u00e9rents.<\/span><\/p>\n<h3><strong>19.5 Int\u00e9gration avec OPC<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">Ce n&#8217;est qu&#8217;une fois le flux de passerelle de base stabilis\u00e9 que vous devriez \u00e9tudier la compatibilit\u00e9 avec SuperCheckout.<\/span><\/p>\n<h3><strong>19.6 Test JavaScript et actualisations dynamiques<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">Ceci est particuli\u00e8rement important pour les formulaires de paiement int\u00e9gr\u00e9s, les iframes, les interfaces BLIK\/de s\u00e9lection bancaire et autres composants de paiement interactifs.<\/span><\/p>\n<h3><strong>19.7 Testez tous les modes de paiement simultan\u00e9ment<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">Un syst\u00e8me de paiement prenant en charge cinq modes de paiement doit \u00eatre test\u00e9 comme un syst\u00e8me global, et non comme cinq modules isol\u00e9s.<\/span><\/p>\n<h2><strong>20.0 Faut-il cr\u00e9er une passerelle personnalis\u00e9e ou utiliser un module existant\u00a0?<\/strong><\/h2>\n<p><span style=\"font-weight: 400;\">Toutes les passerelles ne justifient pas une int\u00e9gration personnalis\u00e9e. Un module personnalis\u00e9 est pertinent lorsque\u00a0:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">La passerelle est r\u00e9gionale ou de niche.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Il n&#8217;existe aucun module PrestaShop maintenu<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">La passerelle n\u00e9cessite une logique m\u00e9tier personnalis\u00e9e<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Vous avez besoin d&#8217;un abonnement ou d&#8217;un flux de r\u00e8glement sp\u00e9cifique.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Vous avez besoin de fonctionnalit\u00e9s que les modules existants ne peuvent pas fournir.<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">Mais la mise en place d&#8217;une int\u00e9gration de paiement implique \u00e9galement d&#8217;en assumer la responsabilit\u00e9 de la maintenance. PrestaShop \u00e9volue.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u00c9volution de PHP. \u00c9volution des API de passerelle.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Les exigences de s\u00e9curit\u00e9 \u00e9voluent. Les modules de paiement \u00e9voluent.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Et finalement, le prestataire de paiement modifie quelque chose qui perturbe une int\u00e9gration qui \u00e9tait par ailleurs stable.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Pour les passerelles de paiement courantes, un module \u00e9tabli et maintenu peut donc s&#8217;av\u00e9rer nettement moins co\u00fbteux que la maintenance d&#8217;un code de paiement personnalis\u00e9 pendant plusieurs ann\u00e9es.<\/span><\/p>\n<h2><strong>21.0 La le\u00e7on principale de l&#8217;int\u00e9gration des paiements PrestaShop<\/strong><\/h2>\n<p><span style=\"font-weight: 400;\">La principale le\u00e7on \u00e0 tirer de l&#8217;utilisation des passerelles de paiement est que l&#8217;API n&#8217;est souvent pas la partie la plus difficile. Envoi\u00a0:<\/span><\/p>\n<pre><b>Requ\u00eate API <\/b><span style=\"font-weight: 400;\">\u2192 <\/span><b>R\u00e9ponse de l'API<\/b><\/pre>\n<p><span style=\"font-weight: 400;\">c&#8217;est g\u00e9n\u00e9ralement simple.<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Le plus difficile, c&#8217;est tout ce qui l&#8217;entoure :<\/span><\/p>\n<pre><span style=\"font-weight: 400;\">\u250c\u2500\u2500 <\/span><b>R\u00e8gles mon\u00e9taires<\/b>\r\n<span style=\"font-weight: 400;\">\u251c\u2500\u2500 <\/span><b>R\u00e8gles du pays<\/b>\r\n<span style=\"font-weight: 400;\">\u251c\u2500\u2500 <\/span><b>Montant du panier<\/b>\r\n<span style=\"font-weight: 400;\">\u251c\u2500\u2500 <\/span><b>Restrictions du transporteur<\/b>\r\n<span style=\"font-weight: 400;\">\u251c\u2500\u2500 <\/span><b>OPC<\/b>\r\n<span style=\"font-weight: 400;\">\u251c\u2500\u2500 <\/span><b>JavaScript<\/b>\r\n<span style=\"font-weight: 400;\">\u251c\u2500\u2500 <\/span><b>Iframes<\/b>\r\n<span style=\"font-weight: 400;\">\u251c\u2500\u2500 <\/span><b>Rafra\u00eechissements AJAX<\/b>\r\n<span style=\"font-weight: 400;\">\u251c\u2500\u2500 <\/span><b>Crochets Web <\/b>\r\n<span style=\"font-weight: 400;\">\u251c\u2500\u2500 <\/span><b>\u00c9tats de l'ordre<\/b>\r\n<span style=\"font-weight: 400;\">\u2514\u2500\u2500 <\/span><b>Notifications en double<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Le client <\/b><span style=\"font-weight: 400;\">\u2192 <\/span><b>Paiement <\/b><span style=\"font-weight: 400;\">\u2192 <\/span><b>Module de paiement <\/b><span style=\"font-weight: 400;\">\u2192 <\/span><b>R\u00e9seau<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Cr\u00e9ation de commande<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Confirmation de commande<\/b><\/pre>\n<p><span style=\"font-weight: 400;\">L&#8217;int\u00e9gration d&#8217;un syst\u00e8me de paiement n&#8217;est r\u00e9ussie que si l&#8217;ensemble de la cha\u00eene fonctionne de mani\u00e8re coh\u00e9rente.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">C\u2019est \u00e9galement pourquoi un probl\u00e8me tel que \u00ab BLIK est manquant \u00bb ou \u00ab la liste des banques ne s\u2019ouvre pas \u00bb ne doit pas \u00eatre imm\u00e9diatement trait\u00e9 comme un probl\u00e8me d\u2019API de passerelle.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">La cause r\u00e9elle pourrait \u00eatre un calcul du total du panier, une v\u00e9rification d&#8217;\u00e9ligibilit\u00e9 du mode de paiement, le rendu OPC, l&#8217;initialisation JavaScript ou une actualisation AJAX rempla\u00e7ant l&#8217;interface de paiement.<\/span><\/p>\n<h2><strong>22.0 Liste de v\u00e9rification finale pour une passerelle de paiement PrestaShop personnalis\u00e9e<\/strong><\/h2>\n<p><span style=\"font-weight: 400;\">Avant de consid\u00e9rer l&#8217;int\u00e9gration comme termin\u00e9e, v\u00e9rifiez\u00a0:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Le module de paiement \u00e9tend<\/span> <strong>Module de paiement<\/strong>.<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><b>Options de paiement <\/b><span style=\"font-weight: 400;\">est correctement impl\u00e9ment\u00e9.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><b>retour de paiement <\/b><span style=\"font-weight: 400;\">est mis en \u0153uvre l\u00e0 o\u00f9 cela est n\u00e9cessaire.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Les options de paiement sont utilis\u00e9es<\/span> Options de paiement.<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Les restrictions de change sont v\u00e9rifi\u00e9es.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Les restrictions li\u00e9es au pays et \u00e0 l&#8217;op\u00e9rateur sont v\u00e9rifi\u00e9es le cas \u00e9ch\u00e9ant.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Le total du panier est valid\u00e9.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Les r\u00e9ponses de la passerelle sont v\u00e9rifi\u00e9es.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Les signatures des fonctions de rappel sont valid\u00e9es.<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\"><strong>Valider l&#8217;ordre()<\/strong> Cet appel n&#8217;est effectu\u00e9 qu&#8217;apr\u00e8s v\u00e9rification r\u00e9ussie du paiement.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Le montant utilis\u00e9 pour la commande est valid\u00e9 par rapport \u00e0 la r\u00e9ponse de la passerelle.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Les webhooks sont idempotents.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Les notifications en double ne cr\u00e9ent pas de commandes en double.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">L&#8217;ordre correct des \u00e9tats est utilis\u00e9.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Les paiements \u00e9chou\u00e9s et les paiements en attente sont trait\u00e9s s\u00e9par\u00e9ment.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Les donn\u00e9es de paiement sensibles ne sont jamais enregistr\u00e9es ni stock\u00e9es inutilement.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Le protocole HTTPS est obligatoire.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">La page de paiement par d\u00e9faut de PrestaShop a \u00e9t\u00e9 test\u00e9e.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">L&#8217;OPC a \u00e9t\u00e9 test\u00e9 s\u00e9par\u00e9ment.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">JavaScript a \u00e9t\u00e9 test\u00e9 apr\u00e8s les actualisations de la page de paiement AJAX.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Les iframes et les \u00e9l\u00e9ments de paiement interactifs ont \u00e9t\u00e9 test\u00e9s.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Plusieurs modules de paiement ont \u00e9t\u00e9 test\u00e9s simultan\u00e9ment.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Des paniers d&#8217;achat r\u00e9alistes avec r\u00e9ductions et frais de livraison ont \u00e9t\u00e9 test\u00e9s.<\/span><\/li>\n<\/ul>\n<h2><strong>Conclusion<\/strong><\/h2>\n<p><span style=\"font-weight: 400;\">Une passerelle de paiement personnalis\u00e9e dans PrestaShop est bien plus qu&#8217;une simple int\u00e9gration API.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">L&#8217;API ne repr\u00e9sente qu&#8217;une partie de l&#8217;impl\u00e9mentation. Le v\u00e9ritable d\u00e9fi technique commence lorsque le module de paiement doit coexister avec le syst\u00e8me de paiement de PrestaShop, un OPC tel que SuperCheckout, d&#8217;autres modules de paiement, du JavaScript dynamique, le recalcul du panier et les rappels asynchrones de la passerelle de paiement.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Notre exp\u00e9rience en mati\u00e8re de probl\u00e8mes de compatibilit\u00e9 des paiements a renforc\u00e9 une approche importante\u00a0: toujours isoler l\u2019origine du probl\u00e8me avant de modifier le code.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Si PHP ne renvoie pas le mode de paiement, examinez le module de paiement et ses crit\u00e8res d&#8217;\u00e9ligibilit\u00e9. Si PHP le renvoie mais que le client ne le voit pas, examinez l&#8217;OPC et le rendu c\u00f4t\u00e9 client. Si l&#8217;interface utilisateur s&#8217;affiche mais ne r\u00e9pond pas, examinez JavaScript et les actualisations AJAX. Si le paiement r\u00e9ussit mais que la commande reste en attente, examinez le flux de rappel et d&#8217;\u00e9tat de la commande.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Cette approche est bien plus fiable que de supposer que chaque probl\u00e8me de paiement est un probl\u00e8me d&#8217;API.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Pour les d\u00e9veloppeurs travaillant sur l&#8217;int\u00e9gration des paiements PrestaShop, l&#8217;objectif ne doit pas se limiter \u00e0 permettre \u00e0 une passerelle d&#8217;accepter une transaction. Il s&#8217;agit de garantir la fiabilit\u00e9 de l&#8217;ensemble du cycle de vie du paiement, de l&#8217;affichage initial de la page de paiement \u00e0 la validation finale de la commande, m\u00eame en pr\u00e9sence de plusieurs moyens de paiement et d&#8217;un code OPC personnalis\u00e9.<\/span><\/p>\n<div class=\"thecontent\">\n<div class=\"thecontent\">\n<p>Si vous avez des questions ou besoin d&#8217;aide concernant les performances ou la migration de votre site web, nos experts sont l\u00e0 pour vous accompagner. Contactez l&#8217;\u00e9quipe Knowband \u00e0 l&#8217;adresse suivante\u00a0:\u00a0<a href=\"\/fr\/cdn-cgi\/l\/email-protection#e695939696899492a68d88899184878882c885898b\" target=\"_blank\" rel=\"noopener\"><span class=\"__cf_email__\" data-cfemail=\"f3808683839c8187b3989d9c8491929d97dd909c9e\">[email protected]<\/span><\/a> D\u00e9couvrez d\u00e8s aujourd&#8217;hui des plugins e-commerce fiables et adapt\u00e9s \u00e0 vos besoins.<\/p>\n<h2>\ud83d\udc49 <b>D\u00e9couvrez le module avec notre guide vid\u00e9o<\/b><\/h2>\n<p><iframe loading=\"lazy\" title=\"Meilleur module de paiement en une page pour PrestaShop (2025) | D\u00e9mo officielle de Knowband\" width=\"648\" height=\"365\" src=\"https:\/\/www.youtube.com\/embed\/RcSC-Y6bNKg?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/p>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>L&#8217;int\u00e9gration d&#8217;une passerelle de paiement dans PrestaShop peut sembler simple sur le papier. La passerelle fournit la documentation API, les identifiants de test, les cl\u00e9s d&#8217;authentification, les URL de rappel et quelques points de terminaison. Le module PrestaShop envoie ensuite la requ\u00eate de paiement, re\u00e7oit la r\u00e9ponse, cr\u00e9e la commande et redirige le client vers [&hellip;]<\/p>\n","protected":false},"author":43,"featured_media":841326,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_kbui_enabled":"","footnotes":""},"categories":[158,4,354,218],"tags":[53291,53246,53248,53295,53294,53300,53296,53311,39332,53301,53302,53308,53292,39336,53286,53312,53310,53288,53284,53289,53290,53297,53306,53305,53307,53293,27674,53287,53285,53247,53304,39318,39345,53229,53309,53249,53230,53303,53299,53298],"class_list":["post-841320","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-commerce-electronique","category-ecommerce-blog","category-prestashop-blog-fr","category-sin-categorizar","tag-api-de-paiement-prestashop","tag-blik-prestashop","tag-comfino-prestashop","tag-compatibilit-avec-les-passerelles-de-paiement","tag-compatibilit-des-paiements-prestashop","tag-cration-de-commandes-prestashop","tag-dpannage-des-paiements-prestashop","tag-dveloppement-des-paiements-prestashop","tag-enviar-clave-de-servicio-web-de-forma-segura","tag-tat-de-la-commande-prestashop","tag-flux-de-paiement-prestashop","tag-formulaire-de-paiement-intgr","tag-intgration-de-lapi-de-la-passerelle-de-paiement","tag-intgration-de-lapi-prestashop","tag-intgration-de-la-passerelle-de-paiement-prestashop","tag-intgration-de-la-passerelle-prestashop","tag-intgration-de-paiement-personnalise","tag-intgration-des-paiements-prestashop","tag-mthodes-de-paiement-prestashop","tag-module-de-paiement-personnalis-prestashop","tag-module-de-paiement-prestashop","tag-options-de-paiement-prestashop","tag-paiement-ajax-prestashop","tag-paiement-javascript-prestashop","tag-paiement-par-iframe-prestashop","tag-paiement-prestashop","tag-paiement-sur-une-page-prestashop","tag-passerelle-de-paiement-personnalise-prestashop","tag-passerelle-de-paiement-prestashop","tag-payu-prestashop","tag-personnalisation-de-la-page-de-paiement-prestashop","tag-prestashop-api-integration","tag-prestashop-opc","tag-scurit-des-paiements-prestashop","tag-simplylease-prestashop","tag-supercheckout-prestashop","tag-traitement-des-paiements-prestashop","tag-webhooks-de-passerelle-de-paiement","tag-webhooks-prestashop"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Int\u00e9gration d&#039;une passerelle de paiement sur PrestaShop : Guide API et OPC<\/title>\n<meta name=\"description\" content=\"Apprenez \u00e0 int\u00e9grer une passerelle de paiement personnalis\u00e9e dans PrestaShop, \u00e0 g\u00e9rer les API, les webhooks et les statuts de commande, ainsi qu&#039;\u00e0 r\u00e9soudre les probl\u00e8mes de compatibilit\u00e9 avec l&#039;OPC (One Page Checkout).\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.knowband.com\/blog\/fr\/ecommerce-blog\/prestashop-payment-gateway-integration\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Int\u00e9gration d&#039;une passerelle de paiement sur PrestaShop : Guide API et OPC\" \/>\n<meta property=\"og:description\" content=\"Apprenez \u00e0 int\u00e9grer une passerelle de paiement personnalis\u00e9e dans PrestaShop, \u00e0 g\u00e9rer les API, les webhooks et les statuts de commande, ainsi qu&#039;\u00e0 r\u00e9soudre les probl\u00e8mes de compatibilit\u00e9 avec l&#039;OPC (One Page Checkout).\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.knowband.com\/blog\/fr\/ecommerce-blog\/prestashop-payment-gateway-integration\/\" \/>\n<meta property=\"og:site_name\" content=\"Knowband Blog | Ecommerce Modules\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Knowband\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-09T12:21:13+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-30T08:31:28+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.knowband.com\/blog\/wp-content\/uploads\/2026\/09\/French-1.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"760\" \/>\n\t<meta property=\"og:image:height\" content=\"300\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Sophie\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@KnowbandPlugin\" \/>\n<meta name=\"twitter:site\" content=\"@KnowbandPlugin\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Sophie\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"19 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/fr\\\/ecommerce-blog\\\/prestashop-payment-gateway-integration\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/fr\\\/ecommerce-blog\\\/prestashop-payment-gateway-integration\\\/\"},\"author\":{\"name\":\"Sophie\",\"@id\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/fr\\\/#\\\/schema\\\/person\\\/ca485d026e41cbf45ae99b67d0c9ac74\"},\"headline\":\"Int\u00e9gration d&#8217;une passerelle de paiement personnalis\u00e9e dans PrestaShop&nbsp;: exigences techniques, flux API et d\u00e9fis OPC concrets\",\"datePublished\":\"2026-09-09T12:21:13+00:00\",\"dateModified\":\"2026-09-30T08:31:28+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/fr\\\/ecommerce-blog\\\/prestashop-payment-gateway-integration\\\/\"},\"wordCount\":4783,\"publisher\":{\"@id\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/fr\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/fr\\\/ecommerce-blog\\\/prestashop-payment-gateway-integration\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/French-1.jpg\",\"keywords\":[\"API de paiement PrestaShop\",\"BLIK PrestaShop\",\"Comfino PrestaShop\",\"Compatibilit\u00e9 avec les passerelles de paiement\",\"Compatibilit\u00e9 des paiements PrestaShop\",\"Cr\u00e9ation de commandes PrestaShop\",\"D\u00e9pannage des paiements PrestaShop\",\"D\u00e9veloppement des paiements PrestaShop\",\"Enviar clave de servicio web de forma segura\",\"\u00c9tat de la commande PrestaShop\",\"Flux de paiement PrestaShop\",\"formulaire de paiement int\u00e9gr\u00e9\",\"int\u00e9gration de l'API de la passerelle de paiement\",\"Int\u00e9gration de l'API PrestaShop\",\"Int\u00e9gration de la passerelle de paiement PrestaShop\",\"Int\u00e9gration de la passerelle PrestaShop\",\"int\u00e9gration de paiement personnalis\u00e9e\",\"Int\u00e9gration des paiements PrestaShop\",\"M\u00e9thodes de paiement PrestaShop\",\"Module de paiement personnalis\u00e9 PrestaShop\",\"Module de paiement PrestaShop\",\"Options de paiement PrestaShop\",\"Paiement AJAX PrestaShop\",\"Paiement JavaScript PrestaShop\",\"Paiement par iframe PrestaShop\",\"Paiement PrestaShop\",\"Paiement sur une page Prestashop\",\"passerelle de paiement personnalis\u00e9e PrestaShop\",\"Passerelle de paiement PrestaShop\",\"PayU PrestaShop\",\"Personnalisation de la page de paiement PrestaShop\",\"PrestaShop API integration\",\"PrestaShop API-Integration\",\"PrestaShop OPC\",\"S\u00e9curit\u00e9 des paiements PrestaShop\",\"SimplyLease PrestaShop\",\"SuperCheckout PrestaShop\",\"Traitement des paiements PrestaShop\",\"webhooks de passerelle de paiement\",\"Webhooks PrestaShop\"],\"articleSection\":[\"Commerce \u00e9lectronique\",\"Ecommerce\",\"Prestashop\",\"Sin categorizar\"],\"inLanguage\":\"fr-FR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/fr\\\/ecommerce-blog\\\/prestashop-payment-gateway-integration\\\/\",\"url\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/fr\\\/ecommerce-blog\\\/prestashop-payment-gateway-integration\\\/\",\"name\":\"Int\u00e9gration d'une passerelle de paiement sur PrestaShop : Guide API et OPC\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/fr\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/fr\\\/ecommerce-blog\\\/prestashop-payment-gateway-integration\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/fr\\\/ecommerce-blog\\\/prestashop-payment-gateway-integration\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/French-1.jpg\",\"datePublished\":\"2026-09-09T12:21:13+00:00\",\"dateModified\":\"2026-09-30T08:31:28+00:00\",\"description\":\"Apprenez \u00e0 int\u00e9grer une passerelle de paiement personnalis\u00e9e dans PrestaShop, \u00e0 g\u00e9rer les API, les webhooks et les statuts de commande, ainsi qu'\u00e0 r\u00e9soudre les probl\u00e8mes de compatibilit\u00e9 avec l'OPC (One Page Checkout).\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/fr\\\/ecommerce-blog\\\/prestashop-payment-gateway-integration\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.knowband.com\\\/blog\\\/fr\\\/ecommerce-blog\\\/prestashop-payment-gateway-integration\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/fr\\\/ecommerce-blog\\\/prestashop-payment-gateway-integration\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/French-1.jpg\",\"contentUrl\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/French-1.jpg\",\"width\":760,\"height\":300,\"caption\":\"Int\u00e9gration d'une passerelle de paiement sur PrestaShop : Guide API et OPC\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/fr\\\/ecommerce-blog\\\/prestashop-payment-gateway-integration\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/fr\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Int\u00e9gration d&#8217;une passerelle de paiement personnalis\u00e9e dans PrestaShop&nbsp;: exigences techniques, flux API et d\u00e9fis OPC concrets\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/fr\\\/#website\",\"url\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/fr\\\/\",\"name\":\"Knowband Blog | Ecommerce Modules\",\"description\":\"Magento, Prestashop, Opencart, Shopify\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/fr\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/fr\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/fr\\\/#organization\",\"name\":\"Knowband Blog | Ecommerce Modules\",\"url\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/fr\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/fr\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/wp-content\\\/uploads\\\/2016\\\/09\\\/cropped-knowband_logo-v2.png\",\"contentUrl\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/wp-content\\\/uploads\\\/2016\\\/09\\\/cropped-knowband_logo-v2.png\",\"width\":153,\"height\":61,\"caption\":\"Knowband Blog | Ecommerce Modules\"},\"image\":{\"@id\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/fr\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/Knowband\",\"https:\\\/\\\/x.com\\\/KnowbandPlugin\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/fr\\\/#\\\/schema\\\/person\\\/ca485d026e41cbf45ae99b67d0c9ac74\",\"name\":\"Sophie\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/wp-content\\\/plugins\\\/wp-user-avatar\\\/deprecated\\\/wp-user-avatar\\\/images\\\/wpua-96x96.png\",\"url\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/wp-content\\\/plugins\\\/wp-user-avatar\\\/deprecated\\\/wp-user-avatar\\\/images\\\/wpua-96x96.png\",\"contentUrl\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/wp-content\\\/plugins\\\/wp-user-avatar\\\/deprecated\\\/wp-user-avatar\\\/images\\\/wpua-96x96.png\",\"caption\":\"Sophie\"},\"description\":\"We are experts in the eCommerce industry, specializing in high-quality plugin development. With years of experience, we deliver reliable and feature-rich modules for platforms such as Magento, PrestaShop, OpenCart, and Shopify. In addition to ready-made plugins, we also provide custom module development and tailored modification services to meet unique business needs. Our team stays ahead of industry trends, ensuring every solution we build enhances store performance, user experience, and overall functionality. With a strong customer-centric approach, we have become a trusted partner for businesses seeking powerful and scalable eCommerce plugin solutions.\",\"url\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/fr\\\/author\\\/titiksha-dwivedi\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Int\u00e9gration d'une passerelle de paiement sur PrestaShop : Guide API et OPC","description":"Apprenez \u00e0 int\u00e9grer une passerelle de paiement personnalis\u00e9e dans PrestaShop, \u00e0 g\u00e9rer les API, les webhooks et les statuts de commande, ainsi qu'\u00e0 r\u00e9soudre les probl\u00e8mes de compatibilit\u00e9 avec l'OPC (One Page Checkout).","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.knowband.com\/blog\/fr\/ecommerce-blog\/prestashop-payment-gateway-integration\/","og_locale":"fr_FR","og_type":"article","og_title":"Int\u00e9gration d'une passerelle de paiement sur PrestaShop : Guide API et OPC","og_description":"Apprenez \u00e0 int\u00e9grer une passerelle de paiement personnalis\u00e9e dans PrestaShop, \u00e0 g\u00e9rer les API, les webhooks et les statuts de commande, ainsi qu'\u00e0 r\u00e9soudre les probl\u00e8mes de compatibilit\u00e9 avec l'OPC (One Page Checkout).","og_url":"https:\/\/www.knowband.com\/blog\/fr\/ecommerce-blog\/prestashop-payment-gateway-integration\/","og_site_name":"Knowband Blog | Ecommerce Modules","article_publisher":"https:\/\/www.facebook.com\/Knowband","article_published_time":"2026-09-09T12:21:13+00:00","article_modified_time":"2026-09-30T08:31:28+00:00","og_image":[{"width":760,"height":300,"url":"https:\/\/www.knowband.com\/blog\/wp-content\/uploads\/2026\/09\/French-1.jpg","type":"image\/jpeg"}],"author":"Sophie","twitter_card":"summary_large_image","twitter_creator":"@KnowbandPlugin","twitter_site":"@KnowbandPlugin","twitter_misc":{"Written by":"Sophie","Est. reading time":"19 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.knowband.com\/blog\/fr\/ecommerce-blog\/prestashop-payment-gateway-integration\/#article","isPartOf":{"@id":"https:\/\/www.knowband.com\/blog\/fr\/ecommerce-blog\/prestashop-payment-gateway-integration\/"},"author":{"name":"Sophie","@id":"https:\/\/www.knowband.com\/blog\/fr\/#\/schema\/person\/ca485d026e41cbf45ae99b67d0c9ac74"},"headline":"Int\u00e9gration d&#8217;une passerelle de paiement personnalis\u00e9e dans PrestaShop&nbsp;: exigences techniques, flux API et d\u00e9fis OPC concrets","datePublished":"2026-09-09T12:21:13+00:00","dateModified":"2026-09-30T08:31:28+00:00","mainEntityOfPage":{"@id":"https:\/\/www.knowband.com\/blog\/fr\/ecommerce-blog\/prestashop-payment-gateway-integration\/"},"wordCount":4783,"publisher":{"@id":"https:\/\/www.knowband.com\/blog\/fr\/#organization"},"image":{"@id":"https:\/\/www.knowband.com\/blog\/fr\/ecommerce-blog\/prestashop-payment-gateway-integration\/#primaryimage"},"thumbnailUrl":"https:\/\/www.knowband.com\/blog\/wp-content\/uploads\/2026\/09\/French-1.jpg","keywords":["API de paiement PrestaShop","BLIK PrestaShop","Comfino PrestaShop","Compatibilit\u00e9 avec les passerelles de paiement","Compatibilit\u00e9 des paiements PrestaShop","Cr\u00e9ation de commandes PrestaShop","D\u00e9pannage des paiements PrestaShop","D\u00e9veloppement des paiements PrestaShop","Enviar clave de servicio web de forma segura","\u00c9tat de la commande PrestaShop","Flux de paiement PrestaShop","formulaire de paiement int\u00e9gr\u00e9","int\u00e9gration de l'API de la passerelle de paiement","Int\u00e9gration de l'API PrestaShop","Int\u00e9gration de la passerelle de paiement PrestaShop","Int\u00e9gration de la passerelle PrestaShop","int\u00e9gration de paiement personnalis\u00e9e","Int\u00e9gration des paiements PrestaShop","M\u00e9thodes de paiement PrestaShop","Module de paiement personnalis\u00e9 PrestaShop","Module de paiement PrestaShop","Options de paiement PrestaShop","Paiement AJAX PrestaShop","Paiement JavaScript PrestaShop","Paiement par iframe PrestaShop","Paiement PrestaShop","Paiement sur une page Prestashop","passerelle de paiement personnalis\u00e9e PrestaShop","Passerelle de paiement PrestaShop","PayU PrestaShop","Personnalisation de la page de paiement PrestaShop","PrestaShop API integration","PrestaShop API-Integration","PrestaShop OPC","S\u00e9curit\u00e9 des paiements PrestaShop","SimplyLease PrestaShop","SuperCheckout PrestaShop","Traitement des paiements PrestaShop","webhooks de passerelle de paiement","Webhooks PrestaShop"],"articleSection":["Commerce \u00e9lectronique","Ecommerce","Prestashop","Sin categorizar"],"inLanguage":"fr-FR"},{"@type":"WebPage","@id":"https:\/\/www.knowband.com\/blog\/fr\/ecommerce-blog\/prestashop-payment-gateway-integration\/","url":"https:\/\/www.knowband.com\/blog\/fr\/ecommerce-blog\/prestashop-payment-gateway-integration\/","name":"Int\u00e9gration d'une passerelle de paiement sur PrestaShop : Guide API et OPC","isPartOf":{"@id":"https:\/\/www.knowband.com\/blog\/fr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.knowband.com\/blog\/fr\/ecommerce-blog\/prestashop-payment-gateway-integration\/#primaryimage"},"image":{"@id":"https:\/\/www.knowband.com\/blog\/fr\/ecommerce-blog\/prestashop-payment-gateway-integration\/#primaryimage"},"thumbnailUrl":"https:\/\/www.knowband.com\/blog\/wp-content\/uploads\/2026\/09\/French-1.jpg","datePublished":"2026-09-09T12:21:13+00:00","dateModified":"2026-09-30T08:31:28+00:00","description":"Apprenez \u00e0 int\u00e9grer une passerelle de paiement personnalis\u00e9e dans PrestaShop, \u00e0 g\u00e9rer les API, les webhooks et les statuts de commande, ainsi qu'\u00e0 r\u00e9soudre les probl\u00e8mes de compatibilit\u00e9 avec l'OPC (One Page Checkout).","breadcrumb":{"@id":"https:\/\/www.knowband.com\/blog\/fr\/ecommerce-blog\/prestashop-payment-gateway-integration\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.knowband.com\/blog\/fr\/ecommerce-blog\/prestashop-payment-gateway-integration\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.knowband.com\/blog\/fr\/ecommerce-blog\/prestashop-payment-gateway-integration\/#primaryimage","url":"https:\/\/www.knowband.com\/blog\/wp-content\/uploads\/2026\/09\/French-1.jpg","contentUrl":"https:\/\/www.knowband.com\/blog\/wp-content\/uploads\/2026\/09\/French-1.jpg","width":760,"height":300,"caption":"Int\u00e9gration d'une passerelle de paiement sur PrestaShop : Guide API et OPC"},{"@type":"BreadcrumbList","@id":"https:\/\/www.knowband.com\/blog\/fr\/ecommerce-blog\/prestashop-payment-gateway-integration\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.knowband.com\/blog\/fr\/"},{"@type":"ListItem","position":2,"name":"Int\u00e9gration d&#8217;une passerelle de paiement personnalis\u00e9e dans PrestaShop&nbsp;: exigences techniques, flux API et d\u00e9fis OPC concrets"}]},{"@type":"WebSite","@id":"https:\/\/www.knowband.com\/blog\/fr\/#website","url":"https:\/\/www.knowband.com\/blog\/fr\/","name":"Knowband Blog | Ecommerce Modules","description":"Magento, Prestashop, Opencart, Shopify","publisher":{"@id":"https:\/\/www.knowband.com\/blog\/fr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.knowband.com\/blog\/fr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/www.knowband.com\/blog\/fr\/#organization","name":"Knowband Blog | Ecommerce Modules","url":"https:\/\/www.knowband.com\/blog\/fr\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.knowband.com\/blog\/fr\/#\/schema\/logo\/image\/","url":"https:\/\/www.knowband.com\/blog\/wp-content\/uploads\/2016\/09\/cropped-knowband_logo-v2.png","contentUrl":"https:\/\/www.knowband.com\/blog\/wp-content\/uploads\/2016\/09\/cropped-knowband_logo-v2.png","width":153,"height":61,"caption":"Knowband Blog | Ecommerce Modules"},"image":{"@id":"https:\/\/www.knowband.com\/blog\/fr\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Knowband","https:\/\/x.com\/KnowbandPlugin"]},{"@type":"Person","@id":"https:\/\/www.knowband.com\/blog\/fr\/#\/schema\/person\/ca485d026e41cbf45ae99b67d0c9ac74","name":"Sophie","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.knowband.com\/blog\/wp-content\/plugins\/wp-user-avatar\/deprecated\/wp-user-avatar\/images\/wpua-96x96.png","url":"https:\/\/www.knowband.com\/blog\/wp-content\/plugins\/wp-user-avatar\/deprecated\/wp-user-avatar\/images\/wpua-96x96.png","contentUrl":"https:\/\/www.knowband.com\/blog\/wp-content\/plugins\/wp-user-avatar\/deprecated\/wp-user-avatar\/images\/wpua-96x96.png","caption":"Sophie"},"description":"We are experts in the eCommerce industry, specializing in high-quality plugin development. With years of experience, we deliver reliable and feature-rich modules for platforms such as Magento, PrestaShop, OpenCart, and Shopify. In addition to ready-made plugins, we also provide custom module development and tailored modification services to meet unique business needs. Our team stays ahead of industry trends, ensuring every solution we build enhances store performance, user experience, and overall functionality. With a strong customer-centric approach, we have become a trusted partner for businesses seeking powerful and scalable eCommerce plugin solutions.","url":"https:\/\/www.knowband.com\/blog\/fr\/author\/titiksha-dwivedi\/"}]}},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.knowband.com\/blog\/fr\/wp-json\/wp\/v2\/posts\/841320","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.knowband.com\/blog\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.knowband.com\/blog\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.knowband.com\/blog\/fr\/wp-json\/wp\/v2\/users\/43"}],"replies":[{"embeddable":true,"href":"https:\/\/www.knowband.com\/blog\/fr\/wp-json\/wp\/v2\/comments?post=841320"}],"version-history":[{"count":5,"href":"https:\/\/www.knowband.com\/blog\/fr\/wp-json\/wp\/v2\/posts\/841320\/revisions"}],"predecessor-version":[{"id":841858,"href":"https:\/\/www.knowband.com\/blog\/fr\/wp-json\/wp\/v2\/posts\/841320\/revisions\/841858"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.knowband.com\/blog\/fr\/wp-json\/wp\/v2\/media\/841326"}],"wp:attachment":[{"href":"https:\/\/www.knowband.com\/blog\/fr\/wp-json\/wp\/v2\/media?parent=841320"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.knowband.com\/blog\/fr\/wp-json\/wp\/v2\/categories?post=841320"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.knowband.com\/blog\/fr\/wp-json\/wp\/v2\/tags?post=841320"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}