diff --git a/app/Http/Controllers/BillplzTransactionSummaryController.php b/app/Http/Controllers/BillplzTransactionSummaryController.php index d2a1f21..9007045 100644 --- a/app/Http/Controllers/BillplzTransactionSummaryController.php +++ b/app/Http/Controllers/BillplzTransactionSummaryController.php @@ -32,21 +32,56 @@ class BillplzTransactionSummaryController extends Controller $transactionData = $this->processArrahnTransactions($transactionData); $billIds = $transactionData->map(fn($x) => ['bill_id' => $x['bill_id'], 'account_own_by' => $x['account_own_by']]); + + $billIds = $billIds->chunk(40); - $billplzBillsResponse = Http::get(config('api.url_arrahn_portal') . '/api/billplz', ['bill_ids' => json_encode($billIds)]); + $queryBillIdsURL = $billIds->map(fn($x) => url(config('api.url_arrahn_portal') . '/api/billplz', ['bill_ids' => json_encode($x)])); - if($billplzBillsResponse->failed()) { - - Log::error("ArrahnPay Portal API request failed for URL: {$billplzBillsResponse->effectiveUri()->__toString()}", [ - 'status' => $billplzBillsResponse->status(), - 'body' => $billplzBillsResponse->body(), - ]); - - abort( response('Portal ArrahnPay kemungkinan tidak beroperasi. Waktu Operasi Portal ArrahnPay adalah dari 7.30 AM hingga 11.30 PM', 503) ); - - } + + $getBillplzPromise = function($url){ + return Http::async()->get($url); + }; - $billplzBills = $billplzBillsResponse->json(); + $resolveBillplzPromise = function($promise){ + $billplzBillsPromise = $promise->wait()->json(); + + if($billplzBillsPromise->failed()) { + + Log::error("ArrahnPay Portal API request failed for URL: {$$billplzBillsPromise->effectiveUri()->__toString()}", [ + 'status' => $billplzBillsPromise->status(), + 'body' => $billplzBillsPromise->body(), + ]); + + abort( response('Portal ArrahnPay kemungkinan tidak beroperasi. Waktu Operasi Portal ArrahnPay adalah dari 7.30 AM hingga 11.30 PM', 503) ); + + } + + return $billplzBillsPromise; + }; + + $queryBillIdsURL = $queryBillIdsURL->map(fn($x) => $getBillplzPromise($x)) + ->map(fn($x) => $resolveBillplzPromise($x)); + + dd($queryBillIdsURL->all()); + + $mergeBillplzResponse = function($externalArray) { + $merged = []; + + foreach ($externalArray as $key => $subArray) { + foreach (['KOPKB', 'PKB'] as $type) { + if (!isset($merged[$type])) { + $merged[$type] = []; + } + + $merged[$type] = array_merge($merged[$type], $subArray[$type]); + } + } + + return array_map('array_values', $merged); + }; + + $billplzBillsResponse = $billIds->map(fn($x) => $getBillplzResponse($x)); + $billplzBills = $mergeBillplzResponse($billplzBillsResponse); $data = array_map(fn($x, $y) => $this->processBillplzBills($x, $y), $billplzBills, [$transactionDataKOOP, $transactionDataPKB]);