387 lines
13 KiB
PHP
387 lines
13 KiB
PHP
|
|
// MSIN-3855 dons Create the Card Fields Component and define callbacks
|
|
//<script>
|
|
|
|
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);
|
|
const form = document.getElementById('frm_dons');
|
|
const formData = new FormData(form);
|
|
// Ajouter des variables supplémentaires
|
|
const request_type = 'ExtraValue1';
|
|
const payment_source = 'ExtraValue2';
|
|
|
|
formData.append('request_type', 'create_order');
|
|
formData.append('payment_source', data.paymentSource);
|
|
console.log("create_order don");
|
|
|
|
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: formData
|
|
})
|
|
.then((res) => {
|
|
|
|
console.log("STEPHAN1");
|
|
|
|
return res.json();
|
|
})
|
|
.then((result) => {
|
|
console.log("STEPHAN");
|
|
|
|
resultMessage("<?php afficheTexte('preloader_wait',1,0,1);?> ");
|
|
setProcessing(false);
|
|
if(result.status == 1){
|
|
return result.data.id;
|
|
}else{
|
|
console.log("create_order");
|
|
|
|
let errorMessage = result.msg;
|
|
let translatedErrorMessage = translateErrorMessage(errorMessage);
|
|
resultMessage(`${translatedErrorMessage}`);
|
|
|
|
return false;
|
|
}
|
|
});
|
|
},
|
|
onApprove: function(data) {
|
|
setProcessing(true);
|
|
|
|
console.log("onApprove");
|
|
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) => {
|
|
|
|
return res.json();
|
|
})
|
|
.then((result) => {
|
|
|
|
onApprove: function(data) {
|
|
setProcessing(true);
|
|
|
|
console.log("onApprove");
|
|
const { orderID } = data;
|
|
|
|
// 1) PATCH invoice_id AVANT la capture
|
|
return fetch('/paypal_advanced/paypal_checkout_init.php', {
|
|
method: "POST",
|
|
headers: { "Accept": "application/json" },
|
|
body: encodeFormData({ request_type: "set_invoice_id", order_id: orderID })
|
|
})
|
|
.then(res => res.json().catch(() => ({})))
|
|
.then(iv => {
|
|
if (!iv || iv.ok !== 1) {
|
|
resultMessage("Erreur PayPal: setInvoiceId");
|
|
setProcessing(false);
|
|
throw new Error("setInvoiceId failed");
|
|
}
|
|
// 2) Ensuite, CAPTURE (code existant inchangé)
|
|
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) => res.json())
|
|
.then((result) => {
|
|
// ... le reste de ton code tel quel
|
|
|
|
|
|
|
|
|
|
// Redirect to success page
|
|
if(result.status == 1){
|
|
|
|
window.location.href = "/paiement_update.php?checkout_ref_id="+result.ref_id;
|
|
}else{
|
|
console.log("capture_order");
|
|
|
|
|
|
let errorMessage = result.msg;
|
|
let translatedErrorMessage = translateErrorMessage(errorMessage);
|
|
resultMessage(`${translatedErrorMessage}`);
|
|
|
|
|
|
resultMessage(result.msg);
|
|
}
|
|
setProcessing(false);
|
|
});
|
|
},
|
|
onError: function (error) {
|
|
// Do something with the error from the SDK
|
|
},
|
|
});
|
|
|
|
// 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
|
|
}, createOrder: function(data) {
|
|
const form = document.getElementById('frm_dons');
|
|
const formData = new FormData(form);
|
|
// Ajouter des variables supplémentaires
|
|
const request_type = 'ExtraValue1';
|
|
const payment_source = 'ExtraValue2';
|
|
|
|
formData.append('request_type', 'create_order');
|
|
formData.append('payment_source', data.paymentSource);
|
|
|
|
|
|
var postData = {request_type: 'create_order', payment_source: 'paypal' };
|
|
return fetch("/paypal_advanced/paypal_checkout_init.php", {
|
|
method: "POST",
|
|
headers: {'Accept': 'application/json'},
|
|
body: formData
|
|
})
|
|
.then((res) => {
|
|
console.log(res);
|
|
|
|
return res.json();
|
|
})
|
|
.then((result) => {
|
|
resultMessage("<?php afficheTexte('preloader_wait',1,0,1);?> ");
|
|
setProcessing(false);
|
|
if(result.status == 1){
|
|
|
|
return result.data.id;
|
|
|
|
}else{
|
|
console.log("create_order");
|
|
|
|
let errorMessage = result.msg;
|
|
let translatedErrorMessage = translateErrorMessage(errorMessage);
|
|
resultMessage(`${translatedErrorMessage}`);
|
|
|
|
return false;
|
|
}
|
|
});
|
|
}
|
|
,
|
|
onApprove: function(data,actions) {
|
|
|
|
const orderID = data.orderID;
|
|
console.log("onApprove paypal");
|
|
return actions.order.capture().then(function(details) {
|
|
// Retrieve the transaction ID
|
|
const transactionID = details.purchase_units[0].payments.captures[0].id;
|
|
|
|
|
|
// finalise la transaction
|
|
|
|
var 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 };
|
|
return fetch("/paypal_advanced/paypal_checkout_init.php", {
|
|
method: "POST",
|
|
headers: {'Accept': 'application/json'},
|
|
body: encodeFormData(postData)
|
|
})
|
|
.then((res) => {
|
|
|
|
|
|
return res.json();
|
|
})
|
|
.then((result) => {
|
|
resultMessage("<?php afficheTexte('preloader_wait',1,0,1);?> ");
|
|
setProcessing(false);
|
|
if(result.status == 1){
|
|
console.log("result.ref_id");
|
|
console.log(result.ref_id);
|
|
window.location.href = "/paiement_update.php?checkout_ref_id="+result.ref_id;
|
|
// return result.data.id;
|
|
|
|
}else{
|
|
console.log("create_order");
|
|
|
|
let errorMessage = result.msg;
|
|
let translatedErrorMessage = translateErrorMessage(errorMessage);
|
|
resultMessage(`${translatedErrorMessage}`);
|
|
|
|
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
|
|
// dons
|
|
document
|
|
.getElementById("card-field-submit-button")
|
|
.addEventListener("click", () => {
|
|
let isValid = true;
|
|
if ($form.valid()) {
|
|
// Form is valid, proceed with the submission or other logic
|
|
isValid = true;
|
|
// You can also programmatically submit the form if needed
|
|
// $form.submit();
|
|
} else {
|
|
// Form is not valid, show errors or handle accordingly
|
|
isValid = false;
|
|
}
|
|
|
|
//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_dons").submit();
|
|
$('body').css('cursor', 'wait');
|
|
});
|
|
});
|
|
}
|
|
}
|
|
if (!isValid) {
|
|
|
|
return; // Stop further execution if validation fails
|
|
}else{
|
|
|
|
|
|
cardField.submit().then(() => {
|
|
|
|
})
|
|
.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}`);
|
|
}
|
|
|
|
});
|
|
}
|
|
|
|
});
|
|
} else {
|
|
// Hides card fields if the merchant isn't eligible
|
|
document.querySelector("#checkout-form").style = "display: none";
|
|
}
|
|
|
|
const encodeFormData = (data) => {
|
|
var form_data = new FormData();
|
|
|
|
for ( var key in data ) {
|
|
form_data.append(key, data[key]);
|
|
}
|
|
return form_data;
|
|
}
|
|
|
|
// 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) => {
|
|
const messageContainer = document.querySelector("#paymentResponse");
|
|
|
|
messageContainer.classList.remove("hidden");
|
|
messageContainer.textContent = msg_txt;
|
|
|
|
setTimeout(function () {
|
|
messageContainer.classList.add("hidden");
|
|
messageContainer.textContent = "";
|
|
}, 5000);
|
|
}
|
|
// fin paypal adv
|