PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WEBDEV 2024 → Système de paiement en ligne MOLLIE
Système de paiement en ligne MOLLIE
Iniciado por FREDERIC, 19,may. 2020 14:01 - 22 respuestas
Miembro registrado
54 mensajes
Popularité : +3 (3 votes)
Publicado el 19,mayo 2020 - 14:01
Bonjour à tous , depuis quelques temps j'utilise l'API STRIPE pour les paiements en ligne de mes clients mais ils durcissent leur conditions d'utilisation et ils "éjectent" certains utilisateurs sans préavis sous prétexte qu'ils représentent un trop fort risque de litige avec les leurs clients .... La démocratie à la sauce "Big-Brother".

Bref, j'ai trouvé une alternative avec le système de paiement en ligne MOLLIE, même principe mais je patauge un peu en code Jason, pouvez-vous m'aider ?

Voici le code d'intégration STRIPE qui faudrait probablement adapter à l'API de MOLLIE :

VAR_STRIPE_CLE_SECRET est une chaîne
VAR_STRIPE_CLE_PUBLIQUE est une chaîne
VAR_STRIPE_CHEMINOK est une chaîne
VAR_STRIPE_CHEMINPASOK est une chaîne

SI EnModeTest() = Faux ALORS
// VAR_STRIPE_CHEMINOK = fRepWeb()+[fSep]+"FR"+[fSep]+"TRANSACTION-OK.awp?session_id={CHECKOUT_SESSION_ID}"
// VAR_STRIPE_CHEMINPASOK = fRepWeb()+[fSep]+"FR"+[fSep]+"TRANSACTION-PASOK.awp?session_id={CHECKOUT_SESSION_ID}"
// VAR_STRIPE_CLE_SECRET = "XXXXXXXX" // Clé secrète production
// VAR_STRIPE_CLE_PUBLIQUE = "XXXXXXXX" // Clé publique production
SINON
VAR_STRIPE_CHEMINOK = "http://localhost/"+RépertoireWeb()+"/FR/TRANSACTION-OK.awp?session_id={CHECKOUT_SESSION_ID}"
VAR_STRIPE_CHEMINPASOK = "http://localhost/"+RépertoireWeb()+"/FR/TRANSACTION-PASOK.awp?session_id={CHECKOUT_SESSION_ID}"
VAR_STRIPE_CLE_SECRET = "XXXXXXXX" // Clé secrète test
VAR_STRIPE_CLE_PUBLIQUE = "XXXXXXXX" // Clé publique test
FIN

VARLOCAL_STRUCTURESESSION est une structure
VARLOCAL_success_url est une chaîne // Lien de la page de succès
VARLOCAL_cancel_url est une chaîne // Lien de la page de annulation
VARLOCAL_payment_method_types est une chaîne // type de méthodes de paiement
VARLOCAL_line_items_name est chaîne // nom
VARLOCAL_client_reference_id est une chaîne // référence du client
VARLOCAL_customer_email est une chaîne // e-mail du client
VARLOCAL_line_items_amount est entier // montant de la cotisation
VARLOCAL_line_items_currency est une chaîne // devise
VARLOCAL_line_items_quantity est entier // quantité
VARLOCAL_line_items_description est une chaîne // description
VARLOCAL_locale est une chaîne // langage (fr)
VARLOCAL_mode est une chaîne // mode de paiement (payment, setup, ou subscription)
VARLOCAL_submit_type est une chaîne // type de paiement (auto, book, donate, ou pay)
FIN

VARLOCAL_CONTENUSESSION est VARLOCAL_STRUCTURESESSION

nMontantEntier, nMontantEntier100 sont des entiers
xMontantMonétaire est un numérique
xMontantMonétaire = "10,00" // Exemple de montant
nMontantEntier = xMontantMonétaire
nMontantEntier100 = nMontantEntier*100

