diff --git a/htdocs/public/stripe/ipn.php b/htdocs/public/stripe/ipn.php index c5d2cd85e5c..7d2c8d47ff6 100644 --- a/htdocs/public/stripe/ipn.php +++ b/htdocs/public/stripe/ipn.php @@ -42,11 +42,13 @@ if (isset($_GET['connect'])){ { $endpoint_secret = $conf->global->STRIPE_TEST_WEBHOOK_CONNECT_KEY; $service = 'StripeTest'; + $servicestatus = 0; } else { $endpoint_secret = $conf->global->STRIPE_LIVE_WEBHOOK_CONNECT_KEY; $service = 'StripeLive'; + $servicestatus = 1; } } else { @@ -54,11 +56,13 @@ else { { $endpoint_secret = $conf->global->STRIPE_TEST_WEBHOOK_KEY; $service = 'StripeTest'; + $servicestatus = 0; } else { $endpoint_secret = $conf->global->STRIPE_LIVE_WEBHOOK_KEY; $service = 'StripeLive'; + $servicestatus = 1; } } $payload = @file_get_contents("php://input"); @@ -227,19 +231,37 @@ elseif ($event->type == 'charge.failed') { } elseif (($event->type == 'source.chargeable') && ($event->data->object->type == 'three_d_secure') && ($event->data->object->three_d_secure->authenticated==true)) { - $stripe=new Stripe($db); - $charge=$stripe->CreatePaymentStripe($event->data->object->amount/100,$event->data->object->currency,$event->data->object->metadata->source,$event->data->object->metadata->idsource,$event->data->object->id,$event->data->object->metadata->customer,$stripe->getStripeAccount($service)); + $fulltag=$event->data->object->metadata->FULLTAG; + // Save into $tmptag all metadata + $tmptag=dolExplodeIntoArray($fulltag,'.','='); + + if (! empty($tmptag['ORD'])){ + $order=new Commande($db); + $order->fetch('',$tmptag['ORD']); + $origin='order'; + $item=$order->id; + } elseif (! empty($tmptag['INV'])) { + $invoice = new Facture($db); + $invoice->fetch('',$tmptag['INV']); + $origin='invoice'; + $item=$invoice->id; + } + $stripe=new Stripe($db); + $stripeacc = $stripe->getStripeAccount($service); // Stripe OAuth connect account of dolibarr user (no network access here) + $stripecu = $stripe->getStripeCustomerAccount($tmptag['CUS'], $servicestatus); // Get thirdparty cu_... + $charge=$stripe->createPaymentStripe($event->data->object->amount/100,$event->data->object->currency,$origin,$item,$event->data->object->id,$stripecu,$stripeacc,$servicestatus); + if (isset($charge->id) && $charge->statut=='error'){ $msg=$charge->message; $code=$charge->code; $error++; - } - elseif (isset($charge->id) && $charge->statut=='success' && $event->data->object->metadata->source=='order') { - $order=new Commande($db); - $order->fetch($event->data->object->metadata->idsource); + } + elseif (isset($charge->id) && $charge->statut=='success' && (! empty($tmptag['ORD']))) { + //$order=new Commande($db); + //$order->fetch('',$tmptag['ORD']); $invoice = new Facture($db); - $idinv=$invoice->createFromOrder($order); + $idinv=$invoice->createFromOrder($order,$user); if ($idinv > 0) { @@ -265,7 +287,7 @@ elseif (($event->type == 'source.chargeable') && ($event->data->object->type == if (!$error){ $datepaye = dol_now(); - $paiementcode ="CB"; + $paymentType ="CB"; $amounts=array(); $amounts[$invoice->id] = $total; $multicurrency_amounts=array(); @@ -274,7 +296,7 @@ elseif (($event->type == 'source.chargeable') && ($event->data->object->type == $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->paiementid = dol_getIdFromCode($db, $paymentType, 'c_paiement', 'code', 'id', 1); $paiement->num_paiement = $charge->message; $paiement->note = ''; }