2023-10-23 16:50:43 +02:00
|
|
|
import {
|
|
|
|
getCurrentPaymentMethod,
|
|
|
|
ORDER_BUTTON_SELECTOR,
|
|
|
|
PaymentMethods
|
|
|
|
} from "../../../ppcp-button/resources/js/modules/Helper/CheckoutMethodState";
|
|
|
|
|
2023-11-24 15:14:09 +00:00
|
|
|
import {
|
|
|
|
setVisible,
|
|
|
|
setVisibleByClass
|
|
|
|
} from "../../../ppcp-button/resources/js/modules/Helper/Hiding";
|
2023-12-12 12:23:47 +01:00
|
|
|
import {
|
|
|
|
loadPaypalJsScriptPromise
|
|
|
|
} from "../../../ppcp-button/resources/js/modules/Helper/ScriptLoading";
|
2023-12-13 12:24:04 +01:00
|
|
|
import ErrorHandler from "../../../ppcp-button/resources/js/modules/ErrorHandler";
|
|
|
|
import {cardFieldStyles} from "../../../ppcp-button/resources/js/modules/Helper/CardFieldsHelper";
|
|
|
|
|
|
|
|
const errorHandler = new ErrorHandler(
|
|
|
|
PayPalCommerceGateway.labels.error.generic,
|
|
|
|
document.querySelector('.woocommerce-notices-wrapper')
|
|
|
|
);
|
2023-12-12 12:23:47 +01:00
|
|
|
|
|
|
|
const init = () => {
|
|
|
|
setVisibleByClass(ORDER_BUTTON_SELECTOR, getCurrentPaymentMethod() !== PaymentMethods.PAYPAL, 'ppcp-hidden');
|
|
|
|
setVisible(`#ppc-button-${PaymentMethods.PAYPAL}-save-payment-method`, getCurrentPaymentMethod() === PaymentMethods.PAYPAL);
|
|
|
|
|
2023-12-14 15:40:28 +01:00
|
|
|
const buttonWrapper = document.querySelector(`#ppc-button-${PaymentMethods.PAYPAL}-save-payment-method`);
|
|
|
|
while (buttonWrapper.firstChild) {
|
|
|
|
buttonWrapper.removeChild(buttonWrapper.firstChild);
|
|
|
|
}
|
|
|
|
|
2023-12-12 12:23:47 +01:00
|
|
|
if(getCurrentPaymentMethod() === PaymentMethods.PAYPAL) {
|
|
|
|
loadPaypalJsScriptPromise({
|
|
|
|
clientId: ppcp_add_payment_method.client_id,
|
|
|
|
merchantId: ppcp_add_payment_method.merchant_id,
|
|
|
|
dataUserIdToken: ppcp_add_payment_method.id_token
|
|
|
|
})
|
|
|
|
.then((paypal) => {
|
2023-12-13 12:24:04 +01:00
|
|
|
errorHandler.clear();
|
|
|
|
|
2023-12-12 12:23:47 +01:00
|
|
|
paypal.Buttons(
|
|
|
|
{
|
|
|
|
createVaultSetupToken: async () => {
|
|
|
|
const response = await fetch(ppcp_add_payment_method.ajax.create_setup_token.endpoint, {
|
|
|
|
method: "POST",
|
|
|
|
credentials: 'same-origin',
|
|
|
|
headers: {
|
|
|
|
'Content-Type': 'application/json',
|
|
|
|
},
|
|
|
|
body: JSON.stringify({
|
|
|
|
nonce: ppcp_add_payment_method.ajax.create_setup_token.nonce,
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
const result = await response.json()
|
|
|
|
if (result.data.id) {
|
|
|
|
return result.data.id
|
|
|
|
}
|
2023-12-13 12:24:04 +01:00
|
|
|
|
|
|
|
errorHandler.message(ppcp_add_payment_method.error_message);
|
2023-12-12 12:23:47 +01:00
|
|
|
},
|
|
|
|
onApprove: async ({vaultSetupToken}) => {
|
|
|
|
const response = await fetch(ppcp_add_payment_method.ajax.create_payment_token.endpoint, {
|
|
|
|
method: "POST",
|
|
|
|
credentials: 'same-origin',
|
|
|
|
headers: {
|
|
|
|
'Content-Type': 'application/json',
|
|
|
|
},
|
|
|
|
body: JSON.stringify({
|
|
|
|
nonce: ppcp_add_payment_method.ajax.create_payment_token.nonce,
|
|
|
|
vault_setup_token: vaultSetupToken,
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
2023-12-13 12:24:04 +01:00
|
|
|
const result = await response.json();
|
|
|
|
if(result.success === true) {
|
|
|
|
window.location.href = ppcp_add_payment_method.payment_methods_page;
|
2023-12-13 14:17:46 +01:00
|
|
|
return;
|
2023-12-13 12:24:04 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
errorHandler.message(ppcp_add_payment_method.error_message);
|
2023-12-12 12:23:47 +01:00
|
|
|
},
|
|
|
|
onError: (error) => {
|
|
|
|
console.error(error)
|
2023-12-13 12:24:04 +01:00
|
|
|
errorHandler.message(ppcp_add_payment_method.error_message);
|
2023-12-12 12:23:47 +01:00
|
|
|
}
|
|
|
|
},
|
|
|
|
).render(`#ppc-button-${PaymentMethods.PAYPAL}-save-payment-method`);
|
2023-10-26 16:36:38 +02:00
|
|
|
})
|
2023-12-12 12:23:47 +01:00
|
|
|
.catch((error) => {
|
|
|
|
console.error(error);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
if(getCurrentPaymentMethod() === PaymentMethods.CARDS) {
|
|
|
|
loadPaypalJsScriptPromise({
|
|
|
|
clientId: ppcp_add_payment_method.client_id,
|
|
|
|
merchantId: ppcp_add_payment_method.merchant_id,
|
|
|
|
dataUserIdToken: ppcp_add_payment_method.id_token,
|
2023-12-12 16:15:07 +01:00
|
|
|
components: 'card-fields',
|
2023-12-12 12:23:47 +01:00
|
|
|
}, true)
|
|
|
|
.then((paypal) => {
|
2023-12-13 12:24:04 +01:00
|
|
|
errorHandler.clear();
|
|
|
|
|
2023-12-12 12:23:47 +01:00
|
|
|
const cardField = paypal.CardFields({
|
|
|
|
createVaultSetupToken: async () => {
|
|
|
|
const response = await fetch(ppcp_add_payment_method.ajax.create_setup_token.endpoint, {
|
|
|
|
method: "POST",
|
|
|
|
credentials: 'same-origin',
|
|
|
|
headers: {
|
|
|
|
'Content-Type': 'application/json',
|
|
|
|
},
|
|
|
|
body: JSON.stringify({
|
|
|
|
nonce: ppcp_add_payment_method.ajax.create_setup_token.nonce,
|
2023-12-13 14:17:46 +01:00
|
|
|
payment_method: PaymentMethods.CARDS,
|
|
|
|
verification_method: ppcp_add_payment_method.verification_method
|
2023-12-12 12:23:47 +01:00
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
const result = await response.json()
|
|
|
|
if (result.data.id) {
|
|
|
|
return result.data.id
|
|
|
|
}
|
2023-12-13 12:24:04 +01:00
|
|
|
|
|
|
|
errorHandler.message(ppcp_add_payment_method.error_message);
|
2023-12-12 12:23:47 +01:00
|
|
|
},
|
|
|
|
onApprove: async ({vaultSetupToken}) => {
|
|
|
|
const response = await fetch(ppcp_add_payment_method.ajax.create_payment_token.endpoint, {
|
|
|
|
method: "POST",
|
|
|
|
credentials: 'same-origin',
|
|
|
|
headers: {
|
|
|
|
'Content-Type': 'application/json',
|
|
|
|
},
|
|
|
|
body: JSON.stringify({
|
|
|
|
nonce: ppcp_add_payment_method.ajax.create_payment_token.nonce,
|
|
|
|
vault_setup_token: vaultSetupToken,
|
2023-12-12 17:23:47 +01:00
|
|
|
payment_method: PaymentMethods.CARDS
|
2023-12-12 12:23:47 +01:00
|
|
|
})
|
|
|
|
})
|
2023-10-26 16:36:38 +02:00
|
|
|
|
2023-12-13 12:24:04 +01:00
|
|
|
const result = await response.json();
|
|
|
|
if(result.success === true) {
|
|
|
|
window.location.href = ppcp_add_payment_method.payment_methods_page;
|
2023-12-13 14:17:46 +01:00
|
|
|
return;
|
2023-12-13 12:24:04 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
errorHandler.message(ppcp_add_payment_method.error_message);
|
2023-12-12 12:23:47 +01:00
|
|
|
},
|
|
|
|
onError: (error) => {
|
|
|
|
console.error(error)
|
2023-12-13 12:24:04 +01:00
|
|
|
errorHandler.message(ppcp_add_payment_method.error_message);
|
2023-12-12 12:23:47 +01:00
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
if (cardField.isEligible()) {
|
|
|
|
const nameField = document.getElementById('ppcp-credit-card-gateway-card-name');
|
|
|
|
if (nameField) {
|
|
|
|
let styles = cardFieldStyles(nameField);
|
|
|
|
cardField.NameField({style: {'input': styles}}).render(nameField.parentNode);
|
|
|
|
nameField.hidden = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
const numberField = document.getElementById('ppcp-credit-card-gateway-card-number');
|
|
|
|
if (numberField) {
|
|
|
|
let styles = cardFieldStyles(numberField);
|
|
|
|
cardField.NumberField({style: {'input': styles}}).render(numberField.parentNode);
|
|
|
|
numberField.hidden = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
const expiryField = document.getElementById('ppcp-credit-card-gateway-card-expiry');
|
|
|
|
if (expiryField) {
|
|
|
|
let styles = cardFieldStyles(expiryField);
|
|
|
|
cardField.ExpiryField({style: {'input': styles}}).render(expiryField.parentNode);
|
|
|
|
expiryField.hidden = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
const cvvField = document.getElementById('ppcp-credit-card-gateway-card-cvc');
|
|
|
|
if (cvvField) {
|
|
|
|
let styles = cardFieldStyles(cvvField);
|
|
|
|
cardField.CVVField({style: {'input': styles}}).render(cvvField.parentNode);
|
|
|
|
cvvField.hidden = true;
|
|
|
|
}
|
|
|
|
}
|
2023-12-12 16:15:07 +01:00
|
|
|
|
|
|
|
document.querySelector('#place_order').addEventListener("click", (event) => {
|
|
|
|
event.preventDefault();
|
|
|
|
|
|
|
|
cardField.submit()
|
|
|
|
.catch((error) => {
|
|
|
|
console.error(error)
|
|
|
|
});
|
|
|
|
});
|
2023-12-12 12:23:47 +01:00
|
|
|
})
|
|
|
|
.catch((error) => {
|
|
|
|
console.error(error)
|
2023-10-26 16:36:38 +02:00
|
|
|
})
|
2023-12-12 12:23:47 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-10-23 16:50:43 +02:00
|
|
|
document.addEventListener(
|
|
|
|
'DOMContentLoaded',
|
|
|
|
() => {
|
|
|
|
jQuery(document.body).on('click init_add_payment_method', '.payment_methods input.input-radio', function () {
|
|
|
|
init()
|
|
|
|
});
|
|
|
|
}
|
|
|
|
);
|
|
|
|
|