Puisque je suis passé par là et que sur ce sujet, la doc est anémique, je te propose mon code qui fonctionne très bien.
Bouton payer:
SI EnModeTest(mtProjet) = Vrai ALORS
gsCancelReturn = PageAdresse("", paComplète)
gsReturn = PageAdresse("", paComplète)
SINON
gsCancelReturn = PageAdresse("", paSécurisée)
gsReturn = PageAdresse("", paSécurisée)
FIN
SI gxMontantAPayer > 0 ALORS
PageAffiche(PAGE_PaiementCompte, "MontantAPayer")
SINON
ToastAffiche("Vous devez sélectionner un forfait", toastLong, cvBas, chCentre, RGB(255,0,0))
FIN
Chargement de Page_PaiementCompte (Navigateur);
sMontantAPayer est une chaîne = NumériqueVersChaîne(MontantAPayer, "4.2fS") + " $"
LIBF_MontantAPayer = sMontantAPayer
Page_Paiement;

Déclaration globales de SC_Paiement;
gsIdentifiantPaypal est une chaîne = "Identifiant Paypal"
gnMontantPaiement est un réel = sMontantAPayer
gsDevise est une chaîne = "CAD"
gsLocale est une chaîne = "fr_CA"
Initialisation de SC_Paiement (Serveur);
SC_Paiement..HTMLAvant = ChaîneConstruit([
<script src="https://www.paypal.com/sdk/js?client-id=%2¤cy=%1&locale=%3"></script>
],gsDevise,gsIdentifiantPaypal,gsLocale)
Affectation de la Propriété Valeur de SC_Paiement (Serveur);
gnMontantPaiement = MoiMême
ExécuteTraitement(MoiMême,trtInit)
Récupération de la Propriété Valeur de SC_Paiement (Serveur);
RENVOYER gnMontantPaiement
Chargement de SC_Paiement (Navigateur);
procPaiementEffectue est une Procedure = PaiementReussi
InitPaypal(MoiMême..Alias,gnMontantPaiement,procPaiementEffectue)
PROCEDURE INTERNE Paiementreussi
AJAXExecute(ajaxAppelSimple, PaiementEffectue)
ExécuteTraitement(BTN_RETOUROK, trtClic)
FIN
Procédure locale PaiementEffectue (serveur);
Lorsque le paiement est réussi, la procédure PaiementEffectue est exécutée et c'est dans cette proc que l'on met à jours les BD.
Procédure locale JS InitPaypal (SC_Paiement);
function A2_InitPaypal(sAliasConteneur,nValeur,procApresValidation)
{
var domConteneur = document.getElementById(sAliasConteneur).querySelector("td");
// Vide de l'image d'attente
domConteneur.innerHTML = "";
// Cible le conteneur pour l'API PayPal
domConteneur.id = sAliasConteneur+"_PayPal";
paypal.Buttons({
style: {
},
// Init avec montant
createOrder: function(data, actions) {
return actions.order.create({
purchase_units: [{
amount: {
value: nValeur
}
}]
});
},
// Finalisation
onApprove: function(data, actions) {
return actions.order.capture().then(function(details) {
// Paiement réussi
// alert("Paiement réussi")
procApresValidation();
});
}
}).render('#' + domConteneur.id);
}
J'espère que tu y arriveras!
--
Jean Turcotte
WX 27
Android 9.0 sur Galaxy S8
Laptop Lenovo I7 12GB Ram