From 1e635cff1b3bf7d21cb78f2ed1c7669d23dafe43 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 12 Oct 2018 21:00:33 +0200 Subject: [PATCH] Fix new stripe API --- .../interface_80_modStripe_Stripe.class.php | 23 +++++++--- htdocs/public/payment/newpayment.php | 46 +++++++++++-------- htdocs/stripe/class/stripe.class.php | 19 +++++--- 3 files changed, 55 insertions(+), 33 deletions(-) diff --git a/htdocs/core/triggers/interface_80_modStripe_Stripe.class.php b/htdocs/core/triggers/interface_80_modStripe_Stripe.class.php index 04326e7a3fe..cb03315496a 100644 --- a/htdocs/core/triggers/interface_80_modStripe_Stripe.class.php +++ b/htdocs/core/triggers/interface_80_modStripe_Stripe.class.php @@ -147,22 +147,33 @@ class InterfaceStripe if ($customer) { $namecleaned = $object->name ? $object->name : null; - $vatcleaned = array( - "tax_id" => $object->tva_intra ? $object->tva_intra : null, // We force data to "null" if empty as expected by Stripe - "type" => 'vat', - ); + $vatcleaned = $object->tva_intra ? $object->tva_intra : null; + + $taxinfo = array('type'=>'vat'); + if ($vatcleaned) + { + $taxinfo["tax_id"] = $vatcleaned; + } + // We force data to "null" if not defined as expected by Stripe + if (empty($vatcleaned)) $taxinfo=null; // Detect if we change a Stripe info (email, description, vat id) $changerequested = 0; if (! empty($object->email) && $object->email != $customer->email) $changerequested++; if ($namecleaned != $customer->description) $changerequested++; - if ($vatcleaned != $customer->tax_info) $changerequested++; + if (! isset($customer->tax_info['tax_id']) && ! is_null($vatcleaned)) $changerequested++; + elseif (isset($customer->tax_info['tax_id']) && is_null($vatcleaned)) $changerequested++; + elseif (isset($customer->tax_info['tax_id']) && ! is_null($vatcleaned)) + { + if ($vatcleaned != $customer->tax_info['tax_id']) $changerequested++; + } if ($changerequested) { if (! empty($object->email)) $customer->email = $object->email; $customer->description = $namecleaned; - $customer->tax_info = $vatcleaned; + if (empty($taxinfo)) $customer->tax_info = array('type'=>'vat', 'tax_id'=>null); + else $customer->tax_info = $taxinfo; $customer->save(); } diff --git a/htdocs/public/payment/newpayment.php b/htdocs/public/payment/newpayment.php index 08e50e58be7..e0234fcd1f9 100644 --- a/htdocs/public/payment/newpayment.php +++ b/htdocs/public/payment/newpayment.php @@ -413,12 +413,12 @@ if ($action == 'charge' && ! empty($conf->stripe->enabled)) $dol_type=(GETPOST('s', 'alpha') ? GETPOST('s', 'alpha') : GETPOST('source', 'alpha')); $dol_id=GETPOST('dol_id', 'int'); $vatnumber = GETPOST('vatnumber','alpha'); - $savesource=GETPOST('savesource', 'int'); + $savesource=GETPOSTISSET('savesource')?GETPOST('savesource', 'int'):1; - dol_syslog("stripeToken = ".$stripeToken, LOG_DEBUG, 0, '_stripe'); - dol_syslog("email = ".$email, LOG_DEBUG, 0, '_stripe'); - dol_syslog("thirdparty_id = ".$thirdparty_id, LOG_DEBUG, 0, '_stripe'); - dol_syslog("vatnumber = ".$vatnumber, LOG_DEBUG, 0, '_stripe'); + dol_syslog("POST stripeToken = ".$stripeToken, LOG_DEBUG, 0, '_stripe'); + dol_syslog("POST email = ".$email, LOG_DEBUG, 0, '_stripe'); + dol_syslog("POST thirdparty_id = ".$thirdparty_id, LOG_DEBUG, 0, '_stripe'); + dol_syslog("POST vatnumber = ".$vatnumber, LOG_DEBUG, 0, '_stripe'); $error = 0; @@ -444,7 +444,6 @@ if ($action == 'charge' && ! empty($conf->stripe->enabled)) $servicestatus = 1; } - $thirdparty = new Societe($db); $thirdparty->fetch($thirdparty_id); @@ -455,9 +454,11 @@ if ($action == 'charge' && ! empty($conf->stripe->enabled)) $customer = $stripe->customerStripe($thirdparty, $stripeacc, $servicestatus, 1); // Create Stripe card from Token - if (! empty($savesource)) { - $card = $customer->sources->create(array("source" => $stripeToken, "metadata" => $metadata)); - } else { $card = $stripeToken; } + if ($savesource) { + $card = $customer->sources->create(array("source" => $stripeToken, "metadata" => $metadata)); + } else { + $card = $stripeToken; + } if (empty($card)) { @@ -468,9 +469,9 @@ if ($action == 'charge' && ! empty($conf->stripe->enabled)) } else { - if (! empty($FULLTAG)) $metadata["FULLTAG"] = $FULLTAG; - if (! empty($dol_id)) $metadata["dol_id"] = $dol_id; - if (! empty($dol_type)) $metadata["dol_type"] = $dol_type; + if (! empty($FULLTAG)) $metadata["FULLTAG"] = $FULLTAG; + if (! empty($dol_id)) $metadata["dol_id"] = $dol_id; + if (! empty($dol_type)) $metadata["dol_type"] = $dol_type; dol_syslog("Create charge on card ".$card->id, LOG_DEBUG, 0, '_stripe'); $charge = \Stripe\Charge::create(array( @@ -495,24 +496,29 @@ if ($action == 'charge' && ! empty($conf->stripe->enabled)) } else { - $vatcleaned = array( - "tax_id" => $vatnumber ? $vatnumber : null, // We force data to "null" if empty as expected by Stripe - "type" => 'vat', - ); + $vatcleaned = $vatnumber ? $vatnumber : null; + + $taxinfo = array('type'=>'vat'); + if ($vatcleaned) + { + $taxinfo["tax_id"] = $vatcleaned; + } + // We force data to "null" if not defined as expected by Stripe + if (empty($vatcleaned)) $taxinfo=null; dol_syslog("Create anonymous customer card profile", LOG_DEBUG, 0, '_stripe'); $customer = \Stripe\Customer::create(array( 'email' => $email, 'description' => ($email?'Anonymous customer for '.$email:'Anonymous customer'), 'metadata' => $metadata, - 'tax_info' => $vatcleaned, + 'tax_info' => $taxinfo, 'source' => $stripeToken // source can be a token OR array('object'=>'card', 'exp_month'=>xx, 'exp_year'=>xxxx, 'number'=>xxxxxxx, 'cvc'=>xxx, 'name'=>'Cardholder's full name', zip ?) )); // Return $customer = array('id'=>'cus_XXXX', ...) - if (! empty($FULLTAG)) $metadata["FULLTAG"] = $FULLTAG; - if (! empty($dol_id)) $metadata["dol_id"] = $dol_id; - if (! empty($dol_type)) $metadata["dol_type"] = $dol_type; + if (! empty($FULLTAG)) $metadata["FULLTAG"] = $FULLTAG; + if (! empty($dol_id)) $metadata["dol_id"] = $dol_id; + if (! empty($dol_type)) $metadata["dol_type"] = $dol_type; // The customer was just created with a source, so we can make a charge // with no card defined, the source just used for customer creation will be used. diff --git a/htdocs/stripe/class/stripe.class.php b/htdocs/stripe/class/stripe.class.php index 5aabb60f07c..db2553ee167 100644 --- a/htdocs/stripe/class/stripe.class.php +++ b/htdocs/stripe/class/stripe.class.php @@ -189,13 +189,18 @@ class Stripe extends CommonObject "description" => $object->name, "metadata" => array('dol_id'=>$object->id, 'dol_version'=>DOL_VERSION, 'dol_entity'=>$conf->entity, 'ipaddress'=>(empty($_SERVER['REMOTE_ADDR'])?'':$_SERVER['REMOTE_ADDR'])) ); - - if ($object->tva_intra!=null) - { - $dataforcustomer["tax_info"] = array( - "tax_id" => $object->tva_intra, - "type" => 'vat'); - } + + $vatcleaned = $object->tva_intra ? $object->tva_intra : null; + + $taxinfo = array('type'=>'vat'); + if ($vatcleaned) + { + $taxinfo["tax_id"] = $vatcleaned; + } + // We force data to "null" if not defined as expected by Stripe + if (empty($vatcleaned)) $taxinfo=null; + + $dataforcustomer["tax_info"] = $taxinfo; //$a = \Stripe\Stripe::getApiKey(); //var_dump($a);var_dump($key);exit;