NEW Default for Stripe is STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION

This commit is contained in:
Laurent Destailleur 2019-08-25 18:02:10 +02:00
parent 69b2d03c47
commit 7cb68d6438
2 changed files with 21 additions and 15 deletions

View File

@ -569,8 +569,8 @@ class Conf
// By default, we show state code in combo list // By default, we show state code in combo list
if (! isset($this->global->MAIN_SHOW_STATE_CODE)) $this->global->MAIN_SHOW_STATE_CODE=1; if (! isset($this->global->MAIN_SHOW_STATE_CODE)) $this->global->MAIN_SHOW_STATE_CODE=1;
// Use a SCA ready workflow with Stripe module // Use a SCA ready workflow with Stripe module (STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION by default if nothing defined)
if (! isset($this->global->STRIPE_USE_NEW_CHECKOUT)) $this->global->STRIPE_USE_NEW_CHECKOUT=1; if (! isset($this->global->STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION) && empty($this->global->STRIPE_USE_NEW_CHECKOUT)) $this->global->STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION=1;
// Define list of limited modules (value must be key found for "name" property of module, so for example 'supplierproposal' for Module "Supplier Proposal" // Define list of limited modules (value must be key found for "name" property of module, so for example 'supplierproposal' for Module "Supplier Proposal"
if (! isset($this->global->MAIN_MODULES_FOR_EXTERNAL)) $this->global->MAIN_MODULES_FOR_EXTERNAL='user,societe,propal,commande,facture,categorie,supplierproposal,fournisseur,contact,projet,contrat,ficheinter,expedition,agenda,resource,adherent,blockedlog'; // '' means 'all'. Note that contact is added here as it should be a module later. if (! isset($this->global->MAIN_MODULES_FOR_EXTERNAL)) $this->global->MAIN_MODULES_FOR_EXTERNAL='user,societe,propal,commande,facture,categorie,supplierproposal,fournisseur,contact,projet,contrat,ficheinter,expedition,agenda,resource,adherent,blockedlog'; // '' means 'all'. Note that contact is added here as it should be a module later.

View File

