|
FORUMS PROFESSIONNELS WINDEV, WEBDEV et WINDEV Mobile |
| | | | | |
[TUTO] Intégration de STRIPE avec l'API 2023 |
Débuté par by2k64, 30 sep. 2023 10:46 - 25 réponses |
| |
| | | |
|
| |
Membre enregistré 63 messages |
|
Posté le 30 septembre 2023 - 10:46 |
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 = Clé secrète test VAR_STRIPE_CLE_PUBLIQUE = Clé publique test SINON 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 = Clé secrète production VAR_STRIPE_CLE_PUBLIQUE = Clé publique production FIN
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 vReponse est Variant
nMontantEntier, nMontantEntier100 sont des entiers xMontantMonétaire est un numérique xMontantMonétaire = nMontantEntier = xMontantMonétaire nMontantEntier100 = nMontantEntier*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) vReponse = JSONVersVariant(REST_Reponse..Contenu)
VARLOCAL_CONTENUREQUETE = "" VARLOCAL_CONTENUREQUETE += ["&"] + "product="+vReponse.Id+"" VARLOCAL_CONTENUREQUETE += ["&"] + "unit_amount="+nMontantEntier100+"" 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) vReponse = JSONVersVariant(REST_Reponse..Contenu)
VARLOCAL_CONTENUREQUETE = "" VARLOCAL_CONTENUREQUETE += ["&"] + "line_items[0][quantity]=1" VARLOCAL_CONTENUREQUETE += ["&"] + "line_items[0][price]="+vReponse.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) vReponse = 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
sCodeHtml 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(sCodeHtml,VAR_STRIPE_CLE_PUBLIQUE,vReponse.Id) |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 141 messages |
|
Posté le 02 octobre 2023 - 09:49 |
Bonjour Frédéric
Top !
Merci pour le partage
Cdt
Sylvain |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 2 messages |
|
Posté le 09 novembre 2023 - 13:49 |
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 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 1 374 messages |
|
Posté le 10 novembre 2023 - 10:47 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 101 messages |
|
Posté le 10 novembre 2023 - 19:43 |
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 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 291 messages |
|
Posté le 11 novembre 2023 - 14:43 |
Bonjour MichelH Difficile de t'aider avec si peu d'informations ... Bien Cordialement |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 101 messages |
|
Posté le 11 novembre 2023 - 17:51 |
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 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 63 messages |
|
Posté le 19 novembre 2023 - 11:45 |
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. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 63 messages |
|
Posté le 19 novembre 2023 - 11:49 |
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. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 21 messages |
|
Posté le 20 novembre 2023 - 21:51 |
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 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 101 messages |
|
Posté le 22 novembre 2023 - 10:44 |
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 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 101 messages |
|
Posté le 22 novembre 2023 - 17:59 |
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 |
| |
| |
| | | |
|
| | |
| |
Posté le 23 novembre 2023 - 09:59 |
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 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 101 messages |
|
Posté le 24 novembre 2023 - 15:10 |
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 |
| |
| |
| | | |
|
| | |
| |
Posté le 24 novembre 2023 - 15:21 |
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 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 101 messages |
|
Posté le 24 novembre 2023 - 15:49 |
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 |
| |
| |
| | | |
|
| | |
| |
Posté le 24 novembre 2023 - 17:20 |
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 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 101 messages |
|
Posté le 28 novembre 2023 - 09:26 |
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 |
| |
| |
| | | |
|
| | |
| |
Posté le 28 novembre 2023 - 11:52 |
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 product
restreq 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 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 101 messages |
|
Posté le 28 novembre 2023 - 15:04 |
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 |
| |
| |
| | | |
|
| | |
| |
Posté le 28 novembre 2023 - 18:54 |
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 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 101 messages |
|
Posté le 30 novembre 2023 - 08:31 |
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 |
| |
| |
| | | |
|
| | |
| |
Posté le 30 novembre 2023 - 14:31 |
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 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 4 messages |
|
Posté le 16 janvier 2025 - 14:54 |
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. |
| |
| |
| | | |
|
| | |
| |
Posté le 17 janvier 2025 - 08:01 |
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. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 7 messages |
|
Posté le 17 janvier 2025 - 10:49 |
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 |
| |
| |
| | | |
|
| | | | |
| | |
| | |
| |
|
|
|