Fix if setup not complete
This commit is contained in:
parent
c6af18b240
commit
a850c7aede
@ -1943,241 +1943,249 @@ if (preg_match('/^dopayment/', $action))
|
|||||||
|
|
||||||
print '</form>'."\n";
|
print '</form>'."\n";
|
||||||
|
|
||||||
print '<script src="https://js.stripe.com/v3/"></script>'."\n";
|
if (empty($stripearrayofkeys['publishable_key']))
|
||||||
|
|
||||||
// Code to ask the credit card. This use the default "API version". No way to force API version when using JS code.
|
|
||||||
print '<script type="text/javascript" language="javascript">'."\n";
|
|
||||||
|
|
||||||
if (! empty($conf->global->STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION))
|
|
||||||
{
|
{
|
||||||
?>
|
print info_admin($langs->trans("ErrorModuleSetupNotComplete", "stripe"), 0, 0, 'error');
|
||||||
|
|
||||||
// Create a Stripe client.
|
|
||||||
var stripe = Stripe('<?php echo $stripearrayofkeys['publishable_key']; // Defined into config.php ?>');
|
|
||||||
|
|
||||||
// Create an instance of Elements
|
|
||||||
var elements = stripe.elements();
|
|
||||||
|
|
||||||
// Custom styling can be passed to options when creating an Element.
|
|
||||||
// (Note that this demo uses a wider set of styles than the guide below.)
|
|
||||||
var style = {
|
|
||||||
base: {
|
|
||||||
color: '#32325d',
|
|
||||||
lineHeight: '24px',
|
|
||||||
fontFamily: '"Helvetica Neue", Helvetica, sans-serif',
|
|
||||||
fontSmoothing: 'antialiased',
|
|
||||||
fontSize: '16px',
|
|
||||||
'::placeholder': {
|
|
||||||
color: '#aab7c4'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
invalid: {
|
|
||||||
color: '#fa755a',
|
|
||||||
iconColor: '#fa755a'
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
var cardElement = elements.create('card', {style: style});
|
|
||||||
|
|
||||||
// Add an instance of the card Element into the `card-element` <div>
|
|
||||||
cardElement.mount('#card-element');
|
|
||||||
|
|
||||||
// Handle real-time validation errors from the card Element.
|
|
||||||
cardElement.addEventListener('change', function(event) {
|
|
||||||
var displayError = document.getElementById('card-errors');
|
|
||||||
if (event.error) {
|
|
||||||
console.log("Show event error (like 'Incorrect card number', ...)");
|
|
||||||
displayError.textContent = event.error.message;
|
|
||||||
} else {
|
|
||||||
console.log("Reset error message");
|
|
||||||
displayError.textContent = '';
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Handle form submission
|
|
||||||
var cardholderName = document.getElementById('cardholder-name');
|
|
||||||
var cardButton = document.getElementById('buttontopay');
|
|
||||||
var clientSecret = cardButton.dataset.secret;
|
|
||||||
|
|
||||||
cardButton.addEventListener('click', function(event) {
|
|
||||||
console.log("We click on buttontopay");
|
|
||||||
event.preventDefault();
|
|
||||||
|
|
||||||
if (cardholderName.value == '')
|
|
||||||
{
|
|
||||||
console.log("Field Card holder is empty");
|
|
||||||
var displayError = document.getElementById('card-errors');
|
|
||||||
displayError.textContent = '<?php print dol_escape_js($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("CardOwner"))); ?>';
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
stripe.handleCardPayment(
|
|
||||||
clientSecret, cardElement, {
|
|
||||||
payment_method_data: {
|
|
||||||
billing_details: {
|
|
||||||
name: cardholderName.value
|
|
||||||
<?php if (GETPOST('email', 'alpha')) { ?>, email: '<?php echo GETPOST('email', 'alpha'); ?>'<?php } ?>
|
|
||||||
<?php if (is_object($object) && is_object($object->thirdparty) && is_object($object->thirdparty->phone)) { ?>, phone: '<?php echo $object->thirdparty->phone; ?>'<?php } ?>
|
|
||||||
<?php if (is_object($object) && is_object($object->thirdparty)) { ?>, address: {
|
|
||||||
city: '<?php echo $object->thirdparty->town; ?>',
|
|
||||||
country: '<?php echo $object->thirdparty->country_code; ?>',
|
|
||||||
line1: '<?php echo $object->thirdparty->address; ?>',
|
|
||||||
postal_code: '<?php echo $object->thirdparty->zip; ?>'}<?php } ?>
|
|
||||||
} /* TODO Add all other known data like emails, ... to be SCA compliant */
|
|
||||||
},
|
|
||||||
save_payment_method: true /* the card will be saved */
|
|
||||||
}
|
|
||||||
).then(function(result) {
|
|
||||||
console.log(result);
|
|
||||||
if (result.error) {
|
|
||||||
console.log("Error on result of handleCardPayment");
|
|
||||||
jQuery('#buttontopay').show();
|
|
||||||
jQuery('#hourglasstopay').hide();
|
|
||||||
// Inform the user if there was an error
|
|
||||||
var errorElement = document.getElementById('card-errors');
|
|
||||||
errorElement.textContent = result.error.message;
|
|
||||||
} else {
|
|
||||||
// The payment has succeeded. Display a success message.
|
|
||||||
console.log("No error on result of handleCardPayment, so we submit the form");
|
|
||||||
// Submit the form
|
|
||||||
jQuery('#buttontopay').hide();
|
|
||||||
jQuery('#hourglasstopay').show();
|
|
||||||
// Send form (action=charge that will do nothing)
|
|
||||||
jQuery('#payment-form').submit();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
<?php
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
?>
|
print '<script src="https://js.stripe.com/v3/"></script>'."\n";
|
||||||
|
|
||||||
|
// Code to ask the credit card. This use the default "API version". No way to force API version when using JS code.
|
||||||
|
print '<script type="text/javascript" language="javascript">'."\n";
|
||||||
|
|
||||||
|
if (! empty($conf->global->STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION))
|
||||||
|
{
|
||||||
|
?>
|
||||||
|
// Code for payment with option STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION set
|
||||||
|
|
||||||
|
// Create a Stripe client.
|
||||||
|
var stripe = Stripe('<?php echo $stripearrayofkeys['publishable_key']; // Defined into config.php ?>');
|
||||||
|
|
||||||
|
// Create an instance of Elements
|
||||||
|
var elements = stripe.elements();
|
||||||
|
|
||||||
|
// Custom styling can be passed to options when creating an Element.
|
||||||
|
// (Note that this demo uses a wider set of styles than the guide below.)
|
||||||
|
var style = {
|
||||||
|
base: {
|
||||||
|
color: '#32325d',
|
||||||
|
lineHeight: '24px',
|
||||||
|
fontFamily: '"Helvetica Neue", Helvetica, sans-serif',
|
||||||
|
fontSmoothing: 'antialiased',
|
||||||
|
fontSize: '16px',
|
||||||
|
'::placeholder': {
|
||||||
|
color: '#aab7c4'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
invalid: {
|
||||||
|
color: '#fa755a',
|
||||||
|
iconColor: '#fa755a'
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var cardElement = elements.create('card', {style: style});
|
||||||
|
|
||||||
|
// Add an instance of the card Element into the `card-element` <div>
|
||||||
|
cardElement.mount('#card-element');
|
||||||
|
|
||||||
|
// Handle real-time validation errors from the card Element.
|
||||||
|
cardElement.addEventListener('change', function(event) {
|
||||||
|
var displayError = document.getElementById('card-errors');
|
||||||
|
if (event.error) {
|
||||||
|
console.log("Show event error (like 'Incorrect card number', ...)");
|
||||||
|
displayError.textContent = event.error.message;
|
||||||
|
} else {
|
||||||
|
console.log("Reset error message");
|
||||||
|
displayError.textContent = '';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Handle form submission
|
||||||
|
var cardholderName = document.getElementById('cardholder-name');
|
||||||
|
var cardButton = document.getElementById('buttontopay');
|
||||||
|
var clientSecret = cardButton.dataset.secret;
|
||||||
|
|
||||||
|
cardButton.addEventListener('click', function(event) {
|
||||||
|
console.log("We click on buttontopay");
|
||||||
|
event.preventDefault();
|
||||||
|
|
||||||
|
if (cardholderName.value == '')
|
||||||
|
{
|
||||||
|
console.log("Field Card holder is empty");
|
||||||
|
var displayError = document.getElementById('card-errors');
|
||||||
|
displayError.textContent = '<?php print dol_escape_js($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("CardOwner"))); ?>';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
stripe.handleCardPayment(
|
||||||
|
clientSecret, cardElement, {
|
||||||
|
payment_method_data: {
|
||||||
|
billing_details: {
|
||||||
|
name: cardholderName.value
|
||||||
|
<?php if (GETPOST('email', 'alpha')) { ?>, email: '<?php echo GETPOST('email', 'alpha'); ?>'<?php } ?>
|
||||||
|
<?php if (is_object($object) && is_object($object->thirdparty) && is_object($object->thirdparty->phone)) { ?>, phone: '<?php echo $object->thirdparty->phone; ?>'<?php } ?>
|
||||||
|
<?php if (is_object($object) && is_object($object->thirdparty)) { ?>, address: {
|
||||||
|
city: '<?php echo $object->thirdparty->town; ?>',
|
||||||
|
country: '<?php echo $object->thirdparty->country_code; ?>',
|
||||||
|
line1: '<?php echo $object->thirdparty->address; ?>',
|
||||||
|
postal_code: '<?php echo $object->thirdparty->zip; ?>'}<?php } ?>
|
||||||
|
} /* TODO Add all other known data like emails, ... to be SCA compliant */
|
||||||
|
},
|
||||||
|
save_payment_method: true /* the card will be saved */
|
||||||
|
}
|
||||||
|
).then(function(result) {
|
||||||
|
console.log(result);
|
||||||
|
if (result.error) {
|
||||||
|
console.log("Error on result of handleCardPayment");
|
||||||
|
jQuery('#buttontopay').show();
|
||||||
|
jQuery('#hourglasstopay').hide();
|
||||||
|
// Inform the user if there was an error
|
||||||
|
var errorElement = document.getElementById('card-errors');
|
||||||
|
errorElement.textContent = result.error.message;
|
||||||
|
} else {
|
||||||
|
// The payment has succeeded. Display a success message.
|
||||||
|
console.log("No error on result of handleCardPayment, so we submit the form");
|
||||||
|
// Submit the form
|
||||||
|
jQuery('#buttontopay').hide();
|
||||||
|
jQuery('#hourglasstopay').show();
|
||||||
|
// Send form (action=charge that will do nothing)
|
||||||
|
jQuery('#payment-form').submit();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
// Create a Stripe client.
|
<?php
|
||||||
var stripe = Stripe('<?php echo $stripearrayofkeys['publishable_key']; // Defined into config.php ?>');
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
?>
|
||||||
|
// Code for payment with option STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION off
|
||||||
|
|
||||||
// Create an instance of Elements
|
// Create a Stripe client.
|
||||||
var elements = stripe.elements();
|
var stripe = Stripe('<?php echo $stripearrayofkeys['publishable_key']; // Defined into config.php ?>');
|
||||||
|
|
||||||
// Custom styling can be passed to options when creating an Element.
|
// Create an instance of Elements
|
||||||
// (Note that this demo uses a wider set of styles than the guide below.)
|
var elements = stripe.elements();
|
||||||
var style = {
|
|
||||||
base: {
|
|
||||||
color: '#32325d',
|
|
||||||
lineHeight: '24px',
|
|
||||||
fontFamily: '"Helvetica Neue", Helvetica, sans-serif',
|
|
||||||
fontSmoothing: 'antialiased',
|
|
||||||
fontSize: '16px',
|
|
||||||
'::placeholder': {
|
|
||||||
color: '#aab7c4'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
invalid: {
|
|
||||||
color: '#fa755a',
|
|
||||||
iconColor: '#fa755a'
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// Create an instance of the card Element
|
// Custom styling can be passed to options when creating an Element.
|
||||||
var card = elements.create('card', {style: style});
|
// (Note that this demo uses a wider set of styles than the guide below.)
|
||||||
|
var style = {
|
||||||
|
base: {
|
||||||
|
color: '#32325d',
|
||||||
|
lineHeight: '24px',
|
||||||
|
fontFamily: '"Helvetica Neue", Helvetica, sans-serif',
|
||||||
|
fontSmoothing: 'antialiased',
|
||||||
|
fontSize: '16px',
|
||||||
|
'::placeholder': {
|
||||||
|
color: '#aab7c4'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
invalid: {
|
||||||
|
color: '#fa755a',
|
||||||
|
iconColor: '#fa755a'
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
// Add an instance of the card Element into the `card-element` <div>
|
// Create an instance of the card Element
|
||||||
card.mount('#card-element');
|
var card = elements.create('card', {style: style});
|
||||||
|
|
||||||
// Handle real-time validation errors from the card Element.
|
// Add an instance of the card Element into the `card-element` <div>
|
||||||
card.addEventListener('change', function(event) {
|
card.mount('#card-element');
|
||||||
var displayError = document.getElementById('card-errors');
|
|
||||||
if (event.error) {
|
|
||||||
displayError.textContent = event.error.message;
|
|
||||||
} else {
|
|
||||||
displayError.textContent = '';
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Handle form submission
|
// Handle real-time validation errors from the card Element.
|
||||||
var form = document.getElementById('payment-form');
|
card.addEventListener('change', function(event) {
|
||||||
console.log(form);
|
var displayError = document.getElementById('card-errors');
|
||||||
form.addEventListener('submit', function(event) {
|
if (event.error) {
|
||||||
event.preventDefault();
|
displayError.textContent = event.error.message;
|
||||||
<?php
|
} else {
|
||||||
if (empty($conf->global->STRIPE_USE_3DSECURE)) // Ask credit card directly, no 3DS test
|
displayError.textContent = '';
|
||||||
{
|
}
|
||||||
?>
|
});
|
||||||
/* Use token */
|
|
||||||
stripe.createToken(card).then(function(result) {
|
// Handle form submission
|
||||||
if (result.error) {
|
var form = document.getElementById('payment-form');
|
||||||
// Inform the user if there was an error
|
console.log(form);
|
||||||
var errorElement = document.getElementById('card-errors');
|
form.addEventListener('submit', function(event) {
|
||||||
errorElement.textContent = result.error.message;
|
event.preventDefault();
|
||||||
} else {
|
<?php
|
||||||
// Send the token to your server
|
if (empty($conf->global->STRIPE_USE_3DSECURE)) // Ask credit card directly, no 3DS test
|
||||||
stripeTokenHandler(result.token);
|
{
|
||||||
}
|
?>
|
||||||
});
|
/* Use token */
|
||||||
<?php
|
stripe.createToken(card).then(function(result) {
|
||||||
}
|
if (result.error) {
|
||||||
else // Ask credit card with 3DS test
|
// Inform the user if there was an error
|
||||||
{
|
var errorElement = document.getElementById('card-errors');
|
||||||
?>
|
errorElement.textContent = result.error.message;
|
||||||
/* Use 3DS source */
|
} else {
|
||||||
stripe.createSource(card).then(function(result) {
|
// Send the token to your server
|
||||||
if (result.error) {
|
stripeTokenHandler(result.token);
|
||||||
// Inform the user if there was an error
|
}
|
||||||
var errorElement = document.getElementById('card-errors');
|
});
|
||||||
errorElement.textContent = result.error.message;
|
<?php
|
||||||
} else {
|
}
|
||||||
// Send the source to your server
|
else // Ask credit card with 3DS test
|
||||||
stripeSourceHandler(result.source);
|
{
|
||||||
}
|
?>
|
||||||
});
|
/* Use 3DS source */
|
||||||
<?php
|
stripe.createSource(card).then(function(result) {
|
||||||
}
|
if (result.error) {
|
||||||
?>
|
// Inform the user if there was an error
|
||||||
});
|
var errorElement = document.getElementById('card-errors');
|
||||||
|
errorElement.textContent = result.error.message;
|
||||||
|
} else {
|
||||||
|
// Send the source to your server
|
||||||
|
stripeSourceHandler(result.source);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
/* Insert the Token into the form so it gets submitted to the server */
|
/* Insert the Token into the form so it gets submitted to the server */
|
||||||
function stripeTokenHandler(token) {
|
function stripeTokenHandler(token) {
|
||||||
// Insert the token ID into the form so it gets submitted to the server
|
// Insert the token ID into the form so it gets submitted to the server
|
||||||
var form = document.getElementById('payment-form');
|
var form = document.getElementById('payment-form');
|
||||||
var hiddenInput = document.createElement('input');
|
var hiddenInput = document.createElement('input');
|
||||||
hiddenInput.setAttribute('type', 'hidden');
|
hiddenInput.setAttribute('type', 'hidden');
|
||||||
hiddenInput.setAttribute('name', 'stripeToken');
|
hiddenInput.setAttribute('name', 'stripeToken');
|
||||||
hiddenInput.setAttribute('value', token.id);
|
hiddenInput.setAttribute('value', token.id);
|
||||||
form.appendChild(hiddenInput);
|
form.appendChild(hiddenInput);
|
||||||
|
|
||||||
// Submit the form
|
// Submit the form
|
||||||
jQuery('#buttontopay').hide();
|
jQuery('#buttontopay').hide();
|
||||||
jQuery('#hourglasstopay').show();
|
jQuery('#hourglasstopay').show();
|
||||||
console.log("submit token");
|
console.log("submit token");
|
||||||
form.submit();
|
form.submit();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Insert the Source into the form so it gets submitted to the server */
|
/* Insert the Source into the form so it gets submitted to the server */
|
||||||
function stripeSourceHandler(source) {
|
function stripeSourceHandler(source) {
|
||||||
// Insert the source ID into the form so it gets submitted to the server
|
// Insert the source ID into the form so it gets submitted to the server
|
||||||
var form = document.getElementById('payment-form');
|
var form = document.getElementById('payment-form');
|
||||||
var hiddenInput = document.createElement('input');
|
var hiddenInput = document.createElement('input');
|
||||||
hiddenInput.setAttribute('type', 'hidden');
|
hiddenInput.setAttribute('type', 'hidden');
|
||||||
hiddenInput.setAttribute('name', 'stripeSource');
|
hiddenInput.setAttribute('name', 'stripeSource');
|
||||||
hiddenInput.setAttribute('value', source.id);
|
hiddenInput.setAttribute('value', source.id);
|
||||||
form.appendChild(hiddenInput);
|
form.appendChild(hiddenInput);
|
||||||
|
|
||||||
// Submit the form
|
// Submit the form
|
||||||
jQuery('#buttontopay').hide();
|
jQuery('#buttontopay').hide();
|
||||||
jQuery('#hourglasstopay').show();
|
jQuery('#hourglasstopay').show();
|
||||||
console.log("submit source");
|
console.log("submit source");
|
||||||
form.submit();
|
form.submit();
|
||||||
|
}
|
||||||
|
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
|
||||||
|
print '</script>';
|
||||||
}
|
}
|
||||||
|
|
||||||
<?php
|
|
||||||
}
|
|
||||||
|
|
||||||
print '</script>';
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user