VARLOCAL_CONTENUSESSION.VARLOCAL_success_url = VAR_STRIPE_CHEMINOK
VARLOCAL_CONTENUSESSION.VARLOCAL_cancel_url = VAR_STRIPE_CHEMINPASOK
VARLOCAL_CONTENUSESSION.VARLOCAL_payment_method_types = "card"
VARLOCAL_CONTENUSESSION.VARLOCAL_line_items_name = "NOM"
VARLOCAL_CONTENUSESSION.VARLOCAL_line_items_amount = nMontantEntier100
VARLOCAL_CONTENUSESSION.VARLOCAL_line_items_currency = "eur"
VARLOCAL_CONTENUSESSION.VARLOCAL_line_items_quantity = "1"
VARLOCAL_CONTENUSESSION.VARLOCAL_customer_email = "client@mail.com"
VARLOCAL_CONTENUSESSION.VARLOCAL_client_reference_id = "REF CLIENT"
VARLOCAL_CONTENUSESSION.VARLOCAL_line_items_description = "DESCRIPTION"
VARLOCAL_CONTENUSESSION.VARLOCAL_locale = "fr"
VARLOCAL_CONTENUSESSION.VARLOCAL_mode = "payment"
VARLOCAL_CONTENUSESSION.VARLOCAL_submit_type = "pay"

VARLOCAL_CONTENUREQUETE est une chaîne
VARLOCAL_CONTENUREQUETE += ["&"] + ChaîneConstruit([
success_url=%1
],VARLOCAL_CONTENUSESSION.VARLOCAL_success_url)

VARLOCAL_CONTENUREQUETE += ["&"] + ChaîneConstruit([
cancel_url=%1
],VARLOCAL_CONTENUSESSION.VARLOCAL_cancel_url)

VARLOCAL_CONTENUREQUETE += ["&"] + ChaîneConstruit([
payment_method_types[]=%1
],VARLOCAL_CONTENUSESSION.VARLOCAL_payment_method_types)

VARLOCAL_CONTENUREQUETE += ["&"] + ChaîneConstruit([
line_items[][name]=%1
],VARLOCAL_CONTENUSESSION.VARLOCAL_line_items_name)

VARLOCAL_CONTENUREQUETE += ["&"] + ChaîneConstruit([
line_items[][amount]=%1
],VARLOCAL_CONTENUSESSION.VARLOCAL_line_items_amount)

VARLOCAL_CONTENUREQUETE += ["&"] + ChaîneConstruit([
line_items[][currency]=%1
],VARLOCAL_CONTENUSESSION.VARLOCAL_line_items_currency)

VARLOCAL_CONTENUREQUETE += ["&"] + ChaîneConstruit([
line_items[][quantity]=%1
],VARLOCAL_CONTENUSESSION.VARLOCAL_line_items_quantity)

VARLOCAL_CONTENUREQUETE += ["&"] + ChaîneConstruit([
line_items[][Description]=%1
],VARLOCAL_CONTENUSESSION.VARLOCAL_line_items_description)

VARLOCAL_CONTENUREQUETE += ["&"] + ChaîneConstruit([
customer_email=%1
],VARLOCAL_CONTENUSESSION.VARLOCAL_customer_email)

VARLOCAL_CONTENUREQUETE += ["&"] + ChaîneConstruit([
client_reference_id=%1
],VARLOCAL_CONTENUSESSION.VARLOCAL_client_reference_id)

VARLOCAL_CONTENUREQUETE += ["&"] + ChaîneConstruit([
locale=%1
],VARLOCAL_CONTENUSESSION.VARLOCAL_locale)

VARLOCAL_CONTENUREQUETE += ["&"] + ChaîneConstruit([
mode=%1
],VARLOCAL_CONTENUSESSION.VARLOCAL_mode)

VARLOCAL_CONTENUREQUETE += ["&"] + ChaîneConstruit([
submit_type=%1
],VARLOCAL_CONTENUSESSION.VARLOCAL_submit_type)

REST_Stripe est un restRequête
REST_Reponse est un restRéponse
vReponse est Variant

