Add online payment logger services

This commit is contained in:
Afiq Hamzah
2024-08-01 14:00:53 +08:00
parent 82a906ae1a
commit be55b6948d
4 changed files with 166 additions and 63 deletions
+78 -52
View File
@@ -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'];
+20
View File
@@ -0,0 +1,20 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class TransactionOnlineStatus extends Model
{
const BILL_CREATED = 1;
const INITIALIZED_TRANSACTION = 2;
const UPDATED_TAG_PORTAL = 3;
const UPDATE_TRANSACTION_CALLBACK = 4;
const UPDATE_TRANSACTION_REDIRECT = 5;
const CRONJOB_UPDATE_TRANSACTION = 6;
const CRONJOB_UPDATE_TRANSAKSI_KEUNTUNGAN = 7;
const CRONJOB_UDPATE_GADAI = 8;
const CRONJOB_REGISTER_AUDIT = 9;
const CRONJOB_REGISTER_GLDETAIL = 10;
const CRONJOB_UPDATE_TRANSAKSI_ONLINE_CRONJOB = 11;
}
+44 -11
View File
@@ -2,9 +2,9 @@
namespace App\Services;
use App\Models\TransactionOnlineStatus;
use Billplz\Client;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Http;
class BillplzService
@@ -50,23 +50,56 @@ class BillplzService
];
try{
return $this->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
@@ -0,0 +1,24 @@
<?php
namespace App\Services;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Log;
class OnlineTransactionLoggerService
{
public static function logs($bill_id, $request, $response, $status)
{
try {
Http::arrahn()->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());
}
}
}