Fix error in sources->retrieve when a stripeaccount is defined

This commit is contained in:
Laurent Destailleur 2018-04-20 23:46:56 +02:00
parent 22c6b596a7
commit 6afd4e67e9
2 changed files with 124 additions and 117 deletions

View File

@ -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)

View File

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