PROFESSIONAL NEWSGROUPSWINDEV , WEBDEV and WINDEV Mobile
[TUTO] Intégration de STRIPE avec l'API 2023
Started by by2k64, Sep., 30 2023 10:46 AM - 28 replies
Registered member 63 messages
Posted on September, 30 2023 - 10:46 AM
Bonjour à tous, pour ceux/celles que cela intéresse, ci-dessous la mise à jour de l'intégration de STRIPE dans un projet WEBDEV avec l'API version 2023. Je vous rappelle qu'il faut créer 2 pages en AWP pour le retour de transaction, perso j'ai opter pour TRANSACTION_OK.awp et TRANSACTION_PASOK.awp Dans la page TRANSACTION_OK, n'oublie d'insérer un LIB avec la mention "Transaction en cours, ne pas fermer cette fenêtre avant la fin du traitement" ou quelque chose dans le genre. Puis dans le code de fin d'initialisation, insérer le code suivant :VARTEMP_TRANSACTION_NUM est une chaîne = PageParamètre ( "session_id" ) SI HLitRecherche ( BASE_TRANSACTION_CB, NUM, VARTEMP_TRANSACTION_NUM, hIdentique + hBlocageNon ) ALORS SINON LIB_ INFO_HAUT = "Échec de la transaction !" LIB_ INFO_BAS = "La transaction par carte-bancaire a échouée." + RC + "Merci de renouveler dans quelques minutes." FIN
Dans la page TRANSACTION_PAS, pas de code particulier puisque utiliser en cas d'échec de la transaction. (a personnaliser) Dans le code d'initialisation du projet, insérer le code suivant :VAR_STRIPE_NUM est une chaîne < serveur uniquement > VAR_STRIPE_SKU est une chaîne < serveur uniquement > VAR_STRIPE_CHEMINOK est une chaîne < serveur uniquement > VAR_STRIPE_CHEMINPASOK est une chaîne < serveur uniquement > VAR_STRIPE_CLE_SECRET est une chaîne < serveur uniquement > VAR_STRIPE_CLE_PUBLIQUE est une chaîne < serveur uniquement > SI EnModeTest ( ) = Vrai ALORS VAR_IPNAVIGATEUR = "192.168.1.1" VAR_STRIPE_CHEMINOK = "http://localhost:8028/CHEMINLOCAL/TRANSACTION-OK.awp?session_id={CHECKOUT_SESSION_ID}" VAR_STRIPE_CHEMINPASOK = "http://localhost:8028/CHEMINLOCAL/TRANSACTION-OK.awp?session_id={CHECKOUT_SESSION_ID}" VAR_STRIPE_CLE_SECRET = C lé secrète test VAR_STRIPE_CLE_PUBLIQUE = C lé publique testSINON VAR_IPNAVIGATEUR = NavigateurAdresseIP ( ) VAR_STRIPE_CHEMINOK = "https://LIENDISTANT/TRANSACTION-OK.awp?session_id={CHECKOUT_SESSION_ID}" VAR_STRIPE_CHEMINPASOK = "https://LIENDISTANT/TRANSACTION-PASOK.awp?session_id={CHECKOUT_SESSION_ID}" VAR_STRIPE_CLE_SECRET = C lé secrète production VAR_STRIPE_CLE_PUBLIQUE = C lé publique productionFIN
La page de paiement, créer un champ HTML simple, que vous nommerez HTM_CB ,que vous rendrez invisible et cocher l'option superposé. Enfin cette page de paiement, créer un bouton et insérer les lignes suivante dans le code du clic sur en mode navigateur en supprimant l'option AJAX :VARLOCAL_CONTENUREQUETE est une chaîne REST_REQUETE est un restRequête REST_Reponse est un restRéponse v Reponse est Variantn MontantEntier, n MontantEntier100 sont des entiersx MontantMonétaire est un numériquex MontantMonétaire = n MontantEntier = x MontantMonétairen MontantEntier100 = n MontantEntier* 100 VARLOCAL_CONTENUREQUETE = "" VARLOCAL_CONTENUREQUETE + = [ "&" ] + "name=" + ChaîneVersUTF8 ( "TITRE PRINCIPAL" ) + "" VARLOCAL_CONTENUREQUETE + = [ "&" ] + "description=" + VARIABLE_OU_CHAMP+ "" VARLOCAL_CONTENUREQUETE + = [ "&" ] + "images[]=" + VARIABLE_DU_LIEN_IMAGE_DU_PRODUIT+ "" REST_REQUETE.. URL = "https://api.stripe.com/v1/products" REST_REQUETE.. Méthode = httpPost REST_REQUETE.. Utilisateur = VAR_STRIPE_CLE_SECRET + ":" REST_REQUETE.. Contenu = VARLOCAL_CONTENUREQUETE REST_Reponse = RESTEnvoie ( REST_REQUETE) v Reponse = JSONVersVariant ( REST_Reponse.. Contenu ) VARLOCAL_CONTENUREQUETE = "" VARLOCAL_CONTENUREQUETE + = [ "&" ] + "product=" + v Reponse.Id+ "" VARLOCAL_CONTENUREQUETE + = [ "&" ] + "unit_amount=" + n MontantEntier100+ "" VARLOCAL_CONTENUREQUETE + = [ "&" ] + "currency=eur" REST_REQUETE.. URL = "https://api.stripe.com/v1/prices" REST_REQUETE.. Méthode = httpPost REST_REQUETE.. Utilisateur = VAR_STRIPE_CLE_SECRET + ":" REST_REQUETE.. Contenu = VARLOCAL_CONTENUREQUETE REST_Reponse = RESTEnvoie ( REST_REQUETE) v Reponse = JSONVersVariant ( REST_Reponse.. Contenu ) VARLOCAL_CONTENUREQUETE = "" VARLOCAL_CONTENUREQUETE + = [ "&" ] + "line_items[0][quantity]=1" VARLOCAL_CONTENUREQUETE + = [ "&" ] + "line_items[0][price]=" + v Reponse.Id+ "" VARLOCAL_CONTENUREQUETE + = [ "&" ] + "client_reference_id=" + VARIABLE_OU_CHAMP+ "" VARLOCAL_CONTENUREQUETE + = [ "&" ] + "customer_email=" + VARIABLE_OU_CHAMP+ "" VARLOCAL_CONTENUREQUETE + = [ "&" ] + "mode=payment" VARLOCAL_CONTENUREQUETE + = [ "&" ] + "locale=fr" VARLOCAL_CONTENUREQUETE + = [ "&" ] + "success_url=" + VAR_STRIPE_CHEMINOK+ "" VARLOCAL_CONTENUREQUETE + = [ "&" ] + "cancel_url=" + VAR_STRIPE_CHEMINPASOK+ "" REST_REQUETE.. URL = "https://api.stripe.com/v1/checkout/sessions" REST_REQUETE.. Méthode = httpPost REST_REQUETE.. Utilisateur = VAR_STRIPE_CLE_SECRET + ":" REST_REQUETE.. Contenu = VARLOCAL_CONTENUREQUETE REST_Reponse = RESTEnvoie ( REST_REQUETE) v Reponse = JSONVersVariant ( REST_Reponse.. Contenu ) SI ErreurDétectée ALORS Erreur ( "Accès au serveur impossible. Opération annulée" ) RETOUR FIN SI REST_Reponse.CodeEtat < > 200 ALORS Erreur ( "Échec de la Transaction CB" ) RETOUR FIN s CodeHtml est une chaîne = [ <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <script src="https://js.stripe.com/v3/"></script> </head> <body> <script type="text/javascript"> <!-- var stripe = Stripe('%1'); stripe.redirectToCheckout({ sessionId: '%2' }).then(function (result) { }); //--> </script> </body> </html> ] HTM_ CB = ChaîneConstruit ( s CodeHtml, VAR_STRIPE_CLE_PUBLIQUE, v Reponse.Id)
Registered member 141 messages
Posted on October, 02 2023 - 9:49 AM
Bonjour Frédéric Top ! Merci pour le partage Cdt Sylvain
Registered member 2 messages
Posted on November, 09 2023 - 1:49 PM
Si le champ HTM_CB est invisible alors à quoi sert ce champs ? Doit-on le rendre visible à un moment donné ? Je ne comprends pas le fonctionnement même si je comprends le code le champs html va afficher la page checkout de stripe ? Merci d'avance pour le suivi
Registered member 1,384 messages
Posted on November, 10 2023 - 10:47 AM
Registered member 101 messages
Posted on November, 10 2023 - 7:43 PM
Bonsoir Frédéric, J'ai testé ton code et il semble fonctionner. Et j'aimerais maintenant le compliquer un peu en donnant la possibilité de faire des paiements récurrents (au lieu de mode=payment, on a mode=subscription) En lisant la doc de Stripe, je comprends qu'il faut faire plusieurs requêtes successives et à un moment donné, on doit récupérer l'ID du produit qu'on passe dans la requête de subscription. Je l'ai fait et j'ai une erreur. As-tu déjà fait cela ? Merci pour ton retour et bien à vous -- Merci et belle journée ! Michel
Registered member 291 messages
Posted on November, 11 2023 - 2:43 PM
Bonjour MichelH Difficile de t'aider avec si peu d'informations ... Bien Cordialement
Registered member 101 messages
Posted on November, 11 2023 - 5:51 PM
Bonjour, Pardon d'avoir été aussi succinct ! J'ai réalisé une requête à l'identique de ce qui a été fait par Frederic à l'origine de ce post. Et ça fonctionne parfaitement bien. Sauf que cette requête ne prend en compte que les paiements "uniques", oneshot, décrit par l'objet "mode=payment" de la requête : j'achète un produit, je paye et si je veux racheter ce produit je dois repayer. Je voudrais réaliser la même chose mais qui prenne en compte les paiements récurrents (ou abonnement au sens de Stripe), c'est à dire je m'inscris et j'achète un produit et je paye x € tous les mois, sans devoir y revenir. Ce cas est prévu par Stripe, d'abord avec l'objet "mode=subscription". Après avoir potassé la doc de Stripe, j'ai essayé de mettre en œuvre mais ça ne va pas au bout. Il existe plusieurs façons de mettre cela en œuvre dans Stripe, Par exemple en créant d'abord une requête pour définir un produit, en récupérant l'ID du produit et en passant une autre requête avec line-item. Il est aussi possible de créer des produit sur le dashboard de Stripe et de les appeler directement par leur ID dans une requête. J'ai essayé plusieurs chemins mais j'ai toujours un code erreur à la fin. J'ai bien sûr écrit à Stripe, qui voient les logs, donc mes requêtes envoyées et la réponse avec le code d'erreur le cas échéant. Et mon interlocuteur m'a répondu qu'il devait analyser ma demande et se concerter avec sa team. Ma demande n'était pas tant de m'aider à trouver pourquoi j'ai des erreurs, mais de partager sur la meilleure façon de prendre en compte les paiements récurrents dans Stripe. Merci pour votre retour -- Merci et belle journée ! Michel
Registered member 63 messages
Posted on November, 19 2023 - 11:45 AM
luckycnd a écrit : Si le champ HTM_CB est invisible alors à quoi sert ce champs ? Doit-on le rendre visible à un moment donné ? Je ne comprends pas le fonctionnement même si je comprends le code le champs html va afficher la page checkout de stripe ? Merci d'avance pour le suivi
Bonjour luckycnd , ce champ HTML invisible sert en effet à envoyer la commande à l'API de Stripe et à ouvrir la page de paiement.
Registered member 63 messages
Posted on November, 19 2023 - 11:49 AM
MichelH a écrit : Bonsoir Frédéric, J'ai testé ton code et il semble fonctionner. Et j'aimerais maintenant le compliquer un peu en donnant la possibilité de faire des paiements récurrents (au lieu de mode=payment, on a mode=subscription) En lisant la doc de Stripe, je comprends qu'il faut faire plusieurs requêtes successives et à un moment donné, on doit récupérer l'ID du produit qu'on passe dans la requête de subscription. Je l'ai fait et j'ai une erreur. As-tu déjà fait cela ? Merci pour ton retour et bien à vous -- Merci et belle journée ! Michel
Bonjour Michel, je n'ai besoin que de paiement unique, mais je vais me pencher sur les paiements récurrents, on se tient informé de nos avancés sur cette page.
Registered member 21 messages
Posted on November, 20 2023 - 9:51 PM
Bonjour Frédéric Le code fonctionne très bien par contre je n'arrive pas à avoir la redirection de HTM_CB vers Stripe. Utilises tu une page session ou awp. J'ai testé les 2 et même chose. Une config spéciale sur HTM_CB ? Cordialement
Registered member 101 messages
Posted on November, 22 2023 - 10:44 AM
Bonjour Frédéric, J'ai enfin réussi à faire du paiement récurrent. En fait, ce n'est pas très différent de ce que tu as fait, à une subtilité près. Dans ton cas, tu lances successivement les requêtes PRODUCTS, PRICES et CHECKOUT et ça prend en compte un paiement unique. Pour ma part, j'ai réussi à faire cela en envoyant une seule requête CHECKOUT et en y mettant tous les objets dedans (success_url, cancel_url, payment_method_types, line_items (name, amount, currency, quantity) avec plusieurs produits possibles, customer_email, client_reference_id à minima). Et ça fait le taf ! Pour un paiement récurrent, j'ai passé les requêtes successives : - PRODUCTS avec les objets name et description à minima - PLANS avec les objets product, amount, currency, interval, interval-count - CHECKOUT avec les mêmes objets que précédemment Et ça fonctionne ! J'ai encore des petits problèmes pour afficher dans la page stripe les données là où je veux, mais c'est acceptable. J'ai surtout un problème, en GO, c'est que je me fais jeter de ma session dès que la page de paiement Stripe s'ouvre. Du coup, à partir du moment ou j'affiche la page Succès ou Échec, je ne peux plus ensuite revenir dans le projet (normal car j'en suis sorti). Une piste là-dessus ??? Ma page de départ est en mode session et les autres en AWP... Bonjour Thierry. Je ne vois pas d'où peut venir ton problème... Si tu n'arrives pas à ouvrir la page de paiement Stripe, c'est que le code HTML donné par la chaine sCodeHtml a un problème. Non ? -- Merci et belle journée ! Michel
Registered member 101 messages
Posted on November, 22 2023 - 5:59 PM
Thierry, Une précision. Dans la réponse de la dernière requête CHECKOUT, il y a l'url de la page STRIPE (vReponse.url) constituée à partir des éléments définis avant. Donc j'en conclus qu'il n'est pas nécessaire d'utiliser le champ HTM_CB. Cela donne plus de possibilités comme ouvrir la page STRIPE dans un nouvel onglet du navigateur ou une popup et renvoyer un résultat plus facilement à la page d'origine -- Merci et belle journée ! Michel
Posted on November, 23 2023 - 9:59 AM
FREDERIC a exprimé avec précision :Bonjour à tous, pour ceux/celles que cela intéresse, ci-dessous la mise à jour de l'intégration de STRIPE dans un projet WEBDEV avec l'API version 2023.
Bonjour Merci de ce post qui va nous permettre de remettre la main dans le cambouis sur ce sujet. On avait déjà commencé à developper des tests en décembre 2021, mais on n'avait pas été jusqu'au bout. Donc je profite de ce sujet pour vous poser des questions : - plus besoin de php désormais ? tout se fait en prog directe avec l'api ? (car nos tests de 2021 tournaient autour de php) - il n'y a plus rien à mettre sur le serveur ? - concernant le tarif, c'est bien seulement un % et un montant par transaction ? (je le vois sur le site, mais de votre expérience pas de coûts cachés ?) merci de vos réponses. (et j'ai vu dans ce forum que l'on pouvait avoir une collection postman, je vais donc regarder cela aussi) -- Cet e-mail a été vérifié par le logiciel antivirus d'Avast.www.avast.com
Registered member 101 messages
Posted on November, 24 2023 - 3:10 PM
Bonjour Éric, Pour ce qui me concerne, je n'ai rien fait en php et tout se fait dans webdev. Et ça ressemble à ce que nous a proposé Frédéric dans ce post. Mais je découvre de nouvelles choses tous les jours et j'affine ! Je suis en train de me faire une collection des méthodes utilisables en POST ou en GET (pour interroger STRIPE sur un ID client existant par exemple) et pour chaque méthode, les objets (et leur type) permis à mettre dans la requête. À partir de là, rien de plus simple, on constitue la requête HTTP et on l'envoie et on lit le résultat. J'ai demandé à STRIPE s'ils avaient un document synthétique répertoriant tout cela... Pour ce qui est du tarif, ils écrivent sur leur site : 1,5 % + 0,25 € par transaction. Quand je regarde sur le dashboard, je vois que pour un paiement de 345 €, je paye 11,46 € de frais et pour 958 €, je paye 31,39€ de frais. Comment y retrouver ses petits ??? Je pense que ça fera l'objet d'une prochaine demande à l'assistance STRIPE ! -- Merci et belle journée ! Michel
Posted on November, 24 2023 - 3:21 PM
MichelH a formulé ce vendredi :Bonjour Éric, Pour ce qui me concerne, je n'ai rien fait en php et tout se fait dans webdev. Et ça ressemble à ce que nous a proposé Frédéric dans ce post. Mais je découvre de nouvelles choses tous les jours et j'affine ! Je suis en train de me faire une collection des méthodes utilisables en POST ou en GET (pour interroger STRIPE sur un ID client existant par exemple) et pour chaque méthode, les objets (et leur type) permis à mettre dans la requête. À partir de là, rien de plus simple, on constitue la requête HTTP et on l'envoie et on lit le résultat. J'ai demandé à STRIPE s'ils avaient un document synthétique répertoriant tout cela...
il y a des collections postman mais j'avoue que je ne sais pas encore laquelle choisir Pour ce qui est du tarif, ils écrivent sur leur site : 1,5 % + 0,25 ¤ par transaction. Quand je regarde sur le dashboard, je vois que pour un paiement de 345 ¤, je paye 11,46 ¤ de frais et pour 958 ¤, je paye 31,39¤ de frais. Comment y retrouver ses petits ??? Je pense que ça fera l'objet d'une prochaine demande à l'assistance STRIPE !
Bonjour Michel Merci de ta réponse mais c'est énorme ces frais ?? cela fait du 3.4% -- Cet e-mail a été vérifié par le logiciel antivirus d'Avast.www.avast.com
Registered member 101 messages
Posted on November, 24 2023 - 3:49 PM
Effectivement, je découvre Postman et il répond à mon besoin ! Merci pour ça ! Cela doit faire un peu moins de frais que cela car il faut retrancher d'abord les frais fixes mais on n'est pas à ce qu'ils disent. Bon point, plus la somme est importante et plus le % de frais diminue, on se console comme on peut ! J'ai osé la question à STRIPE... -- Merci et belle journée ! Michel
Posted on November, 24 2023 - 5:20 PM
Le 24/11/2023, MichelH a supposé :Effectivement, je découvre Postman et il répond à mon besoin ! Merci pour ça ! Cela doit faire un peu moins de frais que cela car il faut retrancher d'abord les frais fixes mais on n'est pas à ce qu'ils disent. Bon point, plus la somme est importante et plus le % de frais diminue, on se console comme on peut ! J'ai osé la question à STRIPE...
Bonjour Merci pour ce tuto, j'arrive à créer des produits mais quand j'ai voulu passer des descriptifs plus compliqués name=UNLIMITED SOLO&description=Utilisation pour 1 coach passagers illimités abonnement 1 an&images[0]= je tombe sur un invalid request si description je mets ube chaine courte ça passe on peut passer en json ? Sinon l'image il ne la prends pas j'ai essayé images[] et images[0] faut que je fasse un urlencode ? Merci de vos réponses -- Cet e-mail a été vérifié par le logiciel antivirus d'Avast.www.avast.com
Registered member 101 messages
Posted on November, 28 2023 - 9:26 AM
Bonjour Eric, J'ai eu le même soucis pour les images. Le problème vient de la syntaxe de la chaine qui exprime le chemin avec le nom. Si tu construis cette chaine avec des fonctions WLangage, tu la colles dans ton code et tu regardes le résultat dans le log d'erreur de Stripe, tous les "\" sont doublés. En écrivant ce chemin manuellement (C:\Mes Sites\Projet...), le problème disparait. Après, je ne me rappelle plus comment j'ai reformaté la chaine pour qu'elle soit "compatible". La bonne syntaxe pour les images est images[0] (puis 1...) car c'est un paramètre de type tableau. Pour la description, j'ai eu aussi le même problème et c'est aussi un problème de syntaxe de la chaine car certains caractères ne sont pas supportés. Lesquels, je ne me rappelle plus, mais en jouant avec la chaine et en regardant le log d'erreur, on retrouve vite ses petits. -- Merci et belle journée ! Michel
Posted on November, 28 2023 - 11:52 AM
MichelH avait énoncé :Bonjour Eric, J'ai eu le même soucis pour les images. Le problème vient de la syntaxe de la chaine qui exprime le chemin avec le nom. Si tu construis cette chaine avec des fonctions WLangage, tu la colles dans ton code et tu regardes le résultat dans le log d'erreur de Stripe, tous les "\" sont doublés. En écrivant ce chemin manuellement (C:\Mes Sites\Projet...), le problème disparait. Après, je ne me rappelle plus comment j'ai reformaté la chaine pour qu'elle soit "compatible". La bonne syntaxe pour les images est images[0] (puis 1...) car c'est un paramètre de type tableau. Pour la description, j'ai eu aussi le même problème et c'est aussi un problème de syntaxe de la chaine car certains caractères ne sont pas supportés. Lesquels, je ne me rappelle plus, mais en jouant avec la chaine et en regardant le log d'erreur, on retrouve vite ses petits.
Bonjour Michel en fait j'ai repris le code en passant non pas par les params dans l'url, mais par le ..Content Bon ce qui est ch.. avec stripe c'est qu'il ne passe pas par du json pour les paramètres de leur API, c'est quand même plus propre. j'ai mis un post d'ailleurs dans le forume Windev pour savoir si on ne pouvait pas faire mieux question code. Voilà le code qui marche par exemple pour créér un productrestreq est un restRequête restreponse est un restRéponse contenujson est une chaîne contenu est un Variant x est un JSON x.name=ChaîneVersUTF8(GIF_REFEXT) x.description=GIF_COMM_FR TableauAjoute(x.imageprod,GIF_HTTPIMG) sMyBufferJson est une chaîne sMyBufferJson="name="+URLEncode(x.name,encodeURLDepuisAnsi)+"&" sMyBufferJson+="description="+URLEncode(x.description,encodeURLDepuisAnsi)+"&" sMyBufferJson+=URLEncode("images[0]=",encodeURLDepuisAnsi)+URLEncode(x.imageprod[1],encodeURLParamètre) gToken=VAR_STRIPE_CLE_SECRET VariableRAZ(restreq) restreq..URL = "https://api.stripe.com/v1/products" restreq.Entête["Authorization"] = "Bearer "+gToken restreq..Méthode = httpPost restreq.ContentType = "application/x-www-form-urlencoded" restreq.Content = sMyBufferJson restreponse = RESTEnvoie(restreq) contenujson = restreponse..Contenu contenu = JSONVersVariant(contenujson)
-- Cet e-mail a été vérifié par le logiciel antivirus d'Avast.www.avast.com
Registered member 101 messages
Posted on November, 28 2023 - 3:04 PM
Pour ma part, j'utilise comme toi une requête sur le modèle initié dans ce post. Et j'arrive globalement à faire ce que je veux. Et j'ai commencé à "discuter" avec STRIPE en envoyant des requêtes GET, utile par exemple pour valider si un client existe ou non. À suivre... -- Merci et belle journée ! Michel
Posted on November, 28 2023 - 6:54 PM
MichelH avait écrit le 28/11/2023 :Pour ma part, j'utilise comme toi une requête sur le modèle initié dans ce post. Et j'arrive globalement à faire ce que je veux. Et j'ai commencé à "discuter" avec STRIPE en envoyant des requêtes GET, utile par exemple pour valider si un client existe ou non. À suivre...
une chose que je ne comprends pas. je teste avec postman Avec la clé qu'il me génère en test, ça marche. Par contre si je mets la clé de prod, il me répond invalid key Si je teste avec mon code windev, cela me crée bien en création. donc question 1 : postman c'est possible qu'en mode test ?? question 2 : les produits que je crée avec windev et une url de l'image, je vois bien l'image dans le dashboard de stripe en vignette, mais pas en modifier fiche. Alors que si je met à jour ou crée par le dashboard, je les ais en vignette et en fiche. j'espère que les images seront ok dans les checkout et billing -- Cet e-mail a été vérifié par le logiciel antivirus d'Avast.www.avast.com
Registered member 101 messages
Posted on November, 30 2023 - 8:31 AM
Bonjour Eric, Désolé mais ma maitrise de POSTMAN que j'ai découvert sur tes conseils il y a quelques jours ne me permet pas de t'aider... Et pour ta question 2, je ne suis pas sûr de la comprendre. -- Merci et belle journée ! Michel
Posted on November, 30 2023 - 2:31 PM
MichelH avait écrit le 30/11/2023 :Bonjour Eric, Désolé mais ma maitrise de POSTMAN que j'ai découvert sur tes conseils il y a quelques jours ne me permet pas de t'aider... Et pour ta question 2, je ne suis pas sûr de la comprendre.
en fait, en programmation je crée des products je leur donne une url d'image qui pointe sur un de mes serveurs. Si je vais ensuite dans le BO stripe, je vois mon image en vignette Si je fais modifier fiche, il ne charge pas cette image. Si j'utilise le back office stripe et je change l'image, il va la poser sur un serveur stripe et là pour le coup, on la voit en vignette et en édition fiche. d'où ma crainte de la dispo d'une image créée par prog. Mais je le verrai qd je ferais du test de checkout, mais pas tout de suite car là j'ai du passer à autre chose -- Cet e-mail a été vérifié par le logiciel antivirus d'Avast.www.avast.com
Registered member 5 messages
Posted on January, 16 2025 - 2:54 PM
Bonjour, Je ne sais pas si ce sujet est toujours d'actualité mais je travaille actuellement sur un projet de paiement en ligne avec STRIPE pour lequel je rencontre un pb lors de la redirection vers la page de paiement de stripe. En effet tout semble bien se passer mais après le code sHtmlStripe est une chaîne =[ <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <script src="https://js.stripe.com/v3/ "></script> </head > <body> <script type="text/javascript"> <!-- var stripe = Stripe('%1'); stripe.redirectToCheckout({ // Make the id field from the Checkout Session creation API response // available to this file, so you can provide it as parameter here // instead of the {{CHECKOUT_SESSION_ID}} placeholder. sessionId: '%2' }).then(function (result) { // If `redirectToCheckout` fails due to a browser or network // error, display the localized error message to your customer // using `result.error.message`. }); //--> </script> </body> </html> ] sHtmlStripe = ChaîneConstruit(sHtmlStripe,gsClePublique,ReponseStripeEnVariant.Id) HTM_Stripe = sHtmlStripe Il ne se passe plus rien. Je dois utiliser l'url contenu dans la reponse de la requete REST pour ouvrir la page de paiement. Est ce normal ou ce n'est pas la bonne pratique ? Merci pour votre aide.
Posted on January, 17 2025 - 8:01 AM
Ollivier a écrit : Bonjour,
Je ne sais pas si ce sujet est toujours d'actualité mais je travaille actuellement sur un projet de paiement en ligne avec STRIPE pour lequel je rencontre un pb lors de la redirection vers la page de paiement de stripe.
En effet tout semble bien se passer mais après le code
sHtmlStripe est une chaîne =[
<!DOCTYPE html>
<html> <head> <meta charset="UTF-8">
<script src="
https://js.stripe.com/v3/ "></script>
</head
>
<body>
<script type="text/javascript">
<!--
var stripe = Stripe('%1');
stripe.redirectToCheckout({
// Make the id field from the Checkout Session creation API response
// available to this file, so you can provide it as parameter here
// instead of the {{CHECKOUT_SESSION_ID}} placeholder.
sessionId: '%2'
}).then(function (result) {
// If `redirectToCheckout` fails due to a browser or network
// error, display the localized error message to your customer
// using `result.error.message`.
});
//-->
</script>
</body>
</html>
]
sHtmlStripe = ChaîneConstruit(sHtmlStripe,gsClePublique,ReponseStripeEnVariant.Id)
HTM_Stripe = sHtmlStripe
Il ne se passe plus rien. Je dois utiliser l'url contenu dans la reponse de la requete REST pour ouvrir la page de paiement.
Est ce normal ou ce n'est pas la bonne pratique ?
Merci pour votre aide.
Bonjour Olivier, difficile de te répondre ne ayant qu'une partie du code. Comment récupères tu la réponse Stripe appelé en %2 ? Mon code est parfaitement opérationnel mais je récupérer la réponse ID avant l'appel du HTML avec une requête httpPost. Attention, vérifie également que ton code soit dans la partie SERVEUR de ton bouton en mode Rechargement complet de la page et non pas en rechargement minimal.
Registered member 7 messages
Posted on January, 17 2025 - 10:49 AM
Bonjour Je cherche à sécuriser le Webhook stripe. je récupère correctement le Json de l'événement avec : spayload = PageParamètre(paramBuffer) je récupère aussi Stripe signature avec : ssig_header est une chaîne ssig_header = PageLitEntêteHTTP("stripe-signature") J'ai ma clef Webhook : sendpoint_secret est une chaîne = "whsec_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx et là à partir de maintenant je bloque. Je n'arrive pas à traduire en Wlangage la commande : $event = \Stripe\Webhook::constructEvent($payload, $sig_header, $endpoint_secret); qui elle est en php. est ce que quelqu'un a réussit à sécuriser le Webhook avec Webdev et pourrai m'aider à finaliser cette sécurisation. >Merci
Posted on January, 20 2025 - 7:21 AM
Fred a écrit : Ollivier a écrit :
Bonjour,
Je ne sais pas si ce sujet est toujours d'actualité mais je travaille actuellement sur un projet de paiement en ligne avec STRIPE pour lequel je rencontre un pb lors de la redirection vers la page de paiement de stripe.
En effet tout semble bien se passer mais après le code
sHtmlStripe est une chaîne =[
<!DOCTYPE html>
<html> <head> <meta charset="UTF-8">
<script src="
https://js.stripe.com/v3/ "></script>
</head
>
<body>
<script type="text/javascript">
<!--
var stripe = Stripe('%1');
stripe.redirectToCheckout({
// Make the id field from the Checkout Session creation API response
// available to this file, so you can provide it as parameter here
// instead of the {{CHECKOUT_SESSION_ID}} placeholder.
sessionId: '%2'
}).then(function (result) {
// If `redirectToCheckout` fails due to a browser or network
// error, display the localized error message to your customer
// using `result.error.message`.
});
//-->
</script>
</body>
</html>
]
sHtmlStripe = ChaîneConstruit(sHtmlStripe,gsClePublique,ReponseStripeEnVariant.Id)
HTM_Stripe = sHtmlStripe
Il ne se passe plus rien. Je dois utiliser l'url contenu dans la reponse de la requete REST pour ouvrir la page de paiement.
Est ce normal ou ce n'est pas la bonne pratique ?
Merci pour votre aide.
Bonjour Olivier, difficile de te répondre ne ayant qu'une partie du code.
Comment récupères tu la réponse Stripe appelé en %2 ?
Mon code est parfaitement opérationnel mais je récupérer la réponse ID avant l'appel du HTML avec une requête httpPost.
Attention, vérifie également que ton code soit dans la partie SERVEUR de ton bouton en mode Rechargement complet de la page et non pas en rechargement minimal.
Bonjour Fred, Un grand merci pour ton aide. Le pb provenait effectivement du rechargement de la page qui était en mode Ajax. Juste cette petit modification et cela fonctionne parfaitement. Je n'ai pas acquis tous les reflex pour webdev. En tout cas je te souhaite une excellente semaine.
Registered member 39 messages
Posted on February, 18 2025 - 7:21 PM
Alors j'étais ravi de trouver du code à ce sujet mais ça ne fonctionne pas, j'y comprends rien. VARTEMP_TRANSACTION_NUM est une chaîne = PageParamètre("session_id") SI HLitRecherche(BASE_TRANSACTION_CB,NUM,VARTEMP_TRANSACTION_NUM,hIdentique+hBlocageNon) ALORS // APPEL AU TRAITEMENT SINON LIB_INFO_HAUT = "Échec de la transaction !" LIB_INFO_BAS = "La transaction par carte-bancaire a échouée."+RC+"Merci de renouveler dans quelques minutes." FIN session_id s'est quoi ? Merci pour votre aide j'en peux plus
Registered member 5 messages
Posted on April, 23 2025 - 12:00 PM
Bonjour, J'essaie de mettre en place cette solution de paiement et j'aimerai connaitre la meilleure façon de gérer les enregistrements dans une base de données HFSQL. La base sélectionnée dépend du login de l'internaute, elle est donc définie avec HOuvreConnexion et HChangeConnexion dans la page d'identification. Typiquement, je dois attendre le retour de stripe avant d'enregistrer un règlement dans la base, donc pour cela j'utilise la page (page succès) mais cette page est en awp, elle n'a donc pas conservé le contexte et notamment la connexion à la base de données. Quels moyens utilisez vous pour contourner ce problème ? Merci à tous pour vos conseils.