86 lines
1.9 KiB
JavaScript
86 lines
1.9 KiB
JavaScript
var stripe = Stripe("{{ publishable_key }}");
|
|
|
|
var elements = stripe.elements();
|
|
|
|
var style = {
|
|
base: {
|
|
color: '#32325d',
|
|
lineHeight: '18px',
|
|
fontFamily: '"Helvetica Neue", Helvetica, sans-serif',
|
|
fontSmoothing: 'antialiased',
|
|
fontSize: '16px',
|
|
'::placeholder': {
|
|
color: '#aab7c4'
|
|
}
|
|
},
|
|
invalid: {
|
|
color: '#fa755a',
|
|
iconColor: '#fa755a'
|
|
}
|
|
};
|
|
|
|
var card = elements.create('card', {
|
|
hidePostalCode: true,
|
|
style: style
|
|
});
|
|
|
|
card.mount('#card-element');
|
|
|
|
function setOutcome(result) {
|
|
|
|
if (result.token) {
|
|
$('#submit').prop('disabled', true)
|
|
$('#submit').html(__('Processing...'))
|
|
frappe.call({
|
|
method:"erpnext.templates.pages.integrations.stripe_checkout.make_payment",
|
|
freeze:true,
|
|
headers: {"X-Requested-With": "XMLHttpRequest"},
|
|
args: {
|
|
"stripe_token_id": result.token.id,
|
|
"data": JSON.stringify({{ frappe.form_dict|json }}),
|
|
"reference_doctype": "{{ reference_doctype }}",
|
|
"reference_docname": "{{ reference_docname }}"
|
|
},
|
|
callback: function(r) {
|
|
if (r.message.status == "Completed") {
|
|
$('#submit').hide()
|
|
$('.success').show()
|
|
setTimeout(function() {
|
|
window.location.href = r.message.redirect_to
|
|
}, 2000);
|
|
} else {
|
|
$('#submit').hide()
|
|
$('.error').show()
|
|
setTimeout(function() {
|
|
window.location.href = r.message.redirect_to
|
|
}, 2000);
|
|
}
|
|
}
|
|
});
|
|
|
|
} else if (result.error) {
|
|
$('.error').html() = result.error.message;
|
|
$('.error').show()
|
|
}
|
|
}
|
|
|
|
card.on('change', function(event) {
|
|
var displayError = document.getElementById('card-errors');
|
|
if (event.error) {
|
|
displayError.textContent = event.error.message;
|
|
} else {
|
|
displayError.textContent = '';
|
|
}
|
|
});
|
|
|
|
frappe.ready(function() {
|
|
$('#submit').off("click").on("click", function(e) {
|
|
e.preventDefault();
|
|
var extraDetails = {
|
|
name: $('input[name=cardholder-name]').val(),
|
|
email: $('input[name=cardholder-email]').val()
|
|
}
|
|
stripe.createToken(card, extraDetails).then(setOutcome);
|
|
})
|
|
});
|