From 86dd03d55b590f1ea604498b76e522b269c16558 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Tue, 7 May 2024 11:10:33 +1000 Subject: [PATCH] Adjustments for payment verifications --- .../Jobs/PaymentIntentFailureWebhook.php | 23 +++++++--- .../Jobs/PaymentIntentProcessingWebhook.php | 21 ++++++--- .../Stripe/Jobs/PaymentIntentWebhook.php | 20 ++++++--- app/PaymentDrivers/StripePaymentDriver.php | 45 ++++++++++++++----- 4 files changed, 81 insertions(+), 28 deletions(-) diff --git a/app/PaymentDrivers/Stripe/Jobs/PaymentIntentFailureWebhook.php b/app/PaymentDrivers/Stripe/Jobs/PaymentIntentFailureWebhook.php index d804bc8e964d..1c5a9b24b5b8 100644 --- a/app/PaymentDrivers/Stripe/Jobs/PaymentIntentFailureWebhook.php +++ b/app/PaymentDrivers/Stripe/Jobs/PaymentIntentFailureWebhook.php @@ -52,20 +52,31 @@ class PaymentIntentFailureWebhook implements ShouldQueue public function handle() { + nlog("payment intent failed"); + MultiDB::findAndSetDbByCompanyKey($this->company_key); + nlog($this->stripe_request); $company = Company::query()->where('company_key', $this->company_key)->first(); foreach ($this->stripe_request as $transaction) { - + nlog($transaction); + $payment = Payment::query() ->where('company_id', $company->id) - ->when(isset($transaction['payment_intent']), function ($query) use ($transaction) { - $query->where('transaction_reference', $transaction['payment_intent']); - }) - ->when(isset($transaction['id']), function ($query) use ($transaction) { - $query->where('transaction_reference', $transaction['id']); + ->where(function ($query) use ($transaction) { + + if(isset($transaction['payment_intent'])) + $query->where('transaction_reference', $transaction['payment_intent']); + + if(isset($transaction['payment_intent']) && isset($transaction['id'])) + $query->orWhere('transaction_reference', $transaction['id']); + + if(!isset($transaction['payment_intent']) && isset($transaction['id'])) { + $query->where('transaction_reference', $transaction['id']); + } + }) ->first(); diff --git a/app/PaymentDrivers/Stripe/Jobs/PaymentIntentProcessingWebhook.php b/app/PaymentDrivers/Stripe/Jobs/PaymentIntentProcessingWebhook.php index cce5ed08f91b..c277bb221fd4 100644 --- a/app/PaymentDrivers/Stripe/Jobs/PaymentIntentProcessingWebhook.php +++ b/app/PaymentDrivers/Stripe/Jobs/PaymentIntentProcessingWebhook.php @@ -65,17 +65,28 @@ class PaymentIntentProcessingWebhook implements ShouldQueue foreach ($this->stripe_request as $transaction) { + $payment = Payment::query() ->where('company_id', $company->id) - ->when(isset($transaction['payment_intent']), function ($query) use ($transaction) { - $query->where('transaction_reference', $transaction['payment_intent']); - }) - ->when(isset($transaction['id']), function ($query) use ($transaction) { - $query->where('transaction_reference', $transaction['id']); + ->where(function ($query) use ($transaction) { + + if(isset($transaction['payment_intent'])) { + $query->where('transaction_reference', $transaction['payment_intent']); + } + + if(isset($transaction['payment_intent']) && isset($transaction['id'])) { + $query->orWhere('transaction_reference', $transaction['id']); + } + + if(!isset($transaction['payment_intent']) && isset($transaction['id'])) { + $query->where('transaction_reference', $transaction['id']); + } + }) ->first(); + if ($payment) { $payment->status_id = Payment::STATUS_PENDING; $payment->save(); diff --git a/app/PaymentDrivers/Stripe/Jobs/PaymentIntentWebhook.php b/app/PaymentDrivers/Stripe/Jobs/PaymentIntentWebhook.php index b078378b3215..3cb0d6d403ec 100644 --- a/app/PaymentDrivers/Stripe/Jobs/PaymentIntentWebhook.php +++ b/app/PaymentDrivers/Stripe/Jobs/PaymentIntentWebhook.php @@ -66,15 +66,25 @@ class PaymentIntentWebhook implements ShouldQueue $payment = Payment::query() ->where('company_id', $company->id) - ->when(isset($transaction['payment_intent']), function ($query) use ($transaction) { - $query->where('transaction_reference', $transaction['payment_intent']); - }) - ->when(isset($transaction['id']), function ($query) use ($transaction) { - $query->where('transaction_reference', $transaction['id']); + ->where(function ($query) use ($transaction) { + + if(isset($transaction['payment_intent'])) { + $query->where('transaction_reference', $transaction['payment_intent']); + } + + if(isset($transaction['payment_intent']) && isset($transaction['id'])) { + $query->orWhere('transaction_reference', $transaction['id']); + } + + if(!isset($transaction['payment_intent']) && isset($transaction['id'])) { + $query->where('transaction_reference', $transaction['id']); + } + }) ->first(); + if ($payment) { $payment->status_id = Payment::STATUS_COMPLETED; $payment->save(); diff --git a/app/PaymentDrivers/StripePaymentDriver.php b/app/PaymentDrivers/StripePaymentDriver.php index a9e62c0cf708..d5f8e689dad7 100644 --- a/app/PaymentDrivers/StripePaymentDriver.php +++ b/app/PaymentDrivers/StripePaymentDriver.php @@ -706,15 +706,25 @@ class StripePaymentDriver extends BaseDriver if ($request->type === 'charge.succeeded') { foreach ($request->data as $transaction) { - $payment = Payment::query() - ->where('company_id', $this->company_gateway->company_id) - ->when(isset($transaction['payment_intent']), function ($query) use ($transaction) { + + $payment = Payment::query() + ->where('company_id', $this->company_gateway->company_id) + ->where(function ($query) use ($transaction) { + + if(isset($transaction['payment_intent'])) { $query->where('transaction_reference', $transaction['payment_intent']); - }) - ->when(isset($transaction['id']), function ($query) use ($transaction) { + } + + if(isset($transaction['payment_intent']) && isset($transaction['id'])) { + $query->orWhere('transaction_reference', $transaction['id']); + } + + if(!isset($transaction['payment_intent']) && isset($transaction['id'])) { $query->where('transaction_reference', $transaction['id']); - }) - ->first(); + } + + }) + ->first(); if ($payment) { @@ -743,17 +753,28 @@ class StripePaymentDriver extends BaseDriver if ($charge->captured) { + $payment = Payment::query() ->where('company_id', $this->company_gateway->company_id) - ->when(isset($transaction['payment_intent']), function ($query) use ($transaction) { - $query->where('transaction_reference', $transaction['payment_intent']); - }) - ->when(isset($transaction['id']), function ($query) use ($transaction) { - $query->where('transaction_reference', $transaction['id']); + ->where(function ($query) use ($transaction) { + + if(isset($transaction['payment_intent'])) { + $query->where('transaction_reference', $transaction['payment_intent']); + } + + if(isset($transaction['payment_intent']) && isset($transaction['id'])) { + $query->orWhere('transaction_reference', $transaction['id']); + } + + if(!isset($transaction['payment_intent']) && isset($transaction['id'])) { + $query->where('transaction_reference', $transaction['id']); + } + }) ->first(); + if ($payment) { $payment->status_id = Payment::STATUS_COMPLETED; $payment->save();