diff --git a/htdocs/stripe/class/stripe.class.php b/htdocs/stripe/class/stripe.class.php index 2fbaa261665..3b53b4572f0 100644 --- a/htdocs/stripe/class/stripe.class.php +++ b/htdocs/stripe/class/stripe.class.php @@ -217,7 +217,7 @@ class Stripe extends CommonObject //$sql.= " AND sa.entity IN (".getEntity('societe').")"; $sql.= " AND sa.type = 'card'"; - dol_syslog(get_class($this) . "::fetch search stripe card id for paymentmode id=".$object->id, LOG_DEBUG); + dol_syslog(get_class($this) . "::fetch search stripe card id for paymentmode id=".$object->id.", stripeacc=".$stripeacc, LOG_DEBUG); $resql = $this->db->query($sql); if ($resql) { $num = $this->db->num_rows($resql); @@ -225,13 +225,15 @@ class Stripe extends CommonObject { $obj = $this->db->fetch_object($resql); $cardref = $obj->stripe_card_ref; + dol_syslog("*************".$cardref); if ($cardref) { try { if (empty($stripeacc)) { // If the Stripe connect account not set, we use common API usage $card = $cu->sources->retrieve($cardref); } else { - $card = $cu->sources->retrieve($cardref, array("stripe_account" => $stripeacc)); + //$card = $cu->sources->retrieve($cardref, array("stripe_account" => $stripeacc)); // this API fails when array stripe_account is provided + $card = $cu->sources->retrieve($cardref); } } catch(Exception $e) diff --git a/htdocs/stripe/payment.php b/htdocs/stripe/payment.php index 0b124ea9929..7e551965df7 100644 --- a/htdocs/stripe/payment.php +++ b/htdocs/stripe/payment.php @@ -240,42 +240,43 @@ if (empty($reshook)) if ($action == 'confirm_paiement' && $confirm == 'yes') { - $error=0; + $error=0; - $datepaye = dol_now(); + $datepaye = dol_now(); - $db->begin(); + $db->begin(); - // Clean parameters amount if payment is for a credit note - if (GETPOST('type') == 2) - { - foreach ($amounts as $key => $value) // How payment is dispatch - { - $newvalue = price2num($value,'MT'); - $amounts[$key] = -$newvalue; - } + // Clean parameters amount if payment is for a credit note + if (GETPOST('type') == 2) + { + foreach ($amounts as $key => $value) // How payment is dispatch + { + $newvalue = price2num($value,'MT'); + $amounts[$key] = -$newvalue; + } foreach ($multicurrency_amounts as $key => $value) // How payment is dispatch - { - $newvalue = price2num($value,'MT'); - $multicurrency_amounts[$key] = -$newvalue; - } - } + { + $newvalue = price2num($value,'MT'); + $multicurrency_amounts[$key] = -$newvalue; + } + } - if (! empty($conf->banque->enabled)) - { - // Si module bank actif, un compte est obligatoire lors de la saisie d'un paiement - if (GETPOST('accountid') <= 0) - { - setEventMessages($langs->trans('ErrorFieldRequired',$langs->transnoentities('AccountToCredit')), null, 'errors'); - $error++; - } - } -$facture = new Facture($db); -$facture->fetch($facid); -$facture->fetch_thirdparty(); + if (! empty($conf->banque->enabled)) + { + // Si module bank actif, un compte est obligatoire lors de la saisie d'un paiement + if (GETPOST('accountid') <= 0) + { + setEventMessages($langs->trans('ErrorFieldRequired',$langs->transnoentities('AccountToCredit')), null, 'errors'); + $error++; + } + } - $error = 0; + $facture = new Facture($db); + $facture->fetch($facid); + $facture->fetch_thirdparty(); + + $error = 0; if (is_object($stripe) && $stripeacc) { @@ -286,56 +287,60 @@ $facture->fetch_thirdparty(); } } -$stripeamount=0; - foreach ($amounts as $key => $value) // How payment is dispatch - { -$stripeamount+=price2num($value,'MT'); -} + $stripeamount=0; + foreach ($amounts as $key => $value) // How payment is dispatch + { + $stripeamount+=price2num($value,'MT'); + } -if (preg_match('/acct_/i',$source)) -{ -$paiementcode ="VIR"; -} -elseif (preg_match('/card_/i',$source)) -{ -$paiementcode ="CB"; -} -elseif (preg_match('/src_/i',$source)) -{ -$customer2 = \Stripe\Customer::retrieve($customer->id,array("stripe_account" => $stripe->getStripeAccount($entity))); -$src = $customer2->sources->retrieve("$source"); -if ($src->type=='card'){ -$paiementcode ="CB"; -} -} -$societe = new Societe($db); -$societe->fetch($facture->socid); - dol_syslog("Create charge", LOG_DEBUG, 0, '_stripe'); + if (preg_match('/acct_/i',$source)) + { + $paiementcode ="VIR"; + } + elseif (preg_match('/card_/i',$source)) + { + $paiementcode ="CB"; + } + elseif (preg_match('/src_/i',$source)) + { + $stripeacc = $stripe->getStripeAccount($entity); + $customer2 = \Stripe\Customer::retrieve($customer->id, array("stripe_account" => $stripeacc)); + //$src = $customer2->sources->retrieve("$source", array("stripe_account" => $stripeacc)); // this API fails when array stripe_account is provided + $src = $customer2->sources->retrieve("$source"); + if ($src->type=='card') + { + $paiementcode ="CB"; + } + } -$charge=$stripe->CreatePaymentStripe($stripeamount,"EUR","invoice",$facid,$source,$customer->id,$stripe->getStripeAccount($conf->entity)); + $societe = new Societe($db); + $societe->fetch($facture->socid); + dol_syslog("Create charge", LOG_DEBUG, 0, '_stripe'); - if (!$error) - { - // Creation of payment line - $paiement = new Paiement($db); - $paiement->datepaye = $datepaye; - $paiement->amounts = $amounts; // Array with all payments dispatching - $paiement->multicurrency_amounts = $multicurrency_amounts; // Array with all payments dispatching - $paiement->paiementid = dol_getIdFromCode($db,$paiementcode,'c_paiement'); - $paiement->num_paiement = $charge->message; - $paiement->note = GETPOST('comment'); - } + $charge=$stripe->CreatePaymentStripe($stripeamount,"EUR","invoice",$facid,$source,$customer->id,$stripe->getStripeAccount($conf->entity)); - if (! $error) - { + if (!$error) + { + // Creation of payment line + $paiement = new Paiement($db); + $paiement->datepaye = $datepaye; + $paiement->amounts = $amounts; // Array with all payments dispatching + $paiement->multicurrency_amounts = $multicurrency_amounts; // Array with all payments dispatching + $paiement->paiementid = dol_getIdFromCode($db,$paiementcode,'c_paiement'); + $paiement->num_paiement = $charge->message; + $paiement->note = GETPOST('comment'); + } - $paiement_id = $paiement->create($user, 0); - if ($paiement_id < 0) - { - setEventMessages($paiement->error, $paiement->errors, 'errors'); - $error++; - } - if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE) && count($facture->lines)) + if (! $error) + { + + $paiement_id = $paiement->create($user, 0); + if ($paiement_id < 0) + { + setEventMessages($paiement->error, $paiement->errors, 'errors'); + $error++; + } + if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE) && count($facture->lines)) { $outputlangs = $langs; $newlang = ''; @@ -349,53 +354,53 @@ $charge=$stripe->CreatePaymentStripe($stripeamount,"EUR","invoice",$facid,$sourc $ret = $facture->fetch($facid); // Reload to get new records $facture->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref); - } - } + } - if (! $error) - { - $label='(CustomerInvoicePayment)'; - if (GETPOST('type') == 2) $label='(CustomerInvoicePaymentBack)'; - $result=$paiement->addPaymentToBank($user,'payment',$label,GETPOST('accountid'),'',''); - if ($result < 0) - { - setEventMessages($paiement->error, $paiement->errors, 'errors'); - $error++; - } - elseif (GETPOST('closepaidinvoices')=='on') { - $facture->set_paid($user); - } - } + if (! $error) + { + $label='(CustomerInvoicePayment)'; + if (GETPOST('type') == 2) $label='(CustomerInvoicePaymentBack)'; + $result=$paiement->addPaymentToBank($user,'payment',$label,GETPOST('accountid'),'',''); + if ($result < 0) + { + setEventMessages($paiement->error, $paiement->errors, 'errors'); + $error++; + } + elseif (GETPOST('closepaidinvoices')=='on') { + $facture->set_paid($user); + } + } - if (! $error) - { - $db->commit(); + if (! $error) + { + $db->commit(); - // If payment dispatching on more than one invoice, we keep on summary page, otherwise go on invoice card - $invoiceid=0; - foreach ($paiement->amounts as $key => $amount) - { - $facid = $key; - if (is_numeric($amount) && $amount <> 0) - { - if ($invoiceid != 0) $invoiceid=-1; // There is more than one invoice payed by this payment - else $invoiceid=$facid; - } - } - if ($invoiceid > 0) $loc = DOL_URL_ROOT.'/compta/facture/card.php?facid='.$invoiceid; - else $loc = DOL_URL_ROOT.'/compta/paiement/card.php?id='.$paiement_id; - header('Location: '.$loc); - exit; - } - else - { - $loc = dol_buildpath('/stripeconnect/payment.php?facid='.$facid.'&action=create&error='.$e->getMessage().'', 1); - $db->rollback(); - header('Location: '.$loc); - } + // If payment dispatching on more than one invoice, we keep on summary page, otherwise go on invoice card + $invoiceid=0; + foreach ($paiement->amounts as $key => $amount) + { + $facid = $key; + if (is_numeric($amount) && $amount <> 0) + { + if ($invoiceid != 0) $invoiceid=-1; // There is more than one invoice payed by this payment + else $invoiceid=$facid; + } + } + if ($invoiceid > 0) $loc = DOL_URL_ROOT.'/compta/facture/card.php?facid='.$invoiceid; + else $loc = DOL_URL_ROOT.'/compta/paiement/card.php?id='.$paiement_id; + header('Location: '.$loc); + exit; + } + else + { + $loc = dol_buildpath('/stripeconnect/payment.php?facid='.$facid.'&action=create&error='.$e->getMessage().'', 1); + $db->rollback(); + header('Location: '.$loc); + exit; + } } }