Fix if setup not complete

This commit is contained in:
Laurent Destailleur 2019-05-18 02:22:23 +02:00
parent c6af18b240
commit a850c7aede

View File

@ -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>';
} }
} }