From c197114ff052122d193d5ac699e3e39b13312ce0 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Thu, 9 Mar 2023 17:33:10 +1100 Subject: [PATCH] Improve Manual ACH payments --- app/PaymentDrivers/Stripe/ACH.php | 18 ++++++++++++++++++ .../Jobs/PaymentIntentProcessingWebhook.php | 15 ++++++++++++++- .../Stripe/UpdatePaymentMethods.php | 12 +++++++++--- .../gateways/stripe/ach/pay.blade.php | 4 ++++ .../ninja2020/payment_methods/show.blade.php | 6 ++++++ 5 files changed, 51 insertions(+), 4 deletions(-) diff --git a/app/PaymentDrivers/Stripe/ACH.php b/app/PaymentDrivers/Stripe/ACH.php index e8d31b2f411e..4c5d880206b8 100644 --- a/app/PaymentDrivers/Stripe/ACH.php +++ b/app/PaymentDrivers/Stripe/ACH.php @@ -356,6 +356,20 @@ class ACH $response = json_decode($request->gateway_response); $bank_account_response = json_decode($request->bank_account_response); + if($response->status == 'requires_source_action' && $response->next_action->type == 'verify_with_microdeposits') + { + $method = $bank_account_response->payment_method->us_bank_account; + $method = $bank_account_response->payment_method->us_bank_account; + $method->id = $response->payment_method; + $method->state = 'unauthorized'; + $method->next_action = $response->next_action->verify_with_microdeposits->hosted_verification_url; + + $customer = $this->stripe->getCustomer($request->customer); + $cgt = $this->storePaymentMethod($method, GatewayType::BANK_TRANSFER, $customer); + + return redirect()->route('client.payment_methods.show', ['payment_method' => $cgt->hashed_id]); + } + $method = $bank_account_response->payment_method->us_bank_account; $method->id = $response->payment_method; $method->state = 'authorized'; @@ -547,6 +561,10 @@ class ACH $payment_meta->type = GatewayType::BANK_TRANSFER; $payment_meta->state = $state; + if(property_exists($method, 'next_action')) { + $payment_meta->next_action = $method->next_action; + } + $data = [ 'payment_meta' => $payment_meta, 'token' => $method->id, diff --git a/app/PaymentDrivers/Stripe/Jobs/PaymentIntentProcessingWebhook.php b/app/PaymentDrivers/Stripe/Jobs/PaymentIntentProcessingWebhook.php index 06ce90182ef3..e9e85d62eb34 100644 --- a/app/PaymentDrivers/Stripe/Jobs/PaymentIntentProcessingWebhook.php +++ b/app/PaymentDrivers/Stripe/Jobs/PaymentIntentProcessingWebhook.php @@ -78,8 +78,21 @@ class PaymentIntentProcessingWebhook implements ShouldQueue $this->payment_completed = true; } - } + + nlog($transaction); + if(isset($transaction['payment_method'])) + { + $cgt = ClientGatewayToken::where('token', $transaction['payment_method'])->first(); + + if($cgt && $cgt->meta?->state == 'unauthorized'){ + $meta = $cgt->meta; + $meta->state = 'authorized'; + $cgt->meta = $meta; + $cgt->save(); + } + } + } if ($this->payment_completed) { return; diff --git a/app/PaymentDrivers/Stripe/UpdatePaymentMethods.php b/app/PaymentDrivers/Stripe/UpdatePaymentMethods.php index 49e994c2bd61..6034f62ba448 100644 --- a/app/PaymentDrivers/Stripe/UpdatePaymentMethods.php +++ b/app/PaymentDrivers/Stripe/UpdatePaymentMethods.php @@ -90,15 +90,21 @@ class UpdatePaymentMethods ); foreach ($bank_methods->data as $method) { - $token_exists = ClientGatewayToken::where([ + $token = ClientGatewayToken::where([ 'gateway_customer_reference' => $customer->id, 'token' => $method->id, 'client_id' => $client->id, 'company_id' => $client->company_id, - ])->exists(); + ])->first(); /* Already exists return */ - if ($token_exists) { + if ($token) { + + $meta = $token->meta; + $meta->state = 'authorized'; + $token->meta = $meta; + $token->save(); + continue; } diff --git a/resources/views/portal/ninja2020/gateways/stripe/ach/pay.blade.php b/resources/views/portal/ninja2020/gateways/stripe/ach/pay.blade.php index b698c5a9c480..766f350415bc 100644 --- a/resources/views/portal/ninja2020/gateways/stripe/ach/pay.blade.php +++ b/resources/views/portal/ninja2020/gateways/stripe/ach/pay.blade.php @@ -213,6 +213,10 @@ errors.textContent = "You will receive an email with details on how to verify your bank account and process payment."; errors.hidden = false; document.getElementById('new-bank').style.visibility = 'hidden' + + let gateway_response = document.getElementById('gateway_response'); + gateway_response.value = JSON.stringify(paymentIntent); + document.getElementById('server-response').submit(); } }); diff --git a/resources/views/portal/ninja2020/payment_methods/show.blade.php b/resources/views/portal/ninja2020/payment_methods/show.blade.php index dbba4777fce1..cfcbbb104b82 100644 --- a/resources/views/portal/ninja2020/payment_methods/show.blade.php +++ b/resources/views/portal/ninja2020/payment_methods/show.blade.php @@ -100,9 +100,15 @@
+ @if (substr($payment_method->token, 0, 2) === 'pm') + + {{ ctrans('texts.complete_verification') }} + + @else {{ ctrans('texts.complete_verification') }} + @endif