Server IP : 213.176.29.180 / Your IP : 3.133.121.19 Web Server : Apache System : Linux 213.176.29.180.hostiran.name 4.18.0-553.22.1.el8_10.x86_64 #1 SMP Tue Sep 24 05:16:59 EDT 2024 x86_64 User : webtaragh ( 1001) PHP Version : 7.4.33 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON Directory (0755) : /home/webtaragh/public_html/wp-admin/../whmcs/modules/gateways/stripe/ |
[ Home ] | [ C0mmand ] | [ Upload File ] |
---|
/* * WHMCS Stripe Javascript * * @copyright Copyright (c) WHMCS Limited 2005-2019 * @license http://www.whmcs.com/license/ WHMCS Eula */ var elementsDiv = null, modalInput = false; function initStripe() { var paymentMethod = jQuery('input[name="paymentmethod"]'), frm = jQuery('#frmCheckout'), newCcForm = jQuery('.frm-credit-card-input'), paymentForm = jQuery('#frmPayment'), adminCreditCard = jQuery('#frmCreditCardDetails'); if (paymentMethod.length && !newCcForm.length) { var newCcInputs = jQuery('#newCardInfo'); insertAndMountElementsDivAfterInput(newCcInputs); elementsDiv = jQuery('#stripeElements'); var newOrExisting = jQuery('input[name="ccinfo"]'), selectedCard = jQuery('input[name="ccinfo"]:checked'), selectedPaymentMethod = jQuery('input[name="paymentmethod"]:checked').val(), existingCvv = jQuery('#existingCardInfo'); if (typeof selectedPaymentMethod == 'undefined') { selectedPaymentMethod = jQuery('input[name="paymentmethod"]').val(); } enablePaymentRequestButton(); if (selectedPaymentMethod === 'stripe') { hide_cc_fields(); enable_stripe(); if (selectedCard.val() !== 'new') { get_existing_token(selectedCard.val()); elementsDiv.slideUp(); frm.off('submit.stripe'); existingCvv.slideUp(); if (amount !== '000') { frm.on('submit.stripe', processExisting); } } } paymentMethod.on('ifChecked', function(){ selectedPaymentMethod = jQuery(this).val(); if (selectedPaymentMethod === 'stripe') { var newOrExistingValue = jQuery('input[name="ccinfo"]:checked').val(); hide_cc_fields(); enable_stripe(); if (newOrExistingValue !== 'new') { get_existing_token(newOrExistingValue); elementsDiv.slideUp(); frm.off('submit.stripe'); if (amount !== '000') { frm.on('submit.stripe', processExisting); } } } else { disable_stripe(); } }); jQuery(document).on('ifChecked', 'input[name="ccinfo"]', function() { frm.off('submit.stripe'); selectedPaymentMethod = jQuery('input[name="paymentmethod"]:checked').val(); if (selectedPaymentMethod !== 'stripe') { return; } hide_cc_fields(); if (jQuery(this).val() === 'new') { enable_stripe(); } else { get_existing_token(jQuery(this).val()); elementsDiv.slideUp(); frm.off('submit.stripe'); if (amount !== '000') { frm.on('submit.stripe', processExisting); } } }); } else if (newCcForm.length) { if (jQuery('input[name="type"]:checked').data('gateway') === 'stripe') { insertAndMountElementsDivBeforeInput( newCcForm.find('div.cc-details') ); elementsDiv = jQuery('#stripeElements'); hide_cc_fields(); elementsDiv.slideDown(); card.addEventListener('change', cardListener); cardExpiryElements.addEventListener('change', cardListener); cardCvcElements.addEventListener('change', cardListener); newCcForm.on('submit.stripe', addNewCardClientSide); } jQuery('input[name="type"]').on('ifChecked', function(){ if (jQuery(this).data('gateway') === 'stripe') { insertAndMountElementsDivBeforeInput( newCcForm.find('div.cc-details') ); elementsDiv = jQuery('#stripeElements'); hide_cc_fields(); elementsDiv.slideDown(); newCcForm.off('submit.stripe'); newCcForm.on('submit.stripe', addNewCardClientSide); card.addEventListener('change', cardListener); cardExpiryElements.addEventListener('change', cardListener); cardCvcElements.addEventListener('change', cardListener); } else { disable_stripe(); newCcForm.find('.cc-details').slideDown(); } }); } else if (paymentForm.length) { insertAndMountElementsDivBeforeInput(paymentForm.find('#billingAddressChoice')); paymentForm.find('#inputCardCvv').closest('div.form-group').remove(); paymentForm.off('submit', validateCreditCardInput); if (jQuery('input[name="ccinfo"]:checked').val() === 'new') { enable_payment_stripe(); } else { get_existing_token(jQuery('input[name="ccinfo"]:checked').val()); paymentForm.on('submit.stripe', processExisting); } jQuery('input[name="ccinfo"]').on('ifChecked', function(){ if (jQuery(this).val() === 'new') { enable_payment_stripe(); } else { get_existing_token(jQuery(this).val()); jQuery('#stripeElements').slideUp(); paymentForm.off('submit.stripe'); paymentForm.on('submit.stripe', processExisting); if (card.hasRegisteredListener('change')) { card.removeEventListener('change', cardListener); } } }); enablePaymentRequestButton(); } else if (adminCreditCard.length) { adminCreditCard.find('#cctype').closest('tr').slideUp().remove(); adminCreditCard.find('#inputCardNumber') .closest('div') .html('<div id="elementCardNumber" class="form-control"></div>'); adminCreditCard.find('#inputCardExpiry') .closest('div') .html('<div id="elementCardExpiry" class="form-control"></div>'); adminCreditCard.find('#cardcvv') .closest('div') .html('<div id="elementCardCvc" class="form-control"></div>'); card.mount('#elementCardNumber'); cardExpiryElements.mount('#elementCardExpiry'); cardCvcElements.mount('#elementCardCvc'); card.addEventListener('change', cardListener); cardExpiryElements.addEventListener('change', cardListener); cardCvcElements.addEventListener('change', cardListener); // same as above - Firefox issues elementsDiv = jQuery('#elementCardNumber'); if (jQuery('#containerStorageInputControl')) { var modalFooter = jQuery('#modalAjaxFooter'), btnSubmit = modalFooter.find('#btnSave'); btnSubmit.removeAttr('name'); btnSubmit.off(); btnSubmit.on('click', validateChangeCard); modalInput = true; } else { adminCreditCard.find('#btnSaveChanges').removeAttr('name'); adminCreditCard.on('submit.stripe', validateChangeCard); } } } function validateStripe(event) { if ( typeof recaptchaValidationComplete !== 'undefined' && typeof recaptchaType !== 'undefined' && recaptchaType === 'invisible' && recaptchaValidationComplete === false ) { event.preventDefault(); return; } var paymentMethod = jQuery('input[name="paymentmethod"]:checked'), frm = elementsDiv.closest('form'), displayError = jQuery('.gateway-errors,.assisted-cc-input-feedback').first(); if (paymentMethod.length && paymentMethod.val() !== 'stripe') { return true; } event.preventDefault(); // Disable the submit button to prevent repeated clicks: frm.find('button[type="submit"],input[type="submit"]') .prop('disabled', true) .addClass('disabled') .find('span').toggle(); WHMCS.http.jqClient.jsonPost({ url: WHMCS.utils.getRouteUrl('/stripe/payment/intent'), data: frm.serialize(), success: function(response) { if (response.success) { stripeResponseHandler(null); } else if (response.two_factor) { stripeResponseHandler(null); } else if (response.validation_feedback) { // An error has been received. displayError.html(response.validation_feedback); if (displayError.not(':visible')) { displayError.slideDown(); } scrollToGatewayInputError(); WHMCS.form.reloadCaptcha(); } else if (response.requires_payment) { stripe.confirmCardPayment( response.token, { payment_method: { 'card': card, 'billing_details': response.billing_details, 'metadata': response.metadata } }, ).then(function(result) { if (result.error) { var error = result.error.message; if (error) { displayError.html(error); if (displayError.not(':visible')) { displayError.slideDown(); } scrollToGatewayInputError(); WHMCS.form.reloadCaptcha(); } } else { stripeResponseHandler(null); } }); } else { stripe.confirmCardPayment( response.token ).then(function(result) { if (result.error) { var error = result.error.message; if (error) { displayError.html(error); if (displayError.not(':visible')) { displayError.slideDown(); } scrollToGatewayInputError(); WHMCS.form.reloadCaptcha(); } } else { stripeResponseHandler(null); } }); } }, warning: function(error) { WHMCS.form.reloadCaptcha(); displayError.html(defaultErrorMessage); if (displayError.not(':visible')) { displayError.slideDown(); } scrollToGatewayInputError(); }, fail: function(error) { displayError.html(defaultErrorMessage); if (displayError.not(':visible')) { displayError.slideDown(); } scrollToGatewayInputError(); } }); // Prevent the form from being submitted: return false; } function processExisting(event) { if ( typeof recaptchaValidationComplete !== 'undefined' && typeof recaptchaType !== 'undefined' && recaptchaType === 'invisible' && recaptchaValidationComplete === false ) { event.preventDefault(); return; } var frm = elementsDiv.closest('form'), displayError = jQuery('.gateway-errors,.assisted-cc-input-feedback').first(); frm.find('.gateway-errors').html('').slideUp(); event.preventDefault(); // Disable the submit button to prevent repeated clicks: frm.find('button[type="submit"],input[type="submit"]') .prop('disabled', true) .addClass('disabled') .find('span').toggle(); WHMCS.http.jqClient.jsonPost({ url: WHMCS.utils.getRouteUrl('/stripe/payment/intent'), data: frm.serialize() + '&payment_method_id=' + existingToken, success: function(response) { if (response.success) { stripeResponseHandler(null); } else if (response.validation_feedback) { // An error has been received. displayError.html(response.validation_feedback); if (displayError.not(':visible')) { displayError.slideDown(); } scrollToGatewayInputError(); WHMCS.form.reloadCaptcha(); } else { stripe.confirmCardPayment( response.token ).then(function(result) { if (result.error) { var error = result.error.message; if (error) { displayError.html(error); if (displayError.not(':visible')) { displayError.slideDown(); } scrollToGatewayInputError(); WHMCS.form.reloadCaptcha(); } } else { stripeResponseHandler(null); } }); } }, warning: function(error) { WHMCS.form.reloadCaptcha(); displayError.html(defaultErrorMessage); if (displayError.not(':visible')) { displayError.slideDown(); } scrollToGatewayInputError(); }, fail: function(error) { displayError.html(defaultErrorMessage); if (displayError.not(':visible')) { displayError.slideDown(); } scrollToGatewayInputError(); } }); } function stripeResponseHandler(token) { var frm = elementsDiv.closest('form'); frm.find('.gateway-errors,.assisted-cc-input-feedback').html('').slideUp(); if (token !== null) { frm.append(jQuery('<input type="hidden" name="remoteStorageToken">').val(token)); } frm.find('button[type="submit"],input[type="submit"]') .find('i.fas,i.far,i.fal,i.fab') .removeAttr('class') .addClass('fas fa-spinner fa-spin'); if (!modalInput) { elementsDiv.slideUp(); } // Submit the form: frm.off('submit.stripe'); frm.append('<input type="submit" id="hiddenSubmit" name="submit" value="Save Changes" style="display:none;">'); var hiddenButton = jQuery('#hiddenSubmit'); if (modalInput) { var modalFooter = jQuery('#modalAjaxFooter'), hiddenButton = modalFooter.find('#btnSave'); hiddenButton.removeClass('disabled'); jQuery('#modalAjax .loader').fadeOut(); hiddenButton.off('click', validateChangeCard); hiddenButton.on('click', submitIdAjaxModalClickEvent); } hiddenButton.click(); } function hide_cc_fields() { var frm = elementsDiv.closest('form'), cardInputs = jQuery('#newCardInfo,.cc-details,#existingCardInfo'); if (cardInputs.is(':visible')) { cardInputs.slideUp('fast', function() { frm.find('#cctype').removeAttr('name'); frm.find('#inputCardCvvExisting').removeAttr('name'); frm.find('#inputCardNumber').removeAttr('name'); frm.find('#inputCardExpiry').removeAttr('name'); frm.find('#inputCardCVV').removeAttr('name'); frm.find('#inputCardCvvExisting').removeAttr('name'); }); } } function enable_stripe() { var frm = elementsDiv.closest('form'), inputDescriptionContainer = jQuery('#inputDescriptionContainer'); hide_cc_fields(); elementsDiv.slideDown(); card.addEventListener('change', cardListener); cardExpiryElements.addEventListener('change', cardListener); cardCvcElements.addEventListener('change', cardListener); frm.off('submit.stripe'); if (amount === '000') { frm.on('submit.stripe', addNewCardClientSide); } else { frm.on('submit.stripe', validateStripe); } inputDescriptionContainer.addClass('col-md-offset-3 offset-md-3'); } function disable_stripe() { var frm = elementsDiv.closest('form'), cardInputs = jQuery('#newCardInfo,.cc-details'), showLocal = true, inputDescriptionContainer = jQuery('#inputDescriptionContainer'); frm.find('#inputCardCvvExisting').attr('name', 'cccvvexisting'); frm.find('#inputCardNumber').attr('name', 'ccnumber'); frm.find('#inputCardExpiry').attr('name', 'ccexpirydate'); frm.find('#inputCardCVV').attr('name', 'cccvv'); frm.find('#inputCardCvvExisting').attr('name', 'cccvvexisting'); frm.find('#cctype').attr('name', 'cctype'); if (jQuery('input[name="paymentmethod"]:checked').data('remote-inputs') === 1) { showLocal = false; } elementsDiv.hide('fast', function() { var firstVisible = jQuery('input[name="ccinfo"]:visible').first(); if (firstVisible.val() === 'new') { if (showLocal) { cardInputs.slideDown(); } } else { firstVisible.click(); } }); frm.off('submit.stripe'); if (card.hasRegisteredListener('change')) { card.removeEventListener('change', cardListener); } if (cardExpiryElements.hasRegisteredListener('change')) { cardExpiryElements.removeEventListener('change', cardListener); } if (cardCvcElements.hasRegisteredListener('change')) { cardCvcElements.removeEventListener('change', cardListener); } inputDescriptionContainer.removeClass('col-md-offset-3 offset-md-3'); } function enable_payment_stripe() { var paymentForm = elementsDiv.closest('form'); paymentForm.find('#inputCardNumber').closest('div.form-group').remove(); paymentForm.find('#inputCardExpiry').closest('div.form-group').remove(); elementsDiv.slideDown(); card.addEventListener('change', cardListener); cardExpiryElements.addEventListener('change', cardListener); cardCvcElements.addEventListener('change', cardListener); paymentForm.off('submit.stripe'); paymentForm.on('submit.stripe', validateStripe); } function enablePaymentRequestButton() { if (paymentRequestButtonEnabled) { var frm = elementsDiv.closest('form'), paymentRequest = stripe.paymentRequest({ country: 'US', currency: paymentRequestCurrency.toLowerCase(), total: { label: paymentRequestDescription, amount: paymentRequestAmountDue }, requestPayerName: true, requestPayerEmail: true, }), displayError = jQuery('.gateway-errors,.assisted-cc-input-feedback').first(); var prButton = elements.create('paymentRequestButton', { paymentRequest: paymentRequest, }); paymentRequest.canMakePayment().then(function(result) { if (result) { if (result.applePay) { //we know it's applepay } else { //we know it's a browser based card option } if (jQuery('#paymentRequestButton').length === 0) { elementsDiv.prepend( '<div class="row"><div class="col-md-4 col-md-offset-4 offset-md-4">' + '<div id="paymentRequestButton"></div>' + '</div></div>' ); } prButton.mount('#paymentRequestButton'); } }); if (amount === '000') { paymentRequest.on('paymentmethod', handlePaymentRequestAsSetupIntent); } else { paymentRequest.on('paymentmethod', handlePaymentRequestAsPaymentIntent); } } } function handlePaymentRequestAsPaymentIntent(event) { var paymentMethodId = event.paymentMethod.id, paymentIntentId = null, frm = elementsDiv.closest('form'); frm.find('.gateway-errors,.assisted-cc-input-feedback').html('').slideUp(); frm.find('button[type="submit"],input[type="submit"]') .addClass('disabled') .prop('disabled', true) .find('i.fas,i.far,i.fal,i.fab') .removeAttr('class') .addClass('fas fa-spinner fa-spin'); WHMCS.http.jqClient.jsonPost({ url: WHMCS.utils.getRouteUrl('/stripe/payment/intent'), data: frm.serialize(), success: function (response) { paymentIntentId = response.token; if (response.success) { event.complete('success'); stripeResponseHandler(null); } else if (response.validation_feedback) { // An error has been received. displayError.html(response.validation_feedback); if (displayError.not(':visible')) { displayError.slideDown(); } scrollToGatewayInputError(); WHMCS.form.reloadCaptcha(); } else { // Let Stripe.js handle the rest of the payment flow. stripe.confirmCardPayment( paymentIntentId, {payment_method: paymentMethodId} ).then(function (result) { if (result.error) { var error = result.error.message; if (error) { displayError.html(error); if (displayError.not(':visible')) { displayError.slideDown(); } scrollToGatewayInputError(); WHMCS.form.reloadCaptcha(); } } else { stripeResponseHandler(null); } }); } WHMCS.form.reloadCaptcha(); }, warning: function(error) { WHMCS.form.reloadCaptcha(); displayError.html(defaultErrorMessage); if (displayError.not(':visible')) { displayError.slideDown(); } scrollToGatewayInputError(); }, fail: function(error) { displayError.html(defaultErrorMessage); if (displayError.not(':visible')) { displayError.slideDown(); } scrollToGatewayInputError(); } }); } function handlePaymentRequestAsSetupIntent(event) { var paymentMethodId = event.paymentMethod.id, frm = elementsDiv.closest('form'); frm.find('.gateway-errors,.assisted-cc-input-feedback').html('').slideUp(); frm.find('button[type="submit"],input[type="submit"]') .addClass('disabled') .prop('disabled', true) .find('i.fas,i.far,i.fal,i.fab') .removeAttr('class') .addClass('fas fa-spinner fa-spin'); WHMCS.http.jqClient.jsonPost({ url: WHMCS.utils.getRouteUrl('/stripe/setup/intent'), data: frm.serialize(), success: function (response) { if (response.success) { stripe.handleCardSetup( response.setup_intent, {payment_method: paymentMethodId} ).then(function (result) { if (result.error) { displayError.html(result.error.message); if (displayError.not(':visible')) { displayError.slideDown(); } scrollToGatewayInputError(); WHMCS.form.reloadCaptcha(); } else { stripeResponseHandler(null); } }); } }, warning: function (error) { displayError.html(error); if (displayError.not(':visible')) { displayError.slideDown(); } scrollToGatewayInputError(); }, fail: function (error) { displayError.html(error); if (displayError.not(':visible')) { displayError.slideDown(); } scrollToGatewayInputError(); } }); } function insertAndMountElementsDivAfterInput(input) { elementsDiv = jQuery('#stripeElements'); if (!elementsDiv.length) { input.after(stripe_cc_html(input)); var stripeCvvWhere = jQuery('#stripeCvcWhere'); if (stripeCvvWhere.length) { jQuery('#cvvWhereLink').clone().appendTo(stripeCvvWhere); // Default catch for all other popovers jQuery('[data-toggle="popover"]').popover({ html: true }); } elementsDiv = jQuery('#stripeElements'); card.mount('#stripeCreditCard'); cardExpiryElements.mount('#stripeExpiryDate'); cardCvcElements.mount('#stripeCvc'); } } function insertAndMountElementsDivBeforeInput(input) { elementsDiv = jQuery('#stripeElements'); if (!elementsDiv.length) { input.before(stripe_cc_html(input)); var stripeCvvWhere = jQuery('#stripeCvcWhere'); if (stripeCvvWhere.length) { jQuery('#cvvWhereLink').clone().appendTo(stripeCvvWhere); // Default catch for all other popovers jQuery('[data-toggle="popover"]').popover({ html: true }); } elementsDiv = jQuery('#stripeElements'); card.mount('#stripeCreditCard'); cardExpiryElements.mount('#stripeExpiryDate'); cardCvcElements.mount('#stripeCvc'); } } function stripe_cc_html(input) { var frm = input.closest('form')[0], html = ''; if (frm.id === 'frmCheckout') { html = '<div id="stripeElements" class="form-group" style="display: none;">' + '<div class="stripe-cards-inputs col-md-8 col-md-offset-2 offset-md-2">' + '<div class="row">' + '<div class="col-md-6">' + '<label for="stripeCreditCard">' + lang.creditCardInput + '</label>' + '<div id="stripeCreditCard" class="form-control"></div>' + '<div id="stripeCardType"></div>' + '</div><div class="col-md-3">' + '<label for="stripeExpiryDate">' + lang.creditCardExpiry + '</label>' + '<div id="stripeExpiryDate" class="form-control"></div>' + '</div><div class="col-md-3">' + '<label for="stripeCvc">' + lang.creditCardCvc + '</label>' + '<div id="stripeCvc" class="form-control"></div>' + '</div>' + '</div>' + //row '</div>' + //stripe-card-inputs '</div>' + //#stripeElements '<div class="clearfix"></div>'; } else { elementsClass = ''; html = '<div id="stripeElements" style="display: none;">' + '<div class="form-group row cc-billing-address">' + '<label for="stripeCreditCard" class="col-sm-4 control-label">' + lang.creditCardInput + '</label>' + '<div class="col-sm-7">' + '<div id="stripeCreditCard" class="form-control" aria-describedby="cc-type"></div>' + '<div id="stripeCardType"></div>' + '</div>' + //col-sm-6 '<div class="col-sm-4"></div>' + '</div>' + //form-group '<div class="form-group row cc-billing-address">' + '<label for="stripeExpiryDate" class="col-sm-4 control-label">' + lang.creditCardExpiry + '</label>' + '<div class="col-sm-2">' + '<div id="stripeExpiryDate" class="form-control"></div>' + '</div>' + //col-sm-6 '<div class="col-sm-6"></div>' + '</div>' + //form-group '<div class="form-group row cc-billing-address">' + '<label for="stripeCvc" class="col-sm-4 control-label">' + lang.creditCardCvc + '</label>' + '<div class="col-sm-2">' + '<div id="stripeCvc" class="form-control"></div>' + '</div>' + //col-sm-2 '<div class="col-sm-4">' + '<div id="stripeCvcWhere"></div>' + '</div>' + //col-sm-4 '</div>' + //form-group '</div>' + //row '</div>' + //#stripeElements '<div class="clearfix"></div>'; } return html; } function cardListener(event) { var displayError = jQuery('.gateway-errors,.assisted-cc-input-feedback').first(), error = ''; if (typeof event.error !== "undefined") { error = event.error.message; if (error) { displayError.html(error); if (displayError.not(':visible')) { displayError.slideDown(); } scrollToGatewayInputError(); } } else { displayError.slideUp().html(''); } if (typeof event.brand !== 'undefined') { // var cardType = jQuery('#stripeCardType'); // if (cardType.length && event.brand === 'unknown') { // cardType.html(''); // } else if (cardType.length && event.brand !== 'unknown') { // cardType.html(event.brand.toUpperCase()); // } } } function addNewCardClientSide(event) { var frm = elementsDiv.closest('form'), displayError = jQuery('.gateway-errors,.assisted-cc-input-feedback').first(); event.preventDefault(); // Disable the submit button to prevent repeated clicks: frm.find('button[type="submit"],input[type="submit"]') .prop('disabled', true) .addClass('disabled') .find('span').toggle(); // We need to submit first to our endpoint to start a SetupIntent WHMCS.http.jqClient.jsonPost({ url: WHMCS.utils.getRouteUrl('/stripe/setup/intent'), data: frm.serialize(), success: function(response) { if (response.success) { stripe.handleCardSetup( response.setup_intent, card ).then(function(result) { if (result.error) { displayError.html(result.error.message); if (displayError.not(':visible')) { displayError.slideDown(); } scrollToGatewayInputError(); WHMCS.form.reloadCaptcha(); } else { stripeResponseHandler(null); } }); } }, warning: function(error) { displayError.html(error); if (displayError.not(':visible')) { displayError.slideDown(); } scrollToGatewayInputError(); }, fail: function(error) { displayError.html(error); if (displayError.not(':visible')) { displayError.slideDown(); } scrollToGatewayInputError(); } }); } function validateChangeCard(event) { var frm = elementsDiv.closest('form'), displayError = jQuery('.gateway-errors,.assisted-cc-input-feedback').first(); event.preventDefault(); // Disable the submit button to prevent repeated clicks: frm.find('button[type="submit"],input[type="submit"]') .prop('disabled', true) .addClass('disabled') .find('span').toggle(); stripe.createPaymentMethod( 'card', card ).then(function(result) { if (result.error) { var error = result.error.message; if (error) { displayError.html(error); if (displayError.not(':visible')) { displayError.slideDown(); } scrollToGatewayInputError(); } } else { if (modalInput) { var btnSubmit = jQuery('#btnSave'); btnSubmit.addClass('disabled'); jQuery('#modalAjax .loader').slideDown(); } if (typeof WHMCS.utils !== 'undefined') { var url = WHMCS.utils.getRouteUrl('/stripe/payment/add'); } else { var url = WHMCS.adminUtils.getAdminRouteUrl('/stripe/payment/admin/add'); } WHMCS.http.jqClient.jsonPost({ url: url, data: frm.serialize() + '&payment_method_id=' + result.paymentMethod.id, success: function(response) { if (response.success) { stripeResponseHandler(response.token); } if (response.validation_feedback) { displayError.text(response.validation_feedback); if (displayError.not(':visible')) { displayError.slideDown(); } } }, warning: function(error) { displayError.html(error); if (displayError.not(':visible')) { displayError.slideDown(); } scrollToGatewayInputError(); }, fail: function(error) { displayError.html(error); if (displayError.not(':visible')) { displayError.slideDown(); } scrollToGatewayInputError(); }, always: function() { if (modalInput) { btnSubmit.removeClass('disabled'); jQuery('#modalAjax .loader').fadeOut(); } } }); } }); // Prevent the form from being submitted: return false; } function get_existing_token(tokenId) { if (typeof tokenId === 'undefined') { var input = jQuery('input[name="ccinfo"]:visible:first'); input.iCheck('check'); tokenId = input.val(); if (tokenId === 'new') { return; } } var displayError = jQuery('.gateway-errors,.assisted-cc-input-feedback').first(), frm = displayError.closest('form'); frm.find('button[type="submit"],input[type="submit"]') .prop('disabled', true) .addClass('disabled') .find('span').toggle(); WHMCS.http.jqClient.jsonPost({ url: WHMCS.utils.getRouteUrl('/payment/stripe/token/get'), data: 'paymethod_id=' + tokenId + '&token=' + csrfToken, success: function(response) { existingToken = response.token; frm.find('button[type="submit"],input[type="submit"]') .prop('disabled', false) .removeClass('disabled') .find('span').toggle(); }, warning: function(error) { displayError.html(error); if (displayError.not(':visible')) { displayError.slideDown(); } scrollToGatewayInputError(); reset_input_to_new(); }, fail: function(error) { displayError.html(error); if (displayError.not(':visible')) { displayError.slideDown(); } scrollToGatewayInputError(); reset_input_to_new(); } }); } function reset_input_to_new() { jQuery('input[name="ccinfo"][value="new"]').iCheck('check'); if (jQuery('#existingCardInfo').is(':visible')) { jQuery('#existingCardInfo').slideUp(); } setTimeout(function() { jQuery('.gateway-errors,.assisted-cc-input-feedback').slideUp(); }, 4000); }