70 lines
2.1 KiB
JavaScript
70 lines
2.1 KiB
JavaScript
(function () {
|
|
function parsePayload(element) {
|
|
var raw = element.getAttribute('data-scs') || '{}';
|
|
try {
|
|
return JSON.parse(raw);
|
|
} catch (error) {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
function setBusy(button, busy) {
|
|
button.disabled = !!busy;
|
|
button.setAttribute('data-loading', busy ? '1' : '0');
|
|
}
|
|
|
|
document.addEventListener('click', function (event) {
|
|
var button = event.target.closest('.scs-checkout-button');
|
|
if (!button) {
|
|
return;
|
|
}
|
|
|
|
event.preventDefault();
|
|
if (button.getAttribute('data-loading') === '1') {
|
|
return;
|
|
}
|
|
|
|
var payload = parsePayload(button);
|
|
if (!payload || !payload.nonce) {
|
|
alert((window.scs_ajax && scs_ajax.error_text) || 'Unable to start payment.');
|
|
return;
|
|
}
|
|
|
|
setBusy(button, true);
|
|
|
|
var formData = new FormData();
|
|
formData.append('action', 'scs_create_session');
|
|
formData.append('nonce', payload.nonce);
|
|
formData.append('payload', JSON.stringify(payload));
|
|
|
|
var ajaxUrl = (window.scs_ajax && scs_ajax.ajax_url) || '';
|
|
|
|
fetch(ajaxUrl, {
|
|
method: 'POST',
|
|
credentials: 'same-origin',
|
|
body: formData
|
|
})
|
|
.then(function (response) {
|
|
return response.json();
|
|
})
|
|
.then(function (data) {
|
|
if (data && data.success && data.data && data.data.url) {
|
|
window.location.href = data.data.url;
|
|
return;
|
|
}
|
|
|
|
var message = (data && data.data && data.data.message)
|
|
? data.data.message
|
|
: ((window.scs_ajax && scs_ajax.error_text) || 'Unable to start payment.');
|
|
|
|
alert(message);
|
|
})
|
|
.catch(function () {
|
|
alert((window.scs_ajax && scs_ajax.error_text) || 'Unable to start payment.');
|
|
})
|
|
.finally(function () {
|
|
setBusy(button, false);
|
|
});
|
|
});
|
|
})();
|