From 54afae4d8bef3545c7f16903c7ca22bb6763fe48 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Mon, 9 Sep 2024 16:28:56 +1000 Subject: [PATCH] Exception handling --- .../CBAPowerBoard/CreditCard.php | 25 +++++++++++++------ .../2024_09_06_042040_cba_powerboard.php | 2 ++ database/seeders/PaymentLibrariesSeeder.php | 2 +- .../powerboard/credit_card/pay.blade.php | 13 +++++++--- 4 files changed, 30 insertions(+), 12 deletions(-) diff --git a/app/PaymentDrivers/CBAPowerBoard/CreditCard.php b/app/PaymentDrivers/CBAPowerBoard/CreditCard.php index b28b3b3bd2a7..f26652dc76ab 100644 --- a/app/PaymentDrivers/CBAPowerBoard/CreditCard.php +++ b/app/PaymentDrivers/CBAPowerBoard/CreditCard.php @@ -153,8 +153,9 @@ class CreditCard implements LivewireMethodInterface nlog($r->body()); - if($r->failed()) - $r->throw(); + if ($r->failed()) { + return $this->processUnsuccessfulPayment($r); + } $charge = $r->json(); nlog($charge['resource']['data']); @@ -165,6 +166,8 @@ class CreditCard implements LivewireMethodInterface public function paymentResponse(PaymentResponseRequest $request) { nlog($request->all()); + + $request->headers->set('Accept', 'application/json'); $this->powerboard->payment_hash->data = array_merge((array) $this->powerboard->payment_hash->data, ['response' => $request->all()]); $this->powerboard->payment_hash->save(); @@ -219,7 +222,7 @@ class CreditCard implements LivewireMethodInterface $r = $this->powerboard->gatewayRequest("/v1/charges", (\App\Enum\HttpVerb::POST)->value, $payload, []); if($r->failed()) - $r->throw(); + return $this->processUnsuccessfulPayment($r); $charge = (new \App\PaymentDrivers\CBAPowerBoard\Models\Parse())->encode(Charge::class, $r->object()->resource->data) ?? $r->throw(); @@ -229,9 +232,6 @@ class CreditCard implements LivewireMethodInterface $this->powerboard->logSuccessfulGatewayResponse(['response' => $charge, 'data' => $this->powerboard->payment_hash], SystemLog::TYPE_POWERBOARD); $vt = $charge->customer->payment_source->vault_token; - // nlog($this->powerboard->payment_hash->data); - - // $vt = $r->object()->resource->data->_3ds->id; if($request->store_card){ $data = [ @@ -283,8 +283,19 @@ class CreditCard implements LivewireMethodInterface return redirect()->route('client.payments.show', ['payment' => $payment->hashed_id]); } - public function processUnsuccessfulPayment($server_response) + public function processUnsuccessfulPayment($response) { + try{ + $response->throw(); + } + catch(\Throwable $exception){ + $error_object = $exception->response->object(); + + nlog($error_object); + return response()->json(['message' => $error_object->error->details->messages[0]->gateway_specific_code, 'code' => 400], 400); + } + + // $this->stripe->sendFailureMail($server_response->cancellation_reason); // $message = [ diff --git a/database/migrations/2024_09_06_042040_cba_powerboard.php b/database/migrations/2024_09_06_042040_cba_powerboard.php index d4e756672546..bfeba4de60e1 100644 --- a/database/migrations/2024_09_06_042040_cba_powerboard.php +++ b/database/migrations/2024_09_06_042040_cba_powerboard.php @@ -22,7 +22,9 @@ return new class extends Migration $fields->secretKey = ''; // $fields->applicationId = ''; // $fields->locationId = ''; + $fields->testMode = false; + $fields->Threeds = false; $powerboard = new Gateway(); $powerboard->id = 64; diff --git a/database/seeders/PaymentLibrariesSeeder.php b/database/seeders/PaymentLibrariesSeeder.php index f77761e5acb7..879b65dc8831 100644 --- a/database/seeders/PaymentLibrariesSeeder.php +++ b/database/seeders/PaymentLibrariesSeeder.php @@ -89,7 +89,7 @@ class PaymentLibrariesSeeder extends Seeder ['id' => 61, 'name' => 'PayPal Platform', 'provider' => 'PayPal_PPCP', 'key' => '80af24a6a691230bbec33e930ab40666', 'fields' => '{"testMode":false}'], ['id' => 62, 'name' => 'BTCPay', 'provider' => 'BTCPay', 'key' => 'vpyfbmdrkqcicpkjqdusgjfluebftuva', 'fields' => '{"btcpayUrl":"", "apiKey":"", "storeId":"", "webhookSecret":""}'], ['id' => 63, 'name' => 'Rotessa', 'is_offsite' => false, 'sort_order' => 22, 'provider' => 'Rotessa', 'key' => '91be24c7b792230bced33e930ac61676', 'fields' => '{"apiKey":"", "testMode":false}'], - ['id' => 64, 'name' => 'CBA PowerBoard', 'is_offsite' => false, 'sort_order' => 26, 'provider' => 'CBAPowerBoard', 'key' => 'b67581d804dbad1743b61c57285142ad', 'fields' => '{"publicKey":"", "secretKey":"", "testMode":false}'], + ['id' => 64, 'name' => 'CBA PowerBoard', 'is_offsite' => false, 'sort_order' => 26, 'provider' => 'CBAPowerBoard', 'key' => 'b67581d804dbad1743b61c57285142ad', 'fields' => '{"publicKey":"", "secretKey":"", "testMode":false, "Threeds":true}'], ]; foreach ($gateways as $gateway) { diff --git a/resources/views/portal/ninja2020/gateways/powerboard/credit_card/pay.blade.php b/resources/views/portal/ninja2020/gateways/powerboard/credit_card/pay.blade.php index b0efe090491e..67aed5950259 100644 --- a/resources/views/portal/ninja2020/gateways/powerboard/credit_card/pay.blade.php +++ b/resources/views/portal/ninja2020/gateways/powerboard/credit_card/pay.blade.php @@ -265,16 +265,21 @@ headers: { 'Content-Type': 'application/json', "X-Requested-With": "XMLHttpRequest", + "Accept": 'application/json', "X-CSRF-Token": document.querySelector('meta[name="csrf-token"]').content }, body: formData }) + if (!response.ok) { - if (!response.ok) { - const text = await response.text(); - throw new Error(`Network response was not ok: ${response.statusText}. Response text: ${text}`); - } + return await response.json().then(errorData => { + throw new Error(errorData.message ?? 'Unknown error.'); + }); + + // const text = await response.text(); + // throw new Error(`Network response was not ok: ${response.statusText}. Response text: ${text}`); + } return await response.json()