Files
ms1inscription-v5/paypaladv_checkout.php
2026-05-13 09:43:32 -04:00

474 lines
17 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Create the Card Fields Component and define callbacks MSIN-3855 checkout
//<script>
if ($('#card-name-field-container').length > 0) {
console.log("paypal exist");
cardcheck=true;
const cardField = paypal.CardFields({
inputEvents: {
onChange: function(data) {
console.log("on change");
console.log(data.cards[0].type);
// the variable is defined
if (data.cards[0].type=="visa" || data.cards[0].type=="mastercard" || data.cards[0].type=="unknown") {
console.log("on change ok");
cardcheck=true;
}else{
console.log("on change bad");
cardcheck=false;
let translatedErrorMessage = translateErrorMessage('OnlyVisaandMastercard');
resultMessage(`${translatedErrorMessage}`);
}
}
,
onFocus: function(data){
// Do something when a field gets focus
},
onBlur: function(data){
// Do something when a field loses focus
}
},
createOrder: function (data) {
setProcessing(true);
console.log("createOrder 1");
console.log(data.paymentSource);
const cardNumber = data.number;
const cardType = detectCardType(cardNumber);
var postData = {request_type: 'create_order', payment_source: data.paymentSource};
return fetch("/paypal_advanced/paypal_checkout_init.php", {
method: "POST",
headers: {'Accept': 'application/json'},
body: encodeFormData(postData)
})
.then((res) => {
console.log("createOrder 2");
console.log(res);
return res.json();
})
.then((result) => {
resultMessage("<?php afficheTexte('preloader_wait', 1, 0, 1);?> ");
setProcessing(false);
console.log("createOrder 3");
console.log(result.msg);
console.log(result.detail);
console.log(result.status);
if (result.type == "OUT") {
window.location.href = "/<?php echo $strPage; ?>/somaire/<?php echo $tabEvenement['general']['eve_label_url']?>" ;
return false;
}
if (result.status == 1) {
console.log("createOrder 4");
return result.data.id;
} else {
console.log("createOrder 5");
let errorMessage = result.msg;
let translatedErrorMessage = translateErrorMessage(errorMessage);
resultMessage(`${translatedErrorMessage}`);
return false;
}
});
},
onApprove: function (data) {
setProcessing(true);
console.log("onApprove 1");
const {orderID} = data;
var postData = {request_type: 'capture_order', order_id: orderID};
return fetch('/paypal_advanced/paypal_checkout_init.php', {
method: "POST",
headers: {'Accept': 'application/json'},
body: encodeFormData(postData)
})
.then((res) => {
console.log("onApprove 2");
return res.json();
})
.then((result) => {
// Redirect to success page
if (result.status == 1) {
console.log("onApprove 3");
window.location.href = "/paiement_update.php?checkout_ref_id=" + result.ref_id;
} else {
console.log("onApprove 4");
let errorMessage = result.msg;
let translatedErrorMessage = translateErrorMessage(errorMessage);
resultMessage(`${translatedErrorMessage}`);
}
setProcessing(false);
});
},
onError: function (error) {
//console.error('Erreur lors du traitement du paiement', error);
},
});
// Render the PayPal Button for PayPal account payments MSIN-3856
paypal.Buttons({
style: {
shape: 'rect',
color: 'gold',
layout: 'vertical',
label: 'paypal',
height: 40, // Hauteur du bouton
size: 'responsive' // Option pour rendre le bouton responsive
},
// Custom onClick event handler
onClick: function (data, actions) {
// Perform your custom logic here
console.log('PayPal button clicked!');
let isValid = true;
var $termes = $('input.chk_termes[type=checkbox]:not(:checked)');
if (!$termes.length) {
isValid = true;
} else {
var str_alert = "<?php afficheTexte('terme_accepter') ?>";
setTimeout(function () {
alert(str_alert);
}, 1000);
return actions.reject();
}
// Example: Validate a form, show a message, or track the event
if (!isValid) {
// Prevent the payment flow if the form is not valid
console.log('Reject the payment and prevent the flow');
return actions.reject(); // Reject the payment and prevent the flow
} else {
console.log('Continue with the payment flow');
return actions.resolve(); // Continue with the payment flow
}
},
createOrderbad: function (data) {
console.log("create_order paypal !");
const payload = { request_type: 'create_order', payment_source: 'paypal' };
return fetch("/paypal_advanced/paypal_checkout_init.php", {
method: "POST",
// ⚠️ envoie du JSON (ou garde x-www-form-urlencoded mais alors change aussi côté PHP)
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json'
},
body: JSON.stringify(payload)
})
.then(async (res) => {
// On lit TOUJOURS le texte brut pour debugger
const raw = await res.text();
console.debug('create_order RAW →', raw.slice(0, 400));
console.debug('status:', res.status, 'content-type:', res.headers.get('content-type'));
console.debug('type:', res.type, 'content-type:', res.headers.get('content-type'));
console.debug(res.type);
if (res.type == "OUT") {
window.location.href = "/<?php echo $strPage; ?>/somaire/<?php echo $tabEvenement['general']['eve_label_url']?>" ;
return false;
}
// On tente le JSON, sinon on voit lerreur réelle
let json;
try { json = JSON.parse(raw); }
catch (e) {
throw new Error(
`create_order_error: réponse NON-JSON (HTTP ${res.status}) ` +
`(ct=${res.headers.get('content-type')||'?'}) → ${raw.slice(0, 200)}`
);
}
if (!res.ok) {
throw new Error(json.message || json.msg || 'Erreur serveur (create_order)');
}
if (json.status !== 1 || !json.data || !json.data.id) {
throw new Error(json.message || json.msg || 'Réponse JSON invalide: id manquant');
}
console.log("create_order paypal ok");
return json.data.id;
})
.catch((err) => {
// Tu vas voir ici la vraie cause (HTML, warning PHP, redirect, etc.)
console.error('create_order_error', err);
console.error('err.message');
resultMessage(err.message);
setProcessing(false);
// IMPORTANT: pour interrompre le flow PayPal, on REJETTE (ne pas "return false")
throw err;
});
}
,
createOrder: function (data) {
console.log("create_order paypal");
var postData = {request_type: 'create_order', payment_source: 'paypal'};
return fetch("/paypal_advanced/paypal_checkout_init.php", {
method: "POST",
headers: {'Accept': 'application/json'},
body: encodeFormData(postData)
})
.then((res) => {
return res.json();
})
.then((result) => {
if (result.type == "OUT") {
window.location.href = "/<?php echo $strPage; ?>/somaire/<?php echo $tabEvenement['general']['eve_label_url']?>" ;
return false;
}
resultMessage("<?php afficheTexte('preloader_wait', 1, 0, 1);?> ");
setProcessing(false);
if (result.status == 1) {
console.log("create_order paypal ok");
return result.data.id;
} else {
console.log("erreur create_order pay pal");
let errorMessage = result.msg;
let translatedErrorMessage = translateErrorMessage(errorMessage);
resultMessage(`${translatedErrorMessage}`);
return false;
}
});
}
,
onApprove: async function (data, actions) {
const orderID = data.orderID;
console.log("onApprove paypal");
try {
// 2) Capture
const details = await actions.order.capture();
// 3) Finalisation côté serveur (ton code existant)
const transactionID = details.purchase_units[0].payments.captures[0].id;
const postData = {
payeremail: details.payer.email_address,
payername: (details.payer.name?.surname || "") + (details.payer.name?.given_name || ""),
request_type: "fin_paypal",
payment_source: "paypal",
order_id: orderID,
transaction_id: transactionID,
order_status: details.status
};
const res = await fetch("/paypal_advanced/paypal_checkout_init.php", {
method: "POST",
headers: { "Accept": "application/json" },
body: encodeFormData(postData)
});
const result = await res.json();
resultMessage("<?php afficheTexte('preloader_wait', 1, 0, 1);?> ");
setProcessing(false);
if (result.status == 1) {
window.location.href = "/paiement_update.php?checkout_ref_id=" + result.ref_id;
} else {
let translatedErrorMessage = translateErrorMessage(result.msg);
resultMessage(`${translatedErrorMessage}`);
return false;
}
} catch (err) {
console.error("Erreur PayPal (invoice/capture):", err);
resultMessage("Erreur PayPal: Request Failed!");
setProcessing(false);
return false;
}
},
onError: function (err) {
console.error('An error occurred during the transaction', err);
}
}).render('#paypal-button-container');
// Render each field after checking for eligibility
if (cardField.isEligible()) {
const nameField = cardField.NameField({
placeholder: "<?php echo afficheTexte('checkout_nomsurlacarte', 0)?>" // Translate placeholder
});
nameField.render("#card-name-field-container");
const numberField = cardField.NumberField({
placeholder: "<?php echo afficheTexte('checkout_ccnumber', 0)?>" // Translate placeholder
});
numberField.render("#card-number-field-container");
const cvvField = cardField.CVVField({
placeholder: "<?php echo afficheTexte('checkout_cvv', 0)?>" // Translate placeholder
});
cvvField.render("#card-cvv-field-container");
const expiryField = cardField.ExpiryField({
placeholder: "<?php echo afficheTexte('checkout_cexpiryField', 0)?>" // Translate placeholder
});
expiryField.render("#card-expiry-field-container");
// Add click listener to submit button and call the submit function on the card-number-field-container component
// checkout
document
.getElementById("card-field-submit-button")
.addEventListener("click", () => {
// valide term et condition
let isValid = true;
var $termes = $('input.chk_termes[type=checkbox]:not(:checked)');
if (!$termes.length) {
isValid = true;
} else {
isValid = false;
var str_alert = "<?php afficheTexte('terme_accepter') ?>";
/*if ($termes.data('pop_up') == 'location_policy') {
str_alert = $("#chk_location_policy").data('msg') + "\n" + str_alert;
}*/
alert(str_alert);
}
if (!isValid) {
return; // Stop further execution if validation fails
}
//verifie si cheques
console.log("type paiement");
var element = document.getElementById('chk_pai_6');
if (element){
if (document.getElementById('chk_pai_6').checked) {
grecaptcha.ready(function () {
grecaptcha.execute('<?php echo RECAPTCHA_SITE_KEY; ?>', {action: 'achat'}).then(function (token) {
document.getElementById('g-recaptcha-response').value = token;
console.log("checkboxValue == 6 payadv");
$("#frm_panier").submit();
$('body').css('cursor', 'wait');
});
});
}
}
console.log("test cart");
if (cardcheck) {
console.log("ok cart");
}else{return;}
cardField.submit().then(() => {
// si tout est ok
console.log("cardField.submit");
}) .catch((error) => {
console.log("erreur avant start");
let str = error.message;
console.log(str.length );
if(str.length >200){
let result = str.substring(str.indexOf('.') + 1);
let resultObject = JSON.parse(result);
let description = resultObject.details[0].description;
console.log(description);
let errorMessage = description;
let translatedErrorMessage = translateErrorMessage(errorMessage);
resultMessage(`${translatedErrorMessage}`);
}else{
let translatedErrorMessage = translateErrorMessage(str);
resultMessage(`${translatedErrorMessage}`);
}
console.log("erreur fin");
});
console.log("erreur 1");
});
console.log("erreur 2");
} else {
console.log("erreur 3");
// Hides card fields if the merchant isn't eligible
document.querySelector("#checkout-form").style = "display: none";
}
console.log("erreur 4");
const encodeFormData = (data) => {
var form_data = new FormData();
for (var key in data) {
form_data.append(key, data[key]);
}
return form_data;
}
console.log("erreur 5");
// Show a loader on payment form processing
const setProcessing = (isProcessing) => {
if (isProcessing) {
document.querySelector(".overlay").classList.remove("hidden");
} else {
document.querySelector(".overlay").classList.add("hidden");
}
}
// Display status message
const resultMessage = (msg_txt) => {
console.log(msg_txt);
const messageContainer = document.querySelector("#paymentResponse");
messageContainer.classList.remove("hidden");
messageContainer.textContent = msg_txt;
setTimeout(function () {
messageContainer.classList.add("hidden");
messageContainer.textContent = "";
}, 5000);
console.log('fin message');
}
}
// fin paypal adv