From be55b6948d45256c6d0b07e71d326b20a563e45c Mon Sep 17 00:00:00 2001 From: Afiq Hamzah Date: Thu, 1 Aug 2024 14:00:53 +0800 Subject: [PATCH] Add online payment logger services --- app/Http/Controllers/BayaranController.php | 130 +++++++++++------- app/Models/TransactionOnlineStatus.php | 20 +++ app/Services/BillplzService.php | 55 ++++++-- .../OnlineTransactionLoggerService.php | 24 ++++ 4 files changed, 166 insertions(+), 63 deletions(-) create mode 100644 app/Models/TransactionOnlineStatus.php create mode 100644 app/Services/OnlineTransactionLoggerService.php diff --git a/app/Http/Controllers/BayaranController.php b/app/Http/Controllers/BayaranController.php index 654ad75..6083526 100644 --- a/app/Http/Controllers/BayaranController.php +++ b/app/Http/Controllers/BayaranController.php @@ -3,23 +3,25 @@ namespace App\Http\Controllers; use App\Http\Requests\PaymentRequest; +use App\Models\TransactionOnlineStatus; use App\Services\BillplzService; use Carbon\Carbon; use Illuminate\Http\Client\Pool; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Http; +use Illuminate\Support\Facades\Log; use Money\Money; +use App\Services\OnlineTransactionLoggerService; class BayaranController extends Controller { - public function PembayaranAction(PaymentRequest $request) { $request->validated(); - + $arraybayar = $this->setUpahTawarruq($request->getPembiayaanFromNorujukan()); - + return view('includes.bayaran.pembayaransag', compact('arraybayar')); } @@ -60,12 +62,7 @@ class BayaranController extends Controller return Money::MYR($sum())->add($billPlzTransactionFee); }; - $bill = $billplzService->createBill([ - $customerEmail, - $customerPhoneNumber, - $customerName, - $getPaymentSum(), - ]); + $bill = $billplzService->createBill([$customerEmail, $customerPhoneNumber, $customerName, $getPaymentSum()]); $isRecordTransactionSuccess = $this->recordTransaction($paymentArray, $bill); @@ -77,12 +74,10 @@ class BayaranController extends Controller return redirect($bill['url'] . '?auto_submit=true'); } - } public function recordTransaction($paymentArray, $bill) { - ['name' => $customerName, 'icno' => $customerIcno] = auth()->user()->toArray(); $getlatestNoSiri = function () { @@ -97,27 +92,45 @@ class BayaranController extends Controller $generateTransactionReferenceNumber = function () use ($getlatestNoSiri) { [$day, $month, $year] = [now()->day, now()->month, now()->format('y')]; - return 'APKB' . $day . $month . $year . sprintf("%08d", $getlatestNoSiri()); + return 'APKB' . $day . $month . $year . sprintf('%08d', $getlatestNoSiri()); }; - Http::pool(fn(Pool $pool) => - collect($paymentArray)->map(fn($payment) => - $pool->arrahn()->post('/api/online/transaction', [ - 'nokp' => $customerIcno, - 'reference_no' => $generateTransactionReferenceNumber(), - 'nosiri' => $getlatestNoSiri(), - 'billplz_id' => $bill['id'], - 'norujukan' => $payment['norujukan'], - 'kodcaw' => $payment['kodcaw'], - 'total_payment' => $payment['bayaran'], - 'customer_name' => $customerName, - ]) - ) - ); + try { + Http::pool( + fn(Pool $pool) => collect($paymentArray)->map( + fn($payment) => $pool->arrahn()->post('/api/online/transaction', [ + 'nokp' => $customerIcno, + 'reference_no' => $generateTransactionReferenceNumber(), + 'nosiri' => $getlatestNoSiri(), + 'billplz_id' => $bill['id'], + 'norujukan' => $payment['norujukan'], + 'kodcaw' => $payment['kodcaw'], + 'total_payment' => $payment['bayaran'], + 'customer_name' => $customerName, + ]), + ), + ); - Http::arrahn()->put('/api/transaction/online/tagportal', [ - 'billplz_id' => $bill['id'], - ])->json(); + OnlineTransactionLoggerService::logs($bill['id'], $paymentArray, 1, TransactionOnlineStatus::INITIALIZED_TRANSACTION); + + } catch (\Exception $e) { + + OnlineTransactionLoggerService::logs($bill['id'], $paymentArray, $e->getMessage(), TransactionOnlineStatus::INITIALIZED_TRANSACTION); + } + + try { + $response = Http::arrahn() + ->put('/api/transaction/online/tagportal', [ + 'billplz_id' => $bill['id'], + ]) + ->json(); + + OnlineTransactionLoggerService::logs($bill['id'], $paymentArray, $response, TransactionOnlineStatus::UPDATED_TAG_PORTAL); + + } catch (\Exception $e) { + + OnlineTransactionLoggerService::logs($bill['id'], $paymentArray, $e->getMessage(), TransactionOnlineStatus::UPDATED_TAG_PORTAL); + } return true; } @@ -128,23 +141,30 @@ class BayaranController extends Controller $kpbaru = Auth::User()->icno; - $customer = Http::arrahn()->get('/api/customers/' . $kpbaru)->json(); + $customer = Http::arrahn() + ->get('/api/customers/' . $kpbaru) + ->json(); $customer_details = $customer; $current = Carbon::now(); $current = new Carbon(); $date = $current->toDateTimeString(); - $cawangan_info = Http::arrahn()->get('/api/cawangan/' . $payment_details['kodcaw'])->json(); - $cawangan = Http::arrahn()->get('/api/cawangan/detail/' . $payment_details['kodcaw'])->json(); + $cawangan_info = Http::arrahn() + ->get('/api/cawangan/' . $payment_details['kodcaw']) + ->json(); + $cawangan = Http::arrahn() + ->get('/api/cawangan/detail/' . $payment_details['kodcaw']) + ->json(); $cawangan_detail = $cawangan[0]; $nama_cawangan = $cawangan_info['details_caw']; - $gadai_details = Http::arrahn()->get('/api/gadai/norujukan/' . $payment_details['norujukan'])->json(); + $gadai_details = Http::arrahn() + ->get('/api/gadai/norujukan/' . $payment_details['norujukan']) + ->json(); $gadai = $gadai_details[0][0]; return view('pembayaran.resit.resitportal', compact('customer_details', 'payment_details', 'cawangan_detail', 'nama_cawangan', 'gadai')); - } public function callback(Request $request, BillplzService $billplzService) @@ -161,7 +181,6 @@ class BayaranController extends Controller ]); return response(200); - } Http::arrahn()->put('/api/online/transaction', [ @@ -175,7 +194,6 @@ class BayaranController extends Controller public function response(Request $request, BillplzService $billplzService) { - $data = $billplzService->redirect($request->toArray()); $isBillUnpaid = $data['paid'] !== true; @@ -187,12 +205,13 @@ class BayaranController extends Controller 'paid_at' => null, ]); - $transactionOnline = Http::arrahn()->get('/api/transaction/online/login', [ - 'billplz_id' => $data['id'], - ])->json(); + $transactionOnline = Http::arrahn() + ->get('/api/transaction/online/login', [ + 'billplz_id' => $data['id'], + ]) + ->json(); return redirect()->route('pay.failed'); - } Http::arrahn()->put('/api/online/transaction', [ @@ -201,14 +220,15 @@ class BayaranController extends Controller 'paid_at' => $data['paid_at']->format('Y-m-d H:i:s'), ]); - $transactionOnline = Http::arrahn()->get('/api/transaction/online/login', [ - 'billplz_id' => $data['id'], - ])->json(); + $transactionOnline = Http::arrahn() + ->get('/api/transaction/online/login', [ + 'billplz_id' => $data['id'], + ]) + ->json(); return redirect()->route('pay.success', [ 'transactionOnline' => $transactionOnline, ]); - } public function successPayment(Request $request) @@ -216,13 +236,17 @@ class BayaranController extends Controller $transactionOnline = $request->transactionOnline; $arraygadai = array_map( - fn($x) => Http::arrahn()->get('/api/gadai/norujukan/' . $x['norujukan'])->json()[0][0], - $transactionOnline + fn($x) => Http::arrahn() + ->get('/api/gadai/norujukan/' . $x['norujukan']) + ->json()[0][0], + $transactionOnline, ); $arraycawangan = array_map( - fn($x) => Http::arrahn()->get('/api/cawangan/detail/' . $x['kodcaw'])->json()[0], - $transactionOnline + fn($x) => Http::arrahn() + ->get('/api/cawangan/detail/' . $x['kodcaw']) + ->json()[0], + $transactionOnline, ); return view('pembayaran.result.berjayaportal', compact('transactionOnline', 'arraycawangan', 'arraygadai')); @@ -235,14 +259,15 @@ class BayaranController extends Controller public function SenaraiPembayaran() { - $api_url = config('api.url'); $arraysag = []; $auth_user = Auth::user(); - $belum_tebus = Http::arrahn()->get('/api/customers/' . $auth_user['icno'] . '/gadai/' . 'belum_tebus')->json(); + $belum_tebus = Http::arrahn() + ->get('/api/customers/' . $auth_user['icno'] . '/gadai/' . 'belum_tebus') + ->json(); if (is_array($belum_tebus)) { if (sizeof($belum_tebus) > 0) { @@ -262,7 +287,6 @@ class BayaranController extends Controller private function setUpahTawarruq($pembiayaan) { $getJenisKeuntungan = function ($x) { - $jenisKeuntungan = [ '1' => 'onepercent', '0' => 'asal', @@ -273,7 +297,9 @@ class BayaranController extends Controller $getUpahTawarruqPerPembiayaan = function ($x) use ($getJenisKeuntungan) { $jenisKeuntungan = $getJenisKeuntungan($x); - $upahTawarruq = Http::arrahn()->get('/api/upahtawarruq/' . $x['kodcaw'] . '/' . $x['norujukan'], ['jeniskeuntungan' => $jenisKeuntungan])->json(); + $upahTawarruq = Http::arrahn() + ->get('/api/upahtawarruq/' . $x['kodcaw'] . '/' . $x['norujukan'], ['jeniskeuntungan' => $jenisKeuntungan]) + ->json(); if ($jenisKeuntungan == 'onepercent') { $x['upah_tawarruq'] = $upahTawarruq['keuntungan'] + $upahTawarruq['ujrah']; diff --git a/app/Models/TransactionOnlineStatus.php b/app/Models/TransactionOnlineStatus.php new file mode 100644 index 0000000..8fc415d --- /dev/null +++ b/app/Models/TransactionOnlineStatus.php @@ -0,0 +1,20 @@ +client->bill()->create(...$composed_data)->toArray(); - } catch(\Exception $e){ - if($e->getCode() === 404){ - throw new \ErrorException('Please check your billplz payment gateway collection. Ensure that api_key, x_signature, and collection_id are correctly entered'); - }; - } + try{ + $response = $this->client->bill()->create(...$composed_data)->toArray(); + + OnlineTransactionLoggerService::logs($response['id'], $composed_data, $response, TransactionOnlineStatus::BILL_CREATED); + + return $response; + + } catch(\Exception $e){ + if($e->getCode() === 404){ + + $errorMessage = 'Please check your billplz payment gateway collection. Ensure that api_key, x_signature, and collection_id are correctly entered'; + + OnlineTransactionLoggerService::logs( null, $composed_data, $errorMessage, TransactionOnlineStatus::BILL_CREATED); + + throw new \ErrorException($errorMessage); + + } else { + OnlineTransactionLoggerService::logs( null, $composed_data, $e->getMessage(), TransactionOnlineStatus::BILL_CREATED); + }; + + } } public function redirect($request) { - return $this->client->bill()->redirect($request); + try{ + + $response = $this->client->bill()->redirect($request); + + OnlineTransactionLoggerService::logs($request['billplz']['id'], $request, $response, TransactionOnlineStatus::UPDATE_TRANSACTION_REDIRECT); + + return $response; + + } catch(\Exception $e){ + OnlineTransactionLoggerService::logs($request['billplz']['id'], $request, $e->getMessage(), TransactionOnlineStatus::UPDATE_TRANSACTION_REDIRECT); + } } public function webhook($request) { - return $this->client->webhook($request); + try { + $response = $this->client->webhook($request); + + OnlineTransactionLoggerService::logs($request['billplz']['id'], $request, $response, TransactionOnlineStatus::UPDATE_TRANSACTION_CALLBACK); + + return $response; + + } catch (\Exception $e) { + OnlineTransactionLoggerService::logs($request['billplz']['id'], $request, $e->getMessage(), TransactionOnlineStatus::UPDATE_TRANSACTION_CALLBACK); + } } public function getTransactions($date) @@ -94,7 +127,7 @@ class BillplzService public function getBillplzTransactionReview($date) { - $date = Carbon::now()->subDays(8)->toDateString(); + $date = Carbon::now()->toDateString(); $arrahnTransactions = $this->getArrahnTransactions($date); // sort array by tarikh desc and masa key desc diff --git a/app/Services/OnlineTransactionLoggerService.php b/app/Services/OnlineTransactionLoggerService.php new file mode 100644 index 0000000..1d6303d --- /dev/null +++ b/app/Services/OnlineTransactionLoggerService.php @@ -0,0 +1,24 @@ +post('/api/transaction/online/log', [ + 'bill_id' => $bill_id, + 'payload' => json_encode($request), + 'response' => json_encode($response), + 'status' => json_encode($status), + ]); + } catch (\Exception $e) { + // Log the exception itself + Log::error('Failed to log activity: ' . $e->getMessage()); + } + } +}