REST_Stripe..URL = "https://api.stripe.com/v1/checkout/sessions"
REST_Stripe..Méthode = httpPost
REST_Stripe..Utilisateur = VAR_STRIPE_CLE_SECRET + ":"
REST_Stripe..Contenu = VARLOCAL_CONTENUREQUETE
REST_Reponse = RESTEnvoie(REST_Stripe)

SI ErreurDétectée ALORS
Erreur("Accès au serveur impossible. Opération annulée")
RETOUR
FIN

SI REST_Reponse.CodeEtat<>200 ALORS
Erreur("Erreur dans l’exécution de la requête" + RC+ REST_Reponse.EntêteBrut+RC+REST_Reponse.Contenu)
RETOUR
FIN

vReponse=JSONVersVariant(REST_Reponse..Contenu)

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>
]

sCodeHtml = ChaîneConstruit(sCodeHtml,VAR_STRIPE_CLE_PUBLIQUE,vReponse.Id)

CHAMP_HTML_CACHE = sCodeHtml // Envoi du code au champ HTML caché
Miembro registrado
54 mensajes
Popularité : +3 (3 votes)
Publicado el 19,mayo 2020 - 16:40
J'ai commencé l'entête :

VAR_MOLLIE_PROFILEID est une chaîne = "pfl_XXXXXXX"
VAR_MOLLIE_CELAPITEST est une chaîne = "test_XXXXXXXXXXX"
VAR_MOLLIE_CELAPILIVE est une chaîne = "live_XXXXXXXXXXX"
VAR_MOLLIE_CHEMINOK est une chaîne
VAR_MOLLIE_CHEMINPASOK est une chaîne

SI EnModeTest() = Faux ALORS
// VAR_MOLLIE_CHEMINOK = fRepWeb()+[fSep]+"FR"+[fSep]+"TRANSACTION-OK.awp?session_id={CHECKOUT_SESSION_ID}"
// VAR_MOLLIE_CHEMINPASOK = fRepWeb()+[fSep]+"FR"+[fSep]+"TRANSACTION-PASOK.awp?session_id={CHECKOUT_SESSION_ID}"
SINON
VAR_MOLLIE_CHEMINOK = "http://localhost/"+RépertoireWeb()+"/FR/TRANSACTION-OK.awp?session_id={CHECKOUT_SESSION_ID}"
VAR_MOLLIE_CHEMINPASOK = "http://localhost/"+RépertoireWeb()+"/FR/TRANSACTION-PASOK.awp?session_id={CHECKOUT_SESSION_ID}"
FIN

VARLOCAL_STRUCTURESESSION est une structure
//VARLOCAL_amount est un entier // Le montant a facturer
VARLOCAL_currency est une chaîne // Devise : EUR
VARLOCAL_value est une chaîne // Une chaîne contenant le montant exact que vous souhaitez facturer dans la devise donnée
VARLOCAL_description est une chaîne // La description du paiement
VARLOCAL_redirectUrl est une chaîne // L'URL vers laquelle votre client sera redirigé après le processus de paiement.
VARLOCAL_webhookUrl est une chaîne // URL du webhook, à laquelle seront envoyés les mises à jour de l'état du paiement
VARLOCAL_locale est une chaîne // Langage : fr_FR
VARLOCAL_method est une chaîne // Méthode de paiement : directdebit
VARLOCAL_metadata est une chaîne // Divers renseignements caché
VARLOCAL_sequenceType est une chaîne // Type de paiement : oneoff
VARLOCAL_customerId est une chaîne // ID du client
VARLOCAL_billingEmail est une chaîne // E-Mail du client
VARLOCAL_dueDate est une Date // Date de la transaction
VARLOCAL_profileId est une chaîne // ID du profile MOLLIE : pfl_BvcdTTAMMk
VARLOCAL_testmode est un booléen // En test OUI/NON : true
FIN

