/******/ (() => { // webpackBootstrap
var __webpack_exports__ = {};
/**
* 2013 - 2023 Payplug SAS
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 3.0).
* It is available through the world-wide-web at this URL:
* https://opensource.org/licenses/osl-3.0.php
* If you are unable to obtain it through the world-wide-web, please send an email
* to contact@payplug.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PayPlug module to newer
* versions in the future.
*
* @author PayPlug SAS
* @copyright 2013 - 2023 Payplug SAS
* @license https://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PayPlug SAS
*/
var allow_debug = true, debug = function (str) {
if (allow_debug) {
console.log(str);
}
};
var $document, $window, payplugModule = {
init: function () {
this.card.init();
this.order.init();
this.oney.init();
this.popup.init();
this.integrated.init();
},
order: {
init: function () {
// Styling
var $options = $('input[data-module-name="payplug"]');
$options.parents('.payment-option').addClass('payplugPaymentOption')
$options.each(function () {
var $form = $('#pay-with-' + this.id + '-form').find('form');
if ($form.find('input[name=method]').val() == "oney") {
if ($form.find('input[name=payplugOney_type]').val().includes("without_fees")) {
$('#' + this.id + '-container').addClass('without_fees');
} else if ($form.find('input[name=payplugOney_type]').val().includes("with_fees")) {
$('#' + this.id + '-container').addClass('with_fees');
}
}
})
this.checkErrors();
$document.on('click', '.payplugMsg_button', payplugModule.popup.close);
$document.on('click', '.payplugMsg_declineButton', payplugModule.popup.close);
},
checkErrors: function () {
if (typeof check_errors == 'undefined' || !check_errors) {
return;
}
var data = {_ajax: 1, getPaymentErrors: 1};
$.ajax({
url: window['payplug_ajax_url'] + '?rand=' + new Date().getTime(),
headers: {"cache-control": "no-cache"},
type: 'POST',
async: true,
cache: false,
dataType: 'json',
data: data,
success: function (data) {
if (data.result) {
payplugModule.popup.set(data.template);
// Select Oney Option
var $required = $('.' + payplugModule.oney.required.props.identifier);
if ($required.length) {
$oneyType = data.errors[0].replace('oney_required_field_', '');
var paymentOption = $('input[value=' + $oneyType + ']')
.parent('form')
.find('button[type=submit]')
.attr('id')
.replace('pay-with-', '');
$('#' + paymentOption).trigger('click');
}
}
}
});
},
},
integrated: {
props: {
identifier: 'payplugIntegratedPayment',
cartId: null,
paymentId: null,
paymentOptionId: null,
form: {},
checkoutForm: null,
api: null,
integratedPayment: null,
token: null,
notValid: false,
fieldsInvalid: {
cardHolder: true,
pan: true,
cvv: true,
exp: true,
},
fieldsEmpty: {
cardHolder: true,
pan: true,
cvv: true,
exp: true,
},
save_card: false,
scheme: null,
query: null,
submit: null,
},
init: function () {
var integrated = payplugModule.integrated,
$integratedForm = $('.' + integrated.props.identifier);
if ($integratedForm.length) {
var $methodInput = document.querySelectorAll('input[name=method][value=integrated]').item(0).parentNode,
payment_option = ($methodInput.childNodes)[3];
integrated.props.paymentOptionId = payment_option.id.replace('pay-with-', '');
integrated.form.init();
} else {
return false;
}
},
form: {
init: function () {
var integrated = payplugModule.integrated,
payment_option_id = integrated.props.paymentOptionId;
if (typeof $document == 'undefined') {
return false;
}
$document.on('click', '#' + payment_option_id, integrated.form.set);
},
clear: function (clear) {
// confirm creation integrated paiement or show fail popup
var integrated = payplugModule.integrated;
integrated.props.submited = false;
if (clear) {
form.cardHolder.clear();
form.pan.clear();
form.cvv.clear();
form.exp.clear();
$('.' + integrated.props.identifier + '_container.-saveCard')
.removeClass('-checked')
.find('input')
.prop('checked', false);
}
// unchecked tos
$('input[name="conditions_to_approve[terms-and-conditions]"]').prop('checked', false);
},
confirm: function (token) {
payplugModule.tools.loadSpinner();
// confirm creation integrated paiement or show fail popup
var integrated = payplugModule.integrated;
if (integrated.props.query != null) {
integrated.props.query.abort();
integrated.props.query = null;
}
integrated.props.query = $.ajax({
type: 'POST',
url: window['payplug_ajax_url'],
dataType: 'json',
data: {
_ajax: 1,
confirmPayment: 1,
cart_id: integrated.props.cart_id,
pay_id: token,
},
error: function (jqXHR, textStatus, errorThrown) {
console.log(jqXHR, textStatus, errorThrown);
integrated.form.clear();
},
success: function (data) {
payplugModule.tools.removeSpinner();
if (data.result) {
window.location.href = data.return_url;
} else {
$('.' + integrated.props.identifier + '_error.-payment')
.text(integratedPaymentError)
.addClass('-show');
integrated.form.clear(true);
return false;
}
},
});
},
field: {
init: function () {
var integrated = payplugModule.integrated,
field = integrated.form.field,
form = integrated.props.form;
form.cardHolder.onChange(function (event) {
if (!event.valid) {
field.error('cardHolder');
integrated.props.fieldsEmpty['cardHolder'] = 'FIELD_EMPTY' == event.error.name;
integrated.props.fieldsInvalid['cardHolder'] = 'INVALID_CARDHOLDER' == event.error.name;
} else {
field.valid('cardHolder');
integrated.props.fieldsEmpty['cardHolder'] = false;
integrated.props.fieldsInvalid['cardHolder'] = false;
}
});
form.pan.onChange(function (event) {
if (!event.valid) {
field.error('pan');
integrated.props.fieldsEmpty['pan'] = 'FIELD_EMPTY' == event.error.name;
integrated.props.fieldsInvalid['pan'] = 'INVALID_CARD_NUMBER' == event.error.name;
} else {
field.valid('pan');
integrated.props.fieldsEmpty['pan'] = false;
integrated.props.fieldsInvalid['pan'] = false;
}
});
form.cvv.onChange(function (event) {
if (!event.valid) {
field.error('cvv');
integrated.props.fieldsEmpty['cvv'] = 'FIELD_EMPTY' == event.error.name;
integrated.props.fieldsInvalid['cvv'] = 'INVALID_CVV' == event.error.name;
} else {
field.valid('cvv');
integrated.props.fieldsEmpty['cvv'] = false;
integrated.props.fieldsInvalid['cvv'] = false;
}
});
form.exp.onChange(function (event) {
if (!event.valid) {
field.error('exp');
integrated.props.fieldsEmpty['exp'] = 'FIELD_EMPTY' == event.error.name;
integrated.props.fieldsInvalid['exp'] = 'INVALID_EXPIRATION_DATE' == event.error.name;
} else {
field.valid('exp');
integrated.props.fieldsEmpty['exp'] = false;
integrated.props.fieldsInvalid['exp'] = false;
}
});
form.cardHolder.onFocus(function (event) {
field.focus('cardHolder');
});
form.pan.onFocus(function () {
field.focus('pan');
});
form.cvv.onFocus(function () {
field.focus('cvv');
});
form.exp.onFocus(function () {
field.focus('exp');
});
form.cardHolder.onBlur(function (event) {
field.blur('cardHolder');
});
form.pan.onBlur(function () {
field.blur('pan');
});
form.cvv.onBlur(function () {
field.blur('cvv');
});
form.exp.onBlur(function () {
field.blur('exp');
});
},
error: function (type) {
if (!type || typeof type == undefined) {
return false;
}
var integrated = payplugModule.integrated;
$('.' + integrated.props.identifier + '_error.-' + type + ' span.invalidField').removeClass('-hide');
$('.' + integrated.props.identifier + '_container.-' + type).addClass('-invalid');
},
blur: function (type) {
if (!type || typeof type == undefined) {
return false;
}
var integrated = payplugModule.integrated;
$('.' + integrated.props.identifier + '_container.-' + type).removeClass('-focus');
if ($('.' + integrated.props.identifier + '_container.-' + type).is('.integrated_payment_error')) {
integrated.form.field.error(type);
}
},
focus: function (type) {
if (!type || typeof type == undefined) {
return false;
}
var integrated = payplugModule.integrated;
$('.' + integrated.props.identifier + '_container.-' + type).addClass('-focus').removeClass('-invalid');
$('.' + integrated.props.identifier + '_error.-' + type + ' span.emptyField').addClass('-hide');
$('.' + integrated.props.identifier + '_error.-' + type + ' span.invalidField').addClass('-hide');
$('.' + integrated.props.identifier + '_error.-fields').removeClass('-show');
$('.' + integrated.props.identifier + '_error.-api').removeClass('-show');
},
valid: function (type) {
if (!type || typeof type == undefined) {
return false;
}
var integrated = payplugModule.integrated;
$('.' + integrated.props.identifier + '_error.-' + type + ' span.invalidField').addClass('-hide');
$('.' + integrated.props.identifier + '_container.-' + type + ' span.invalidField').removeClass('-invalid');
},
},
getPaymentId: function (event) {
//create integrated payment id
var integrated = payplugModule.integrated;
if (typeof event != 'undefined') {
event.preventDefault();
event.stopPropagation();
}
if (integrated.props.submited) {
return;
}
integrated.props.submited = true;
integratedPayment = integrated.props.integratedPayment;
token = integratedPayment.token;
if (integrated.props.query != null) {
integrated.props.query.abort();
integrated.props.query = null;
}
$('.' + integrated.props.identifier + '_error.-payment').removeClass('-show');
$('.' + integrated.props.identifier + '_error.-api').removeClass('-show');
integrated.props.query = $.ajax({
type: 'POST',
url: window['payplug_ajax_url'],
dataType: 'json',
data: {
_ajax: 1,
createIP: 1,
token: token,
},
error: function (jqXHR, textStatus, errorThrown) {
integrated.form.clear();
console.log(jqXHR, textStatus, errorThrown);
},
success: function (result) {
if (result && result.payment_id) {
integrated.props.paymentId = result.payment_id;
integrated.props.cart_id = result.cart_id;
integrated.form.submit();
} else {
payplugModule.popup.set(integratedPaymentError);
integrated.form.clear();
return false;
}
},
});
},
reset: function () {
// confirm creation integrated paiement or show fail popup
var integrated = payplugModule.integrated,
$form = $('.' + integrated.props.identifier),
$cardHolder = $form.find('#cardholder'),
$pan = $form.find('#pan'),
$cvv = $form.find('#cvv'),
$exp = $form.find('#exp');
integrated.form.clear();
$cardHolder.remove();
$pan.remove();
$cvv.remove();
$exp.remove();
$form.removeClass('-loaded');
// unchecked tos
$('input[name="conditions_to_approve[terms-and-conditions]"]').prop('checked', false);
try {
integrated.form.set();
} catch (e) {
// @todo find a solution if an error block IP form display
if (typeof e.name != 'undefined' && typeof e.message != 'undefined') {
addLogger(e.name + " : " + e.message);
} else {
addLogger("UNKNOWN_ERROR: unable to generate IP form");
}
}
},
set: function () {
var integrated = payplugModule.integrated;
integrated.props.api = Payplug;
var api = integrated.props.api,
$form = $('.' + integrated.props.identifier),
$scheme = $form.find('.-scheme'),
$cardHolder = $form.find('.' + integrated.props.identifier + '_container.-cardHolder'),
$pan = $form.find('.' + integrated.props.identifier + '_container.-pan'),
$cvv = $form.find('.' + integrated.props.identifier + '_container.-cvv'),
$exp = $form.find('.' + integrated.props.identifier + '_container.-exp'),
$saveCard = $form.find('.-saveCard'),
payment_option_id = integrated.props.paymentOptionId;
// check if form already exists
if ($form.is('.-loaded')) {
return;
}
try {
var integratedPayment = new Payplug.IntegratedPayment(is_sandbox_mode);
} catch (e) {
if (typeof e.name != 'undefined' && typeof e.message != 'undefined') {
addLogger(e.name + " : " + e.message);
}
}
integrated.props.integratedPayment = integratedPayment;
integratedPayment.setDisplayMode3ds(api.DisplayMode3ds.LIGHTBOX);
var input_style = {
default: {
color: '#2B343D',
fontFamily: 'Poppins, sans-serif',
fontSize: '14px',
textAlign: 'left',
'::placeholder': {
color: '#969a9f',
},
':focus': {
color: '#2B343D',
},
},
invalid: {
color: '#E91932'
},
};
form = {
integratedPayment: integratedPayment,
cardHolder: integratedPayment.cardHolder(
$cardHolder.get(0),
{
placeholder: placeholderCardholder,
default: input_style.default,
invalid: input_style.invalid
}
),
pan: integratedPayment.cardNumber(
$pan.get(0),
{
placeholder: placeholderPan,
default: input_style.default,
invalid: input_style.invalid
}
),
cvv: integratedPayment.cvv(
$cvv.get(0),
{
placeholder: placeholderCvv,
default: input_style.default,
invalid: input_style.invalid
}
),
exp: integratedPayment.expiration(
$exp.get(0),
{
placeholder: placeholderExp,
default: input_style.default,
invalid: input_style.invalid
}
),
};
$form.addClass('-loaded');
$cardHolder.on('click', function (event) {
event.preventDefault();
event.stopPropagation();
form.cardHolder.focus();
});
$scheme.find('input').on('click', function (event) {
integrated.props.scheme = $(this).val();
});
$pan.on('click', function (event) {
event.preventDefault();
event.stopPropagation();
form.pan.focus();
});
$exp.on('click', function (event) {
event.preventDefault();
event.stopPropagation();
form.exp.focus();
});
$cvv.on('click', function (event) {
event.preventDefault();
event.stopPropagation();
form.cvv.focus();
});
$saveCard.find('input').on('change', function () {
if ($(this).prop('checked')) {
integrated.props.save_card = true;
$saveCard.addClass('-checked');
} else {
integrated.props.save_card = false;
$saveCard.removeClass('-checked');
}
});
integrated.props.form = form;
// defined all event on form field
integrated.form.field.init();
// Once an attempt has been made
integratedPayment.onCompleted(function (event) {
if (typeof event.error != 'undefined' && event.error != null) {
integrated.form.clear(true);
if (!event.error.hasOwnProperty('name')) {
event.error.name = 'API_ERROR';
}
if (!event.error.hasOwnProperty('message')) {
event.error.message = 'A generic error occured';
}
addLogger(event.error.name + " : " + event.error.message);
$('.' + integrated.props.identifier + '_error.-api').addClass('-show');
integrated.form.reset();
} else {
integrated.form.confirm(event.token);
}
});
// Listen to the validateForm Event
integratedPayment.onValidateForm(function ({isFormValid}) {
if (isFormValid) {
integrated.form.getPaymentId();
} else {
integrated.props.submited = false;
integrated.form.showError();
}
});
$document.on('submit', 'form', integrated.form.validate);
},
showError: function () {
// valide integrated payment form
var integrated = payplugModule.integrated;
$('input[name="conditions_to_approve[terms-and-conditions]"]').prop('checked', false);
// Check if field is empty
for (var key in integrated.props.fieldsEmpty) {
if (integrated.props.fieldsEmpty[key]) {
$('.' + integrated.props.identifier + '_error.-' + key + ' span.invalidField').addClass('-hide');
$('.' + integrated.props.identifier + '_error.-' + key + ' span.emptyField').removeClass('-hide');
$('.' + integrated.props.identifier + '_container.-' + key).addClass('-invalid');
$('input[name="conditions_to_approve[terms-and-conditions]"]').prop('checked', false);
}
}
// Check if field is invalid
for (var key in integrated.props.fieldsInvalid) {
if (integrated.props.fieldsInvalid[key]) {
$('.' + integrated.props.identifier + '_error.-fields').addClass('-show');
}
}
},
submit: function () {
// create an integrated payment
var integrated = payplugModule.integrated,
paymentId = integrated.props.paymentId,
integratedPayment = integrated.props.integratedPayment,
integratedPaymentScheme = null;
switch (integrated.props.scheme) {
case 'cb':
integratedPaymentScheme = Payplug.Scheme.CARTE_BANCAIRE;
break;
case 'visa':
integratedPaymentScheme = Payplug.Scheme.VISA;
break;
case 'mastercard':
integratedPaymentScheme = Payplug.Scheme.MASTERCARD;
break;
default:
integratedPaymentScheme = Payplug.Scheme.AUTO;
break;
}
integratedPayment.pay(paymentId, integratedPaymentScheme, {save_card: integrated.props.save_card});
},
validate: function (event) {
var integrated = payplugModule.integrated,
payment_option_id = integrated.props.paymentOptionId,
isIntegrated = payment_option_id == $('input[name="payment-option"]:checked').attr('id');
if (typeof event != 'undefined' && isIntegrated) {
event.preventDefault();
event.stopPropagation();
}
if (isIntegrated) {
integratedPayment = integrated.props.integratedPayment;
integratedPayment.validateForm();
}
}
},
},
card: {
props: {
identifier: 'payplugCard',
query: null,
id_card: 0,
},
init: function () {
var card = payplugModule.card,
identifier = card.props.identifier;
$document.on('click', '.' + identifier + '_delete', payplugModule.card.delete)
.on('click', 'button[name="payplugConfirmDelete"]', payplugModule.card.confirm);
},
//display first pop to confirm card deletion
delete: function (event) {
event.preventDefault();
event.stopPropagation();
var $elem = $(this);
payplugModule.card.props.id_card = $elem.data('id_card');
payplugModule.popup.set(card_confirm_deleted_msg);
},
//display second popup to announce the card's deletion success
confirm: function (event) {
event.preventDefault();
event.stopPropagation();
var id_card = payplugModule.card.props.id_card,
url = window['payplug_delete_card_url'] + '&pc=' + id_card,
card = payplugModule.card,
identifier = card.props.identifier;
$.ajax({
type: 'POST',
url: url,
dataType: 'json',
data: {
delete: 1,
pc: id_card
},
error: function (jqXHR, textStatus, errorThrown) {
alert('error CALL DELETE CARD');
console.log(jqXHR, textStatus, errorThrown);
},
success: function (result) {
if (result) {
$('.' + identifier + '[data-id_card=' + id_card + ']').remove();
payplugModule.popup.setDeleteCardPopup(card_deleted_msg);
}
}
});
},
},
oney: {
props: {
query: null,
sizes: [
{format: 'mobile', limit: 735},
{format: 'desktop', limit: 9999},
]
},
clear: function () {
for (i = 0; i < payplugModule.oney.props.queries.length; i++) {
if (typeof payplugModule.oney.props.queries[i] != 'undefined') {
payplugModule.oney.props.queries[i].abort();
}
}
payplugModule.oney.props.queries = [];
},
init: function () {
if (typeof window['payplug_oney'] == 'undefined' || !window['payplug_oney']) {
return;
}
var oney = payplugModule.oney;
this.cta.init();
this.required.init();
oney.load();
var popin = oney.cta.popin;
prestashop.on('updatedCart', popin.check).on('updatedProduct', popin.check);
},
load: function (with_schedule) {
var oney = payplugModule.oney,
data = {
_ajax: 1,
};
if (with_schedule) {
data['getOneyPriceAndPaymentOptions'] = 1;
} else {
data['isOneyElligible'] = 1;
}
// check if context is product page
if ($('#product_page_product_id').length) {
var $product_form = $('#add-to-cart-or-refresh'),
form_data = $product_form.serializeArray();
form_data.map(function (field) {
data[field.name] = field.value;
})
}
// clear current query if exists
if (oney.props.query !== null) {
oney.props.query.abort();
}
oney.cta.popin.reset();
oney.props.query = $.ajax({
url: window['payplug_ajax_url'] + '?rand=' + new Date().getTime(),
headers: {"cache-control": "no-cache"},
type: 'POST',
async: true,
cache: false,
dataType: 'json',
data: data,
success: function (data) {
if (data.result) {
if (typeof data.popin != 'undefined' && data.popin && oney.cta.props.loaded) {
oney.cta.popin.hydrate(data.popin);
if (typeof data.error != 'undefined' && data.error) {
oney.cta.disable();
} else {
oney.cta.enable();
}
} else if (!with_schedule) {
oney.cta.enable();
}
} else if (oney.cta.props.loaded) {
if (typeof data.popin != 'undefined') {
oney.cta.popin.hydrate(data.popin);
} else if (typeof data.error != 'undefined') {
var popin_error = ' ' + data.error + '