PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WEBDEV 2024 → [TUTO] Intégration de STRIPE avec l'API 2023
[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
// 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


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 secrète test
VAR_STRIPE_CLE_PUBLIQUE = C 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 = C secrète production
VAR_STRIPE_CLE_PUBLIQUE = C 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 = // VARIABLE OU CHAMP DU MONTANT DE LA TRANSACTION
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>
]

// TRAITEMENT EVENTUEL DE L'ENREGISTREMENT DE LA TRANSATION
// VOUS POUVEZ RECUPERER LES VARIABLE SUIVANTE :
// ID DE LA TRANSACTION : vReponse.Id
// PAYMENT_INTENT : vReponse.payment_intent

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
Salut Frederic,

On recherche a rentrer en contact avec toi

--
Bertin CARRIERE
SRL RGPD.Zen-Project.be
support@zen-project.be
www.zen-project.be www.linkedin.com/in/bertincarriere

+32(0)498/10.18.58
Co-President de l'asbl Be-Dev Association des développeurs Windev de Belgique
www.be-dev.be
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