VARLOCAL_CONTENUSESSION est VARLOCAL_STRUCTURESESSION

VARLOCAL_CONTENUSESSION.VARLOCAL_currency="EUR"
VARLOCAL_CONTENUSESSION.VARLOCAL_value="10"
VARLOCAL_CONTENUSESSION.VARLOCAL_description="TEST"
VARLOCAL_CONTENUSESSION.VARLOCAL_redirectUrl=VAR_MOLLIE_CHEMINOK
VARLOCAL_CONTENUSESSION.VARLOCAL_webhookUrl=VAR_MOLLIE_CHEMINOK
VARLOCAL_CONTENUSESSION.VARLOCAL_locale="fr_FR"
VARLOCAL_CONTENUSESSION.VARLOCAL_method="directdebit"
VARLOCAL_CONTENUSESSION.VARLOCAL_metadata=""
VARLOCAL_CONTENUSESSION.VARLOCAL_sequenceType="oneoff"
VARLOCAL_CONTENUSESSION.VARLOCAL_customerId="123456"
VARLOCAL_CONTENUSESSION.VARLOCAL_billingEmail=""
VARLOCAL_CONTENUSESSION.VARLOCAL_dueDate=DateDuJour()
VARLOCAL_CONTENUSESSION.VARLOCAL_profileId=VAR_MOLLIE_PROFILEID
VARLOCAL_CONTENUSESSION.VARLOCAL_testmode="true"


Je bloque à la construction de la requête :

VARLOCAL_CONTENUREQUETE est une chaîne = [
"amount": {"currency":"EUR","value":"0.01"}
]

REST_MOLLIE est un restRequête
REST_Reponse est un restRéponse
vReponse est Variant

REST_MOLLIE..URL = "https://api.mollie.com/v2/payments"
REST_MOLLIE..Méthode = httpPost
//REST_MOLLIE..Utilisateur = VAR_MOLLIE_CELAPITEST + ":"
REST_MOLLIE..Utilisateur = VAR_MOLLIE_CELAPITEST + ":"
REST_MOLLIE..Contenu = VARLOCAL_CONTENUREQUETE
REST_Reponse = RESTEnvoie(REST_MOLLIE)


J'obtiens toujours le message d'erreur que l'entête est pas bonne et qu'il manque la fonction"amount"

En fait, je n'arrive pas construire l'entête à partit du code PHP ou JASON proposé par MOLLIE :

$mollie = new \Mollie\Api\MollieApiClient();
$mollie->setApiKey("test_XXXXXXXXXXX");
$payment = $mollie->payments->create([
      "amount" => [
            "currency" => "EUR",
            "value" => "10.00" // You must send the correct number of decimals, thus we enforce the use of strings
      ],
      "description" => "Order #12345",
      "redirectUrl" => "https://webshop.example.org/order/12345/",
      "webhookUrl" => "https://webshop.example.org/payments/webhook/",
      "metadata" => [
            "order_id" => "12345",
      ],
]);


mollie_client = Client()
mollie_client.set_api_key('test_XXXXXXXXXXX')
payment = mollie_client.payments.create({
   'amount': {
         'currency': 'EUR',
         'value': '10.00'
   },
   'description': 'Order #12345',
   'webhookUrl': 'https://webshop.example.org/order/12345/',
   'redirectUrl': 'https://webshop.example.org/payments/webhook/',
   'metadata': {
         'order_id': '12345'
   }
})
Miembro registrado
54 mensajes
Popularité : +3 (3 votes)
Publicado el 19,mayo 2020 - 17:03
Pour l'appel HttpPost , avec l'API de STRIPE :

success_url=URL
cancel_url=URL
payment_method_types[]=card&line_items[][name]=NOM
line_items[][amount]=1000
line_items[][currency]=eur
line_items[][quantity]=1
line_items[][description]=DESCRIPTION
customer_email=MAIL
client_reference_id=REF CLIENT
locale=fr
mode=payment
submit_type=pay