@ -1834,7 +1834,8 @@ if (preg_match('/^dopayment/', $action)) // If we choosed/click on the payment
print '<br>'; print '<br>';
print '<form action="'.$_SERVER['REQUEST_URI'].'" method="POST" id="payment-form">'; print '<!-- STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION = '.$conf->global->STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION.' STRIPE_USE_NEW_CHECKOUT = '.$conf->global->STRIPE_USE_NEW_CHECKOUT.' -->'."\n";
print '<form action="'.$_SERVER['REQUEST_URI'].'" method="POST" id="payment-form">'."\n";
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">'."\n"; print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">'."\n";
print '<input type="hidden" name="dopayment_stripe" value="1">'."\n"; print '<input type="hidden" name="dopayment_stripe" value="1">'."\n";
@ -1852,7 +1853,7 @@ if (preg_match('/^dopayment/', $action)) // If we choosed/click on the payment
print '<input type="hidden" name="email" value="'.GETPOST('email', 'alpha').'" />'; print '<input type="hidden" name="email" value="'.GETPOST('email', 'alpha').'" />';
print '<input type="hidden" name="thirdparty_id" value="'.GETPOST('thirdparty_id', 'int').'" />'; print '<input type="hidden" name="thirdparty_id" value="'.GETPOST('thirdparty_id', 'int').'" />';
if (! empty($conf->global->STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION) || ! empty($conf->global->STRIPE_USE_NEW_CHECKOUT)) if (! empty($conf->global->STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION) || ! empty($conf->global->STRIPE_USE_NEW_CHECKOUT)) // Use a SCA ready method
{ {
require_once DOL_DOCUMENT_ROOT.'/stripe/class/stripe.class.php'; require_once DOL_DOCUMENT_ROOT.'/stripe/class/stripe.class.php';
@ -1876,8 +1877,8 @@ if (preg_match('/^dopayment/', $action)) // If we choosed/click on the payment
} }
} }
if (empty($conf->global->STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION) || ! empty($paymentintent)) //if (empty($conf->global->STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION) || ! empty($paymentintent))
{ //{
print ' print '
<table id="dolpaymenttable" summary="Payment form" class="center"> <table id="dolpaymenttable" summary="Payment form" class="center">
<tbody><tr><td class="textpublicpayment">'; <tbody><tr><td class="textpublicpayment">';
@ -1914,7 +1915,7 @@ if (preg_match('/^dopayment/', $action)) // If we choosed/click on the payment
print ' print '
</td></tr></tbody> </td></tr></tbody>
</table>'; </table>';
} //}
if (! empty($conf->global->STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION)) if (! empty($conf->global->STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION))
{ {
@ -1942,6 +1943,8 @@ if (preg_match('/^dopayment/', $action)) // If we choosed/click on the payment
{ {
print '<!-- JS Code for Stripe components -->'; print '<!-- JS Code for Stripe components -->';
print '<script src="https://js.stripe.com/v3/"></script>'."\n"; print '<script src="https://js.stripe.com/v3/"></script>'."\n";
$urllogofull = 'http://home.destailleur.fr:805/dolibarr_dev/htdocs/viewimage.php?modulepart=mycompany&entity=1&file=logos%2Fthumbs%2Ffbm+logo_small.png';
print '<!-- urllogofull = '.$urllogofull.' -->'."\n";
// Code to ask the credit card. This use the default "API version". No way to force API version when using JS code. // 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"; print '<script type="text/javascript" language="javascript">'."\n";
@ -1961,11 +1964,13 @@ if (preg_match('/^dopayment/', $action)) // If we choosed/click on the payment
{ {
$metadata['dol_type'] = $object->element; $metadata['dol_type'] = $object->element;
$metadata['dol_id'] = $object->id; $metadata['dol_id'] = $object->id;
$ref = $object->ref;
} }
try { try {
$arrayforpaymentintent = array( $arrayforpaymentintent = array(
'description'=>'Stripe payment: '.$FULLTAG.(is_object($object)?' ref='.$object->ref:''), 'description'=>'Stripe payment: '.$FULLTAG.($ref?' ref='.$ref:''),
"metadata" => $metadata "metadata" => $metadata
); );
if ($TAG) $arrayforpaymentintent["statement_descriptor"] = dol_trunc($TAG, 10, 'right', 'UTF-8', 1); // 22 chars that appears on bank receipt (company + description) if ($TAG) $arrayforpaymentintent["statement_descriptor"] = dol_trunc($TAG, 10, 'right', 'UTF-8', 1); // 22 chars that appears on bank receipt (company + description)
@ -1973,11 +1978,11 @@ if (preg_match('/^dopayment/', $action)) // If we choosed/click on the payment
$arrayforcheckout = array( $arrayforcheckout = array(
'payment_method_types' => array('card'), 'payment_method_types' => array('card'),
'line_items' => array(array( 'line_items' => array(array(
'name' => $langs->transnoentitiesnoconv("Payment").' '.$FULLTAG.' ref='.$ref, 'name' => $langs->transnoentitiesnoconv("Payment").' '.$TAG, // Label of product line
'description' => 'Stripe payment: '.$FULLTAG.' ref='.$ref, 'description' => 'Stripe payment: '.$FULLTAG.($ref?' ref='.$ref:''),
'amount' => $amountstripe, 'amount' => $amountstripe,
'currency' => $currency, 'currency' => $currency,
'images' => array($urllogofull), //'images' => array($urllogofull),
'quantity' => 1, 'quantity' => 1,
)), )),
'client_reference_id' => $FULLTAG, 'client_reference_id' => $FULLTAG,
@ -2033,6 +2038,7 @@ if (preg_match('/^dopayment/', $action)) // If we choosed/click on the payment
var cardElement = elements.create('card', {style: style}); var cardElement = elements.create('card', {style: style});
// Comment this to avoid the redirect
stripe.redirectToCheckout({ stripe.redirectToCheckout({
// Make the id field from the Checkout Session creation API response // Make the id field from the Checkout Session creation API response
// available to this file, so you can provide it as parameter here // available to this file, so you can provide it as parameter here
@ -2116,14 +2122,14 @@ if (preg_match('/^dopayment/', $action)) // If we choosed/click on the payment
payment_method_data: { payment_method_data: {
billing_details: { billing_details: {
name: cardholderName.value name: cardholderName.value
<?php if (GETPOST('email', 'alpha')) { ?>, email: '<?php echo GETPOST('email', 'alpha'); ?>'<?php } ?> <?php if (GETPOST('email', 'alpha') || (is_object($object) && is_object($object->thirdparty) && ! empty($object->thirdparty->email))) { ?>, email: '<?php echo (GETPOST('email', 'alpha') ? GETPOST('email', 'alpha') : $object->thirdparty->email); ?>'<?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) && ! empty($object->thirdparty->phone)) { ?>, phone: '<?php echo $object->thirdparty->phone; ?>'<?php } ?>
<?php if (is_object($object) && is_object($object->thirdparty)) { ?>, address: { <?php if (is_object($object) && is_object($object->thirdparty)) { ?>, address: {
city: '<?php echo $object->thirdparty->town; ?>', city: '<?php echo $object->thirdparty->town; ?>',
country: '<?php echo $object->thirdparty->country_code; ?>', country: '<?php echo $object->thirdparty->country_code; ?>',
line1: '<?php echo $object->thirdparty->address; ?>', line1: '<?php echo $object->thirdparty->address; ?>',
postal_code: '<?php echo $object->thirdparty->zip; ?>'}<?php } ?> postal_code: '<?php echo $object->thirdparty->zip; ?>'}<?php } ?>
} /* TODO Add all other known data like emails, ... to be SCA compliant */ }
}, },
save_payment_method: <?php if ($stripecu) { print 'true'; } else { print 'false'; } ?> /* true when a customer was provided when creating payment intent. true ask to save the card */ save_payment_method: <?php if ($stripecu) { print 'true'; } else { print 'false'; } ?> /* true when a customer was provided when creating payment intent. true ask to save the card */
} }
@ -2151,7 +2157,7 @@ if (preg_match('/^dopayment/', $action)) // If we choosed/click on the payment
<?php <?php
} }
else else // Old method (not SCA ready)
{ {
?> ?>
// Old code for payment with option STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION off and STRIPE_USE_NEW_CHECKOUT off // Old code for payment with option STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION off and STRIPE_USE_NEW_CHECKOUT off