| Linux hosting5.siteguarding.com 3.10.0-962.3.2.lve1.5.88.el7.x86_64 #1 SMP Fri Sep 26 14:06:42 UTC 2025 x86_64 Path : /home/devsafetybis/verd.dev.safetybis.com/js/brippopaymentsfrontend/ |
| Current File : /home/devsafetybis/verd.dev.safetybis.com/js/brippopaymentsfrontend/express-checkout.js |
var BrippoExpressCheckout = Class.create();
BrippoExpressCheckout.prototype = {
pkey: null,
currentTotals: null,
paymentMethodCode: "brippopayments_express",
source: null,
checkoutButton: null,
checkoutLocation: null,
buttonType: "",
buttonTheme: "",
buttonHeight: "",
currentProductId: "",
stripe: null,
onButtonReadyHandler: null,
justAddedToCart: false,
onCanMakePaymentHandlers: [],
isCouponCodeFeatureEnabled: false,
placeOrderLock: false,
canMakePayment: null,
originalPointerEvents: null,
quoteHasValidAddressData: false,
oscBillingAddressSaved: false,
expressPaymentRequest: null,
initialize: function(source) {
let self = this;
this.source = source;
window.dispatchEvent(new Event('BrippoExpressCheckoutLoaded'));
},
removeOverlay: function() {
let brippoOverlay = document.querySelector(".brippo-overlay");
if (brippoOverlay !== null && brippoOverlay !== undefined) {
brippoOverlay.remove();
}
document.body.style.pointerEvents = this.originalPointerEvents;
},
showOverlay: function() {
this.removeOverlay();
// Create the overlay div
let overlay = document.createElement("div");
overlay.classList.add("brippo-overlay");
// Create the spinner div
let spinner = document.createElement("div");
spinner.classList.add("brippo-spinner");
// Create the text div
let text = document.createElement("div");
text.classList.add("brippo-spinner-text");
text.innerHTML = Translator.translate("Processing");
let container = document.createElement("div");
container.classList.add("brippo-spinner-container");
container.appendChild(spinner);
container.appendChild(text);
overlay.appendChild(container);
// Append the overlay div to the body element
document.body.appendChild(overlay);
try {
this.originalPointerEvents = document.body.style.pointerEvents;
} catch (e) {
this.originalPointerEvents = "";
}
document.body.style.pointerEvents = "none";
},
setPlaceOrderLock(locked) {
let self = this;
self.placeOrderLock = locked;
if (locked === true) {
window.dispatchEvent(new Event('brippoPlaceOrderLockEnabled'));
} else {
window.dispatchEvent(new Event('brippoPlaceOrderLockDisabled'));
}
console.log("placeOrderLock " + locked);
},
initPaymentRequest: function (config, source, onButtonReadyHandler, callback) {
const self = this;
console.log("initPaymentRequest called");
if (this.justAddedToCart) {
this.justAddedToCart = false;
return;
}
if (this.source === null || this.source === undefined) {
this.source = source;
}
this.buttonType = config.buttonType;
this.buttonTheme = config.buttonTheme;
this.buttonHeight = config.buttonHeight;
this.checkoutButton = config.checkoutButton;
this.checkoutLocation = config.checkoutLocation;
this.isCouponCodeFeatureEnabled = config.enabledCouponCode;
this.onButtonReadyHandler = onButtonReadyHandler;
if (!this.stripe) {
this.stripe = Stripe(config.pKey, {
apiVersion: "2020-08-27"
});
}
this.resetPaymentErrors(source);
self.getPaymentRequestOptions(source, function (serverResponse) {
try {
let response = serverResponse.responseText.evalJSON();
if (response.valid === 0) {
self.showPaymentError(response.message, source);
} else if (response.valid === 1) {
self.createPaymentRequest(
response.options,
source,
function (canMakePayment, paymentRequest) {
if (callback) {
callback(canMakePayment, paymentRequest);
}
}
);
}
} catch (e) {
console.log(e);
self.showPaymentError("Unexpected error, please try again.", source);
}
}.bind(this));
},
updatePaymentRequest: function(source, paymentRequest, callback) {
let self = this;
self.getPaymentRequestOptions(source, function (serverResponse) {
try {
let response = serverResponse.responseText.evalJSON();
if (response.valid === 0) {
self.showPaymentError(response.message, source);
} else if (response.valid === 1) {
if (BrippoExpressCheckout.prototype.isOSC()) {
if (response.quoteHasValidAddressData === true) {
BrippoExpressCheckout.prototype.setQuoteHasValidAddressData();
} else {
console.log("express-checkout billingAddress not saved, call save()");
BrippoExpressCheckout.prototype.saveBillingAddress();
}
}
let options = {
currency: response.options.currency,
total: response.options.total,
displayItems: response.options.displayItems,
shippingOptions: response.options.shippingOptions,
};
paymentRequest.update(options);
paymentRequest.canMakePayment().then(function (result) {
let canMakePaymentResult = result;
let canMakePayment = canMakePaymentResult != null;
self.canMakePayment = canMakePaymentResult;
console.log("payment request updated, can makepayment "+ canMakePayment);
callback(canMakePayment);
});
}
} catch (e) {
console.log("could not update payment request")
console.log(e);
}
}.bind(this));
},
getPaymentRequestOptions: function (sourceObj, callback) {
const self = this;
let url = '/brippo_payments_frontend/express_PaymentRequest/paymentRequest';
new Ajax.Request(
url, {
method: 'POST',
parameters: {
source: sourceObj.source,
currentProductId: sourceObj.currentProductId
},
onComplete: function (transport) {
callback(transport);
}
}
);
},
createPaymentRequest: function (options, definedSource, callback) {
const self = this;
let paymentRequest = this.stripe.paymentRequest(options);
let elements = this.stripe.elements();
let prButton = elements.create('paymentRequestButton', {
paymentRequest: paymentRequest,
style: {
paymentRequestButton: {
type: this.buttonType,
theme: this.buttonTheme,
height: this.buttonHeight+"px"
}
}
});
paymentRequest.canMakePayment().then(function (result) {
let canMakePaymentResult = result;
self.canMakePayment = canMakePaymentResult;
if (canMakePaymentResult) {
paymentRequest.on('paymentmethod', function (ev) {
self.onPaymentMethod(ev, definedSource);
});
paymentRequest.on('shippingoptionchange', function (ev) {
self.onShippingOptionChange(ev, definedSource);
});
paymentRequest.on('shippingaddresschange', function (ev) {
self.onShippingAddressChange(ev, definedSource);
});
paymentRequest.on('cancel', function (ev) {
console.log("window dismissed")
if (self.isOSC()) {
self.restoreOSC();
}
});
if (!self.isCustomButtonCheckout(definedSource)) {
prButton.on('click', function (ev) {
self.onPaymentButtonClick(ev, definedSource, paymentRequest, canMakePaymentResult);
});
prButton.on('loaderror', function (ev) {
self.onPaymentButtonLoadError(ev, definedSource, paymentRequest, canMakePaymentResult);
});
let el = $(definedSource.elementId);
prButton.mount(el);
prButton.on('ready', function () {
if (self.onButtonReadyHandler) {
self.onButtonReadyHandler(prButton);
}
});
self.enableButtons(definedSource);
}
for (let i = 0; i < self.onCanMakePaymentHandlers.length; i++) {
self.onCanMakePaymentHandlers[i]();
}
if (callback) {
callback(true, paymentRequest);
}
} else {
if (callback) {
callback(false, null);
}
}
});
},
onPaymentMethod: function (ev, definedSource) {
const self = this;
if (self.placeOrderLock === true) {
return;
}
self.setPlaceOrderLock(true);
if (self.isProductPage(definedSource)) {
self.showPdpProceessingPayment();
} else if(self.isMiniCart(definedSource)) {
self.showMinicartProceessingPayment()
}
self.placeOrder(ev, definedSource, function (placeOrderResponse) {
if (placeOrderResponse.valid === 0) {
self.setPlaceOrderLock(false);
ev.complete('fail');
self.showPaymentError(placeOrderResponse.message, definedSource);
if (self.isOSC()) {
self.restoreOSC();
}
} else if (placeOrderResponse.valid === 1) {
try {
self.stripe.confirmCardPayment(
placeOrderResponse['client_secret'],
{payment_method: ev.paymentMethod.id},
{handleActions: false}
).then(function (confirmResult) {
if (confirmResult.error) {
self.setPlaceOrderLock(false);
ev.complete('fail');
self.showPaymentError(confirmResult.error.message, definedSource);
self.log(confirmResult.error.message, {
definedSource: definedSource,
response: confirmResult.error
});
self.cancelOrder(
placeOrderResponse['order_id'],
definedSource
);
if (self.isOSC()) {
self.restoreOSC();
}
} else {
ev.complete('success');
if (confirmResult.paymentIntent.status === "requires_action") {
self.stripe.confirmCardPayment(placeOrderResponse['client_secret']).then(function (result) {
if (result.error) {
self.setPlaceOrderLock(false);
self.showPaymentError(confirmResult.error.message, definedSource);
} else {
self.completeOrder(placeOrderResponse, definedSource, result.paymentIntent.status);
}
});
} else {
self.completeOrder(placeOrderResponse, definedSource, confirmResult.paymentIntent.status);
}
}
});
} catch (error) {
self.setPlaceOrderLock(false);
ev.complete('fail');
self.log('Error confirming payment.', {
definedSource: definedSource,
response: error
});
if (self.isOSC()) {
self.restoreOSC();
}
}
}
});
},
onShippingOptionChange: function (ev, definedSource) {
console.log('onShippingOptionChange');
const self = this;
let url = '/brippo_payments_frontend/express_AddShippingMethod/addshippingmethod';
// Checkout.prototype.setLoadWaiting(true);
new Ajax.Request(
url, {
method: 'POST',
parameters: {
'shippingOption': JSON.stringify(ev.shippingOption)
},
onComplete: function (response) {
// Checkout.prototype.setLoadWaiting(false);
try {
let data = response.responseText.evalJSON();
if (data.valid === 1) {
ev.updateWith(data.updateDetails);
if (data.valid === 0) {
self.showPaymentError(data.message, definedSource);
}
} else {
self.showPaymentError(response.responseText, definedSource);
self.log('Error on shipping option change.', {
definedSource: definedSource,
response: response.responseText
});
}
} catch (e) {
console.log(e);
self.showPaymentError(response.responseText, definedSource);
self.log('Error on shipping option change.', {
definedSource: definedSource,
response: response.responseText
});
}
}
}
);
},
onShippingAddressChange: function (ev, definedSource) {
console.log('onShippingAddressChange');
const self = this;
let url = '/brippo_payments_frontend/express_AddShippingAddress/addshippingaddress';
// Checkout.prototype.setLoadWaiting(true);
new Ajax.Request(
url, {
method: 'POST',
parameters: {
'shippingAddress': JSON.stringify(ev.shippingAddress)
},
onComplete: function (response) {
// Checkout.prototype.setLoadWaiting(false);
try {
let data = response.responseText.evalJSON();
if (data.valid === 1) {
ev.updateWith(data.updateDetails);
if (data.valid === 0) {
self.showPaymentError(data.message, definedSource);
}
} else {
self.showPaymentError(response.responseText, definedSource);
self.log('Error on shipping address change.', {
definedSource: definedSource,
response: response.responseText
});
}
} catch (e) {
console.log(e);
self.showPaymentError(response.responseText, definedSource);
self.log('Error on shipping address change.', {
definedSource: definedSource,
response: response.responseText
});
}
}
}
);
},
onPaymentButtonClick: function (ev, definedSource, paymentRequest, canMakePaymentResult) {
let self = this;
if (self.placeOrderLock === true) {
return;
}
if (this.isProductPage(definedSource)) {
this.validateProductPageSelection(ev, definedSource, paymentRequest, canMakePaymentResult);
} else if (this.isMiniCart(definedSource) && this.isCouponCodeFeatureEnabled === 1) {
// todo implement
}
},
validateProductPageSelection: function (ev, definedSource, paymentRequest, canMakePaymentResult) {
const self = this;
const form = $('product_addtocart_form');
const couponCode = null;
// We don't want to preventDefault for applePay because we cannot use paymentRequest.show().
if (!canMakePaymentResult.applePay) {
ev.preventDefault();
}
if (!BrippoExpressProduct.prototype.validate()) {
return;
}
// Add to Cart
let request = [];
request = form.serialize(true);
self.addToCart(request, couponCode, definedSource, function (result) {
if (result.valid === 0) {
self.showPaymentError(result.message, definedSource);
} else {
try {
if (!canMakePaymentResult.applePay) {
paymentRequest.update(result.options);
paymentRequest.show();
}
} catch (e) {
self.showPaymentError(e.message, definedSource);
}
}
});
},
addToCart: function (request, couponCode, definedSource, callback) {
const self = this;
let url = '/brippo_payments_frontend/express_AddToCart/addtocart';
new Ajax.Request(
url, {
method: 'POST',
parameters: {
'request': JSON.stringify(request)
},
onComplete: function (response) {
try {
let data = response.responseText.evalJSON();
self.justAddedToCart = true;
if (callback) {
callback(data);
}
} catch (e) {
self.showPaymentError(response.error().responseText, definedSource);
self.log('Error adding to cart.', {
definedSource: definedSource,
response: response.error().responseText
});
}
}
}
);
},
onPaymentButtonLoadError: function (ev, definedSource, paymentRequest, canMakePaymentResult) {
const self = this;
self.log('Payment button load error.', {
definedSource: definedSource,
response: ev
});
},
placeOrder: function (paymentData, definedSource, callback) {
let self = this;
if (self.isProductPage(definedSource)) {
self.showPdpProceessingPayment();
}
let params = {
'payerName': paymentData.payerName,
'payerPhone': paymentData.payerPhone,
'payerEmail': paymentData.payerEmail,
'shippingAddress': JSON.stringify(paymentData.shippingAddress),
'billingDetails': JSON.stringify(paymentData.paymentMethod.billing_details),
'source': definedSource.source,
'card': JSON.stringify(paymentData.paymentMethod.card),
'provider': self.getWalletName()
};
let serializedFormData = null;
if (self.isCheckoutSource(definedSource) && self.isOSC()) {
let form = document.getElementById('onestepcheckout-form');
let formData = new FormData(form);
serializedFormData = new URLSearchParams(formData).toString();
// Serialize and concatenate params to serializedFormData
let paramsString = Object.keys(params)
.map(key => encodeURIComponent(key) + '=' + encodeURIComponent(params[key]))
.join('&');
if (serializedFormData) {
serializedFormData += '&' + paramsString;
} else {
serializedFormData = paramsString;
}
}
let url = '/brippo_payments_frontend/express_PlaceOrder/placeOrder';
new Ajax.Request(
url, {
method: 'POST',
parameters: self.isOSC() ? serializedFormData : params,
onComplete: function (response) {
try {
let data = response.responseText.evalJSON();
if (callback) {
callback(data);
}
} catch (e) {
console.log(e);
if (callback) {
callback({
"valid": 0,
"message": response.error().responseText
});
}
}
}
}
);
},
completeOrder: function (data, definedSource, status) {
const self = this;
self.showOverlay();
let url = '/brippo_payments_frontend/express_Complete/complete';
new Ajax.Request(
url, {
method: 'POST',
parameters: {
'orderId': data['order_id'],
'paymentIntentId': data['payment_intent_id'],
'status': status
},
onComplete: function (response) {
try {
let data = response.responseText.evalJSON();
if (data.valid === 1) {
document.location.href = data.url;
} else {
self.removeOverlay();
self.setPlaceOrderLock(false);
self.showPaymentError(data.message, definedSource);
self.log('Error completing order.', {
definedSource: definedSource,
response: response.responseText
});
}
} catch (e) {
self.removeOverlay();
self.setPlaceOrderLock(false);
console.log(e);
self.showPaymentError(response.error().responseText, definedSource);
self.log('Error completing order.', {
definedSource: definedSource,
response: response.error().responseText
});
}
}
}
);
},
cancelOrder: function (orderId, definedSource) {
const self = this;
let url = '/brippo_payments_frontend/express_Cancel/cancel';
new Ajax.Request(
url, {
method: 'GET',
parameters: {
'orderId': orderId
},
onComplete: function (response) {
try {
let result = response.responseText.evalJSON();
if (result.valid === 0) {
self.log('Error canceling order.', {
definedSource: definedSource,
response: response
});
}
} catch (e) {
console.log(e);
self.log('Error canceling order.', {
definedSource: definedSource,
response: response
});
}
}
}
);
},
showPaymentError: function (message, source) {
let self = this;
let span = null;
if (source !== null && source !== undefined) {
span = document.getElementById(source.elementId + '-payment-errors');
}
let finalMessage = message;
if (typeof finalMessage === 'object') {
finalMessage = finalMessage.message;
}
if (this.isOSC()) {
BrippoExpressCheckout.prototype.restoreOSC();
BrippoExpressCheckout.prototype.removeOverlay();
alert(finalMessage);
} else {
if (span == null) {
let reviewArea = document.getElementById('review-buttons-container');
if (reviewArea != null) {
let html = '<span id="' + self.paymentMethodCode + '-payment-errors" class="message error" style="display: none;"></span>';
reviewArea.innerHTML = html + reviewArea.innerHTML;
span = document.getElementById(self.paymentMethodCode + '-payment-errors');
}
}
if (span == null) {
console.log(finalMessage);
return;
}
span.innerHTML = finalMessage;
span.style.display="block";
}
},
resetPaymentErrors: function (source) {
let span = null;
if (source !== null && source !== undefined) {
span = document.getElementById(source.elementId + '-payment-errors');
}
if (span !== null) {
span.innerHTML = "";
span.style.display = "none";
}
},
log: function (message, data) {
console.log(data);
const self = this;
let url = '/brippo_payments_frontend/Logger_Log/log';
new Ajax.Request(
url, {
method: 'GET',
parameters: {
'message': message,
'data': JSON.stringify(data)
},
onComplete: function (response) {
}
}
);
},
// wallet
getWalletName: function () {
if (this.isGooglePay()) {
return "Google Pay";
} else if (this.isApplePay()) {
return "Apple Pay";
} else if (this.isLink()) {
return "Link";
}
return "";
},
isGooglePay: function () {
return this.canMakePayment && this.canMakePayment.googlePay === true;
},
isApplePay: function () {
return this.canMakePayment && this.canMakePayment.applePay === true;
},
isLink: function () {
return this.canMakePayment && this.canMakePayment.link === true;
},
// detect current page, button types
isCustomButtonCheckout: function (definedSource) {
return this.isCheckoutSource(definedSource) &&
this.checkoutButton === 'default' &&
this.checkoutLocation !== 'on_top';
},
isCheckoutSource: function (definedSource) {
return definedSource.source === 'checkout';
},
isMiniCart: function (definedSource) {
return definedSource.source === 'minicart';
},
isProductPage: function (definedSource) {
return definedSource.source === 'product_page';
},
enableButtons: function (definedSource) {
$(definedSource.elementId).setStyle({display: 'block'});
$$('.scExpressSeparator').invoke('setStyle', {display:'table'});
},
showPdpProceessingPayment: function () {
$('pdp-brippo-processing').setStyle({display: 'block'});
},
showMinicartProceessingPayment: function () {
$('minicart-brippo-processing').setStyle({display: 'block'});
},
// One Step checkout METHODS
restoreOSC: function() {
let loading_osc = $$('.onestepcheckout-place-order-loading');
if (loading_osc.length) {
$('onestepcheckout-place-order').removeClassName('grey').addClassName('orange');
$('onestepcheckout-place-order').removeAttribute('disabled');
loading_osc.invoke('hide');
already_placing_order = false;
}
},
getOSCSubmitButton: function () {
return document.getElementById('onestepcheckout-place-order');
},
saveBillingAddress: function() {
return;
if (this.quoteHasValidAddressData) {
console.log("saveBillingAddress was already updated, abort.");
return;
}
// if (this.oscBillingAddressSaved) {
// console.log("billing address already saved");
// return;
// }
this.oscBillingAddressSaved = true;
let billingSelect = document.getElementById('billing-address-select');
if (billingSelect) {
billingSelect.dispatchEvent(new Event("change"));
}
},
isOSC: function() {
return this.getOSCForm() != null;
},
getOSCForm: function() {
return document.getElementById('onestepcheckout-form');
},
isOSCPaymentMethodSelected: function(paymentMethodCode) {
let radioInputs = this.getOSCForm().querySelectorAll("input[type='radio'][name='payment[method]']");
let isPaymentSelected = false;
for (let i = 0; i < radioInputs.length; i++) {
let radioInput = radioInputs[i];
if (radioInput.checked && radioInput.value === paymentMethodCode) {
isPaymentSelected = true;
break;
}
}
return isPaymentSelected;
},
getOneStepCheckoutId: function() {
let possibleIds = [
{form: "onestepcheckout-form", trigger: "onestepcheckout-place-order"},
{form: "onepagecheckout_orderform", trigger: ".button.btn-checkout"}
];
for (var i = 0; i < possibleIds.length; i++) {
var ele = document.getElementById(possibleIds[i].form);
if ((typeof ele) != "undefined" && ele != null) {
window._brippoonepageFormId = possibleIds[i].form;
var trigger = $(possibleIds[i].trigger);
if ((typeof trigger) == "undefined" || trigger == null) {
trigger = $$(possibleIds[i].trigger).first();
}
window._brippoonepageTriggerId = trigger;
}
}
},
setQuoteHasValidAddressData: function() {
this.quoteHasValidAddressData = true;
},
OSCplaceOrder: function() {
let self = this;
let form = BrippoExpressCheckout.prototype.getOSCForm();
if (form._submitori === undefined) {
form._submitori = document.createElement("form").submit;
}
form.submit = () => {
if (BrippoExpressCheckout.prototype.isOSCPaymentMethodSelected(BrippoExpress.prototype.paymentMethodCode)) {
window.dispatchEvent(new Event("BrippoExpressPlaceOrder"));
} else if (BrippoExpressCheckout.prototype.isOSCPaymentMethodSelected(BrippoPaymentElement.prototype.paymentMethodCode)) {
window.dispatchEvent(new Event("BrippoPaymentElementPlaceOrder"));
} else {
form._submitori();
}
};
},
};
window.addEventListener('load', function() {
new BrippoExpressCheckout();
setInterval(() => {
if (!BrippoExpressCheckout.prototype.isOSC()) {
return;
}
let oscForm = BrippoExpressCheckout.prototype.getOSCForm();
if (oscForm && oscForm._submitori === undefined) {
BrippoExpressCheckout.prototype.OSCplaceOrder();
}
}, 500);
});