diff --git a/app/PaymentDrivers/StripePaymentDriver.php b/app/PaymentDrivers/StripePaymentDriver.php index 7231cebbffc4..7deb0b433dcb 100644 --- a/app/PaymentDrivers/StripePaymentDriver.php +++ b/app/PaymentDrivers/StripePaymentDriver.php @@ -315,20 +315,36 @@ class StripePaymentDriver extends BaseDriver $client_gateway_token = ClientGatewayToken::whereClientId($this->client->id)->whereCompanyGatewayId($this->company_gateway->id)->first(); + //Search by customer reference if ($client_gateway_token && $client_gateway_token->gateway_customer_reference) { + $customer = Customer::retrieve($client_gateway_token->gateway_customer_reference, $this->stripe_connect_auth); - } else { - $data['name'] = $this->client->present()->name(); - $data['phone'] = $this->client->present()->phone(); - - if (filter_var($this->client->present()->email(), FILTER_VALIDATE_EMAIL)) { - $data['email'] = $this->client->present()->email(); - } + if($customer) + return $customer; - $customer = Customer::create($data, $this->stripe_connect_auth); + } + + //Search by email + $searchResults = \Stripe\Customer::all([ + "email" => $this->client->present()->email(), + "limit" => 2, + "starting_after" => null + ],$this->stripe_connect_auth); + + if(count($searchResults) == 1) + return $searchResults->data[0]; + + //Else create a new record + $data['name'] = $this->client->present()->name(); + $data['phone'] = $this->client->present()->phone(); + + if (filter_var($this->client->present()->email(), FILTER_VALIDATE_EMAIL)) { + $data['email'] = $this->client->present()->email(); } + $customer = Customer::create($data, $this->stripe_connect_auth); + if (!$customer) { throw new Exception('Unable to create gateway customer'); }