validated(); $arraybayar = $this->setUpahTawarruq($request->getPembiayaanFromNorujukan()); return view('includes.bayaran.pembayaransag', compact('arraybayar')); } public function PembayaranEngine(Request $request, BillplzService $billplzService) { ['email' => $customerEmail, 'notel' => $customerPhoneNumber, 'name' => $customerName, 'icno' => $customerIcno] = auth()->user()->toArray(); $bayaranArrahn = array_filter($request->txtjenisbayaran, fn($x) => $x == 'arrahn'); $bayaranOthers = array_filter($request->txtjenisbayaran, fn($x) => $x != 'arrahn'); $bayaranArrahnArray = array_map(function ($x) use ($customerName, $customerIcno, $request) { return [ 'customer_name' => $customerName, 'nokp' => $customerIcno, 'kodcaw' => $request->txtkodcawhidden[$x], 'norujukan' => $request->txtnorujukanhidden[$x], 'bayaran' => $request->txtbayaranhidden[$x], 'txtjbghidden' => $request->txtjbghidden[$x], 'txtupahhidden' => $request->txtupahhidden[$x], ]; }, array_keys($bayaranArrahn)); $bayaranOthersArray = array_map(function ($x) use ($customerName, $customerIcno, $request) { return [ 'customer_name' => $customerName, 'nokp' => $customerIcno, 'kodcaw' => $request->txtkodcawhidden[$x], 'norujukan' => $request->txtnorujukanhidden[$x], 'bayaran' => $request->txtbayaranhidden[$x], ]; }, array_keys($bayaranOthers)); $paymentArray = array_merge($bayaranArrahnArray, $bayaranOthersArray); $getPaymentSum = function () use ($paymentArray) { $billPlzTransactionFee = Money::MYR(100); $sum = fn() => array_reduce($paymentArray, fn($accumulator, $currentItem) => $accumulator + round($currentItem['bayaran'], 1), 0) * 100; return Money::MYR($sum())->add($billPlzTransactionFee); }; $bill = $billplzService->createBill([$customerEmail, $customerPhoneNumber, $customerName, $getPaymentSum()]); $isRecordTransactionSuccess = $this->recordTransaction($paymentArray, $bill); if ($isRecordTransactionSuccess) { session([ 'array_payment' => $paymentArray, 'payment_method' => 'login', ]); return redirect($bill['url'] . '?auto_submit=true'); } } public function recordTransaction($paymentArray, $bill) { ['name' => $customerName, 'icno' => $customerIcno] = auth()->user()->toArray(); $getlatestNoSiri = function () { $previous_siri = Http::arrahn()->get('/api/online/transaction')->json(); if ($previous_siri) { return $previous_siri['nosiri'] + 1; } else { return 1; } }; $generateTransactionReferenceNumber = function () use ($getlatestNoSiri) { [$day, $month, $year] = [now()->day, now()->month, now()->format('y')]; return 'APKB' . $day . $month . $year . sprintf('%08d', $getlatestNoSiri()); }; 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, ]), ), ); 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; } public function ResitBayaran(Request $request) { $payment_details = $request->payment; $kpbaru = Auth::User()->icno; $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_detail = $cawangan[0]; $nama_cawangan = $cawangan_info['details_caw']; $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) { $data = $billplzService->webhook($request->toArray()); $isBillUnpaid = $data['paid'] !== true; if ($isBillUnpaid) { Http::arrahn()->put('/api/online/transaction', [ 'billplz_id' => $data['id'], 'status' => 'UNSUCCESSFUL', 'paid_at' => null, ]); return response(200); } Http::arrahn()->put('/api/online/transaction', [ 'billplz_id' => $data['id'], 'status' => 'PAID', 'paid_at' => $data['paid_at']->format('Y-m-d H:i:s'), ]); return response(200); } public function response(Request $request, BillplzService $billplzService) { $data = $billplzService->redirect($request->toArray()); $isBillUnpaid = $data['paid'] !== true; if ($isBillUnpaid) { Http::arrahn()->put('/api/online/transaction', [ 'billplz_id' => $data['id'], 'status' => 'UNSUCCESSFUL', 'paid_at' => null, ]); $transactionOnline = Http::arrahn() ->get('/api/transaction/online/login', [ 'billplz_id' => $data['id'], ]) ->json(); return redirect()->route('pay.failed'); } Http::arrahn()->put('/api/online/transaction', [ 'billplz_id' => $data['id'], 'status' => 'PAID', '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(); return redirect()->route('pay.success', [ 'transactionOnline' => $transactionOnline, ]); } public function successPayment(Request $request) { $transactionOnline = $request->transactionOnline; $arraygadai = array_map( 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, ); return view('pembayaran.result.berjayaportal', compact('transactionOnline', 'arraycawangan', 'arraygadai')); } public function failedPayment() { return view('pembayaran.result.gagalportal'); } 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(); if (is_array($belum_tebus)) { if (sizeof($belum_tebus) > 0) { foreach ($belum_tebus as $index => $bt) { foreach ($bt as $index1 => $bet) { array_push($arraysag, $bet); } } } } $belum_tebus = $arraysag; return view('includes.bayaran.senaraibayaransag', compact('belum_tebus', 'api_url')); } private function setUpahTawarruq($pembiayaan) { $getJenisKeuntungan = function ($x) { $jenisKeuntungan = [ '1' => 'onepercent', '0' => 'asal', ]; return $jenisKeuntungan[$x['tagbaru']]; }; $getUpahTawarruqPerPembiayaan = function ($x) use ($getJenisKeuntungan) { $jenisKeuntungan = $getJenisKeuntungan($x); $upahTawarruq = Http::arrahn() ->get('/api/upahtawarruq/' . $x['kodcaw'] . '/' . $x['norujukan'], ['jeniskeuntungan' => $jenisKeuntungan]) ->json(); if ($jenisKeuntungan == 'onepercent') { $x['upah_tawarruq'] = $upahTawarruq['keuntungan'] + $upahTawarruq['ujrah']; } if ($jenisKeuntungan == 'asal') { $x['upah_tawarruq'] = $upahTawarruq; } return $x; }; return array_map($getUpahTawarruqPerPembiayaan, $pembiayaan); } }