Fix error in sources->retrieve when a stripeaccount is defined
This commit is contained in:
parent
22c6b596a7
commit
6afd4e67e9
@ -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)
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user