Je n'arrive pas à construire ma requête avec l'API de MOLLIE :

amount[currency]=EUR
amount[value]=1000
description=DESCRIPTION
redirectUrl=URL
webhookUrl=URL
metadata[order_id]=ID


J'obtiens toujours le message d'erreur : {"status":422,"title":"Unprocessable Entity","detail":"The amount is required for payments","field":"amount","_links":{"documentation":{"href":"https://docs.mollie.com/guides/handling-errors","type":"text/html"}}}
Miembro registrado
54 mensajes
Popularité : +3 (3 votes)
Publicado el 26,mayo 2020 - 16:11
Bonjour à tous, j'ai réussi l'intégration complète de l'API de MOLLIE sur un projet WB en mode session ou AWP.

Si vous êtes intéressé , je donne les sources gratuitement.
Publicado el 27,mayo 2020 - 11:51
Bonjour Frederic,

Ta proposition est vraiment super sympa et je très intéressé de pouvoir enfin mettre un système de paiement en ligne dans mes sites webdev.

Mon adresse mail ncrepin59 @ gmail.com

Un grand merci à toi et à ta générosité !

Cordialement

Nicolas
Publicado el 02,junio 2020 - 15:55
Bonjour Frédéric,

Je suis également preneur, je galère avec stripe....
Merci pour ta proposition de partage ! top
Arnaud
Miembro registrado
54 mensajes
Popularité : +3 (3 votes)
Publicado el 03,junio 2020 - 09:33
Bonjour à tous, j'ai été un peu pris par le boulot , je m'occupe de poster sur le dépôt de PC-SOFT dès que possible, je viens tiens au courant.
Miembro registrado
44 mensajes
Popularité : +3 (5 votes)
Publicado el 03,junio 2020 - 17:24
Magnifique,

Merci Frederic

Bonne journée.
Miembro registrado
54 mensajes
Popularité : +3 (3 votes)
Publicado el 10,junio 2020 - 16:36
Avec un peu retard, le code est dispo sur le dépôt de PC-SOFT : https://depot.pcsoft.fr/resource.awp…

Bon dév !
Miembro registrado
44 mensajes
Popularité : +3 (5 votes)
Publicado el 11,junio 2020 - 08:15
Metci Frederic, bonne journee.
Publicado el 12,junio 2020 - 10:09
Salut,
tu n'utilise pas le bon caractère, il faut utiliser : >>'<< , toi tu utilise >>"<< dans ton code

VARLOCAL_CONTENUREQUETE est une chaîne = [
'amount': {'currency':'EUR','value':'0.01'}
]

pour les numérique vérifie que c'est bien un point et pas une vigule pour les décimal
Miembro registrado
44 mensajes
Popularité : +3 (5 votes)
Publicado el 12,junio 2020 - 11:47
Bonjour,

J'ai besoin d'un peu d'aide, si quelqu'un peux m'aiguiller !

J'essaie de mettre en place le paiement Mollie mais j'obtiens toujours la même erreur d'url invalide sur redirectUrl alors que la page awp est bien à l'endroit ou pointe l'url !!!









Merci.
Miembro registrado
54 mensajes
Popularité : +3 (3 votes)
Publicado el 12,junio 2020 - 12:00
Salut Nikos, essaye de renseigner ton url de retour sur le lien réel : https:/www.xxxxxxxxx/xxxxxx_WEB/FR/RETOUR.awp…=
Miembro registrado
44 mensajes
Popularité : +3 (5 votes)
Publicado el 12,junio 2020 - 12:11
Ah, génial ! ça c'est OK.

Je n'y avais pas (encore) pensé !

Bon j'ai la même chose, évidemment pour WEBHOOCK, je continue !

Merci Frederic
Miembro registrado
44 mensajes
Popularité : +3 (5 votes)
Publicado el 12,junio 2020 - 12:22
Intégration réussie ! :merci:

Reste quelques petits détails mais c'est OK.

