From 0414b6e62287bc6bc3c1a1597e45d0f91c447d7e Mon Sep 17 00:00:00 2001 From: Lars Kusch Date: Fri, 20 Jan 2023 09:20:30 +0100 Subject: [PATCH] Fix for adding a payment method twice --- app/PaymentDrivers/Stripe/BACS.php | 9 ++++-- app/PaymentDrivers/StripePaymentDriver.php | 32 ++++++++++------------ 2 files changed, 22 insertions(+), 19 deletions(-) diff --git a/app/PaymentDrivers/Stripe/BACS.php b/app/PaymentDrivers/Stripe/BACS.php index 3515d2d20f8b..76013ac71073 100644 --- a/app/PaymentDrivers/Stripe/BACS.php +++ b/app/PaymentDrivers/Stripe/BACS.php @@ -15,6 +15,7 @@ namespace App\PaymentDrivers\Stripe; use App\Exceptions\PaymentFailed; use App\Http\Requests\ClientPortal\Payments\PaymentResponseRequest; use App\Jobs\Util\SystemLogger; +use App\Models\ClientGatewayToken; use App\Models\GatewayType; use App\Models\Payment; use App\Models\PaymentType; @@ -177,8 +178,12 @@ class BACS 'token' => $method->id, 'payment_method_id' => GatewayType::BACS, ]; - - $this->stripe->storeGatewayToken($data, ['gateway_customer_reference' => $customer->id]); + $clientgateway = ClientGatewayToken::query() + ->where('token', $method->id) + ->first(); + if (!$clientgateway){ + $this->stripe->storeGatewayToken($data, ['gateway_customer_reference' => $customer->id]); + } } catch (\Exception $e) { return $this->stripe->processInternallyFailedPayment($this->stripe, $e); } diff --git a/app/PaymentDrivers/StripePaymentDriver.php b/app/PaymentDrivers/StripePaymentDriver.php index 171e467a97d4..ac2f7e925543 100644 --- a/app/PaymentDrivers/StripePaymentDriver.php +++ b/app/PaymentDrivers/StripePaymentDriver.php @@ -738,21 +738,21 @@ class StripePaymentDriver extends BaseDriver $customer = $this->findOrCreateCustomer(); $this->attach($setup_intent->payment_method, $customer); $payment_method = $this->getStripePaymentMethod($setup_intent->payment_method); + $payment_meta = new \stdClass; + $payment_meta->brand = (string) $payment_method->bacs_debit->sort_code; + $payment_meta->last4 = (string) $payment_method->bacs_debit->last4; + $payment_meta->state = 'unauthorized'; + $payment_meta->type = GatewayType::BACS; + + $data = [ + 'payment_meta' => $payment_meta, + 'token' => $payment_method->id, + 'payment_method_id' => GatewayType::BACS, + ]; $clientgateway = ClientGatewayToken::query() ->where('token', $payment_method) ->first(); if (!$clientgateway){ - $payment_meta = new \stdClass; - $payment_meta->brand = (string) $payment_method->bacs_debit->sort_code; - $payment_meta->last4 = (string) $payment_method->bacs_debit->last4; - $payment_meta->state = 'unauthorized'; - $payment_meta->type = GatewayType::BACS; - - $data = [ - 'payment_meta' => $payment_meta, - 'token' => $payment_method->id, - 'payment_method_id' => GatewayType::BACS, - ]; $this->storeGatewayToken($data, ['gateway_customer_reference' => $customer->id]); } return response()->json([], 200); @@ -772,12 +772,10 @@ class StripePaymentDriver extends BaseDriver } elseif ($request->data['object']['status'] === "inactive" && $request->data['object']['payment_method']){ // Delete payment method - // $clientgateway = ClientGatewayToken::query() - // ->where('token', $request->data['object']['payment_method']) - // ->first(); - // $clientgateway->delete(); - - (new ClientGatewayTokenRepository)->archive($request->data['object']['payment_method']); + $clientgateway = ClientGatewayToken::query() + ->where('token', $request->data['object']['payment_method']) + ->first(); + $clientgateway->delete(); return response()->json([], 200); } elseif ($request->data['object']['status'] === "pending"){