Merci à toi Frederic et à tous les participants.
Miembro registrado
54 mensajes
Popularité : +3 (3 votes)
Publicado el 12,junio 2020 - 14:22
Tant mieux !

Le code est loin d'être parfait mais il a l'avantage d'être fonctionnel.
Miembro registrado
44 mensajes
Popularité : +3 (5 votes)
Publicado el 15,junio 2020 - 11:29
Bonjour,

J'ai intégré les pages awp du système de paiement Mollie dans mon projet qui lui, est en mode session.
Ne voulant pas passer par la page PAGE_PAIEMENT, je lance l'API directement par un bouton de ma page Facturation que est en mode session
Jusque là, tout va bien, le paiement s'effectue, la base de données se met à jour et je reviens sur la page PAGE_RETOUR, qui elle, est en mode awp.

Et là , impossible de quitter cette page et de revenir sur ma page Facturation en cliquant sur le bouton de retour, ni par programmation avec la fonction SiteDynamiqueAffiche() ni par l'action prédéfinie du bouton "Afficher une page du site".
J'ai l'impression qu'aucun code, aucune action ne s’exécute !

Je dois louper quelque chose, mais je ne sais plus ou chercher !
Si quelqu'un a une idée, une piste, je suis preneur !

Merci.
Miembro registrado
44 mensajes
Popularité : +3 (5 votes)
Publicado el 15,junio 2020 - 16:11
OK, je me réponds à moi même

Dans la fonction SiteDynamiqueAffiche, le premier paramètre est le nom du site et non pas l'url du site !

Et comme ça, tout est OK :)
Publicado el 04,septiembre 2021 - 17:49
je veux savoir comment integré un systeme de payement en ligne sur un logiciel webdev
Miembro registrado
35 mensajes
Publicado el 27,septiembre 2021 - 19:38
Bonjour à tous. Je vous contacte au sujet du paiement Mollie.

J'ai mis cela en place sur mon site. En mode TEST, tout fonctionne parfaitement bien.

Par contre en mode normal (je remplace donc la clé TEST par LIVE), le site tourne en boucle (il ne me demande pas Bancontact, Visa, etc comme le mode test) mais par contre quand je me rend chez Mollie, je vois que la transaction a eu lieu (en attente). Auriez-vous une idée ?

Merci d'avance

Bien à vous,
Miembro registrado
35 mensajes
Publicado el 28,septiembre 2021 - 14:38
Bonjour à tous. Quelqu'un a-t-il réussi à intégrer Mollie sur son site avec la clé LIVE ? Merci pour vos retours !
Publicado el 12,mayo 2022 - 13:25
Merci.

Est ce que quelqu'un aurait le code webdev pour créer un abonnement Stripe au lieu d'un paiement simple ?
Je ne trouve nulle part.

Merci
Miembro registrado
374 mensajes
Popularité : +7 (7 votes)
Publicado el 17,septiembre 2022 - 18:48
Bonjour,
Je m'invite dans cette discussion car ayant un problème semblable je l'ai suivit avec intérêt
J'ai téléchargé Paiement en ligne pour MOLLIE 1.2 de Frédéric que je remercie beau au passage
J'ai entré ma clef pour l'API et j'ai lancé l’exécution
Que ce soit en test sur mon poste de développement, ou en "réel" puis que je l'ai installé sur mon hébergeur, tout a l'air de bien fonctionner puisque je n'ai pas d'erreur au retour du POST, le fichier est bien mis à jour, mais je ne passe sur aucun écran de vérification !!!!
Je veux dire la page où l'on demande le numéro de carte etc ...
Peut être me suis-je lourdement trompé !
Ou faut il avoir un profil terminé et approuvé sur MOLLIE pour y être redirigé ?
Cordialement
SC

Voici le code
VAR_ADRESSEWEB est une chaîne = "http://www.monsite.fr/INTEGRATION_MOLLIE_WEB/"

SI EnModeTest() = Faux ALORS
Info("En réel")
VAR_MOLLIE_URL_RETOUR = VAR_ADRESSEWEB+"/"+RépertoireWeb()+"/FR/RETOUR.awp?session_id=}"
VAR_MOLLIE_URL_WEBHOOK = VAR_ADRESSEWEB+"/"+RépertoireWeb()+"/FR/WEBHOOCK.awp"
SINON
Info("en mode test")
// VAR_MOLLIE_URL_RETOUR = "http://localhost/"+RépertoireWeb()+"/FR/TRANSACTION-OK.awp?session_id="
// //VAR_MOLLIE_URL_WEBHOOK = "https://localhost/"+RépertoireWeb()+"/FR/PAGE_WEBHOOCK.awp" // Interdit en mode http/localhost
// VAR_MOLLIE_URL_WEBHOOK = "https://www.argiko-azia.fr/ARGIKO-AZIA_WEB/FR/TRANSACTION-OK.awp"

// TRANSACTION-OK.awp n'est pas trouvée !!! On essaye avec PAGE_RETOUR
VAR_MOLLIE_URL_RETOUR = "http://localhost/"+RépertoireWeb()+"/FR/RETOUR.awp?session_id="
//VAR_MOLLIE_URL_WEBHOOK = "https://localhost/"+RépertoireWeb()+"/FR/PAGE_WEBHOOCK.awp" // Interdit en mode http/localhost
VAR_MOLLIE_URL_WEBHOOK = "https://www.argiko-azia.fr/ARGIKO-AZIA_WEB/FR/WEBHOOCK.awp"
FIN

// La page WebHoock ne peut être testée en mode http/localhost, utilisez NGROK pour simuler un https sur le localhost
// https://ngrok.com

//// Génération d'un ID de transaction unique
VAR_MOLLIE_ID_TRANSACTION="ID_"+GénèreMotDePasse(25, "abcdefghijklmnopqrstuvwzABCDEFGHIJKLMNOPQRSYUVWZ1234567890")
BOUCLE
SI HLitRecherche(transaction,ID,VAR_MOLLIE_ID_TRANSACTION,hIdentique+hBlocageNon)=Vrai ALORS
VAR_MOLLIE_ID_TRANSACTION="ID_"+GénèreMotDePasse(25, "abcdefghijklmnopqrstuvwzABCDEFGHIJKLMNOPQRSYUVWZ1234567890")
SINON
SORTIR
FIN
FIN

//// Alimentation de la requête de demande de paiement
VARLOCAL_CONTENUREQUETE est une chaîne
VARLOCAL_CONTENUREQUETE += ["&"] + "amount[currency]="+SAI_currency+"" // Devise (obligatoire)
VARLOCAL_CONTENUREQUETE += ["&"] + "amount[value]="+NumériqueVersChaîne(SAI_value, "1.2f")+"" // Montant de la transaction (obligatoire)
VARLOCAL_CONTENUREQUETE += ["&"] + "description="+ChaîneVersUTF8(SAI_description)+"" // Description de la transaction (obligatoire)
VARLOCAL_CONTENUREQUETE += ["&"] + "redirectUrl="+VAR_MOLLIE_URL_RETOUR+VAR_MOLLIE_ID_TRANSACTION+"" // URL de retour + ID de la transaction unique (obligatoire)
VARLOCAL_CONTENUREQUETE += ["&"] + "webhookUrl="+VAR_MOLLIE_URL_WEBHOOK+"" // URL du WebHook (obligatoire mais non utilisé)
VARLOCAL_CONTENUREQUETE += ["&"] + "locale=fr_FR" // Langue utilisée dans les pages de paiement (optionnel)
VARLOCAL_CONTENUREQUETE += ["&"] + "method=creditcard" // Force la méthode de paiement : ici par carte bancaire, si plusieurs mode de paiement , ne pas intégrer (optionnel)
VARLOCAL_CONTENUREQUETE += ["&"] + "metadata[Detail]="+ChaîneVersUTF8("XXXXXXXXXXXXXXXX")+"" // Détail qui apparait sur le relevé de paiement MOLLIE , invisible pour le client
VARLOCAL_CONTENUREQUETE += ["&"] + "sequenceType=oneoff" // Type de paiement fixe ou récurent (optionnel)
VARLOCAL_CONTENUREQUETE += ["&"] + "billingAddress[streetAndNumber]="+SAI_billingAddress_streetAndNumber+"" // Adresse postale du client (optionnel)
VARLOCAL_CONTENUREQUETE += ["&"] + "billingAddress[postalCode]="+SAI_billingAddress_postalCode+"" // Code-Postal du client (optionnel)
VARLOCAL_CONTENUREQUETE += ["&"] + "billingAddress[city]="+SAI_billingAddress_city+"" // Ville du client (optionnel)
VARLOCAL_CONTENUREQUETE += ["&"] + "billingAddress[region]="+SAI_billingAddress_region+"" // Région du client (optionnel)
VARLOCAL_CONTENUREQUETE += ["&"] + "billingAddress[country]="+SAI_billingAddress_country+"" // Pays du client (optionnel)
VARLOCAL_CONTENUREQUETE += ["&"] + "shippingAddress[streetAndNumber]="+SAI_shippingAddress_streetAndNumber+"" // Adresse postale du client (optionnel)
VARLOCAL_CONTENUREQUETE += ["&"] + "shippingAddress[postalCode]="+SAI_shippingAddress_postalCode+"" // Code-Postal du client (optionnel)
VARLOCAL_CONTENUREQUETE += ["&"] + "shippingAddress[city]="+SAI_shippingAddress_city+"" // Ville du client (optionnel)
VARLOCAL_CONTENUREQUETE += ["&"] + "shippingAddress[region]="+SAI_shippingAddress_region+"" // Région du client (optionnel)
VARLOCAL_CONTENUREQUETE += ["&"] + "shippingAddress[country]="+SAI_shippingAddress_country+"" // Pays du client (optionnel)

REST_REQUETE est un restRequête
REST_Reponse est un restRéponse

REST_REQUETE..URL = "https://api.mollie.com/v2/payments"
REST_REQUETE..Méthode = httpPost
REST_REQUETE..Utilisateur = VAR_MOLLIE_CLE_TEST
REST_REQUETE..Contenu = VARLOCAL_CONTENUREQUETE
//////REST_REQUETE..Utilisateur = VAR_MOLLIE_PROFILE_ID
REST_Reponse = RESTEnvoie(REST_REQUETE)
SI ErreurDétectée ALORS
Erreur("Accès au serveur impossible. Opération annulée")
RETOUR
FIN
SI REST_Reponse.CodeEtat<>201 ALORS
Erreur("Erreur dans l’exécution de la requête" + RC+ REST_Reponse.EntêteBrut+RC+REST_Reponse.Contenu)
RETOUR
FIN

//info( REST_Reponse.EntêteBrut+RC+REST_Reponse.Contenu)

vReponse est Variant = JSONVersVariant(REST_Reponse..Contenu)

// Ajoute la transaction dans la base TRANSACTION
SI HLitRecherche(transaction,ID,vReponse.id,hIdentique+hBlocageNon)=Vrai ALORS HSupprime(transaction,hNumEnrEnCours)
transaction.date_heure=DateHeureSys()
transaction.ID=vReponse.id
transaction.MONTANT=SAI_value
transaction.REF=VAR_MOLLIE_ID_TRANSACTION
HAjoute(transaction,hEcritureDéfaut+hBlocageNon)
HFerme(transaction)

VAR_MOLLIE_URL_CHECKOUT = ""
CREATION_PAIEMENT(vReponse)
CHAMP_HTML_CACHE="<meta http-equiv=""refresh"" content=""1;"+VAR_MOLLIE_URL_CHECKOUT+""">"


--
Cordialement
SC