diff --git a/app/Http/Controllers/ApiController.php b/app/Http/Controllers/ApiController.php index 843d3507..4a832278 100644 --- a/app/Http/Controllers/ApiController.php +++ b/app/Http/Controllers/ApiController.php @@ -163,7 +163,7 @@ class ApiController extends Controller Money::MYR($total_bayaran), route('pay.callback'), 'Bayaran Borang', - ['redirect_url' => 'http://192.168.0.88:8003/api/pembayaran/response'] + ['redirect_url' => 'http://192.168.88:8003/api/pembayaran/response'] ); // dd($response); $previous_siri = Resit::orderBy('id','desc')->first(); @@ -296,6 +296,200 @@ class ApiController extends Controller $resit->paid_at = null; $resit->save(); + event(new PaymentNotify('UNSUCCESSFUL',$resit->user_id)); + return response()->json([ + 'success' => false, + 'resit' => $resit + ]); + } + } + + public function bidpayment(Request $request) + { + + $arraycollection_id = array(); + + $http = new HttpMethodsClient( + new GuzzleHttpClient(), + new GuzzleMessageFactory() + ); + + $billplz = new Client($http, $this->api_key); + if(config('app.env') != 'production'){ + $billplz->useSandbox(); + } + + $billplz->useVersion('v4'); + + $bill = $billplz->bill(); + + $current = Carbon::now(); + $current = new Carbon(); + + $day = $current->day; + $month = $current->month; + $year = $current->format('y'); + + $total_bayaran = ($request->total)*100; + + $collection_id = $this->collection_id; + $response = $bill->create( + $collection_id, + $request->email, + $request->notel, + $request->name, + Money::MYR($total_bayaran), + route('pay.bidcallback'), + 'Bayaran Bidaan', + ['redirect_url' => 'http://192.168.88:8003/api/pembayaran/bidresponse'] + ); + // dd($response); + $previous_siri = Resit::orderBy('id','desc')->first(); + if($previous_siri){ + $nosiri = $previous_siri->id + 1; + }else{ + $nosiri = 1; + } + + $billcode = $response->toArray(); + // dd($billcode); + // $billcode['redirect_url'] = 'http://192.168.0.10:8003/api/pembayaran/response'; + // dd($billcode); + $reference_no = 'LPKB' . $day . $month . $year . sprintf("%08d", $nosiri); + // $response2 = $bill->get($billcode['id']); + // dd($response2->toArray()); + $resit = new Resit; + $resit->user_id = $request->user_id; + $resit->lelong_id = $request->lelong_id; + $resit->reference_no = $reference_no; + $resit->billplz_id = $billcode['id']; + $resit->resit_type = 3; //billplz resit for bid payment + $resit->total_payment = $request->total; + $resit->save(); + + + return redirect($billcode['url'] . '?auto_submit=true'); + + // return view('pembayaran.result.berjaya',compact('arraybayaran')); + } + + public function bidcallback(Request $request){ + // dd('hye callback'); + $http = new HttpMethodsClient( + new GuzzleHttpClient(), + new GuzzleMessageFactory() + ); + + $billplz = new Client($http, $this->api_key); + if(config('app.env') != 'production'){ + $billplz->useSandbox(); + } + $billplz->useVersion('v4'); + + $bill = $billplz->bill(); + + $data = $bill->webhook($request->toArray()); + + if($data['billplz']['paid'] == 'true'){ + $resit = Resit::where('billplz_id','=',$data['billplz']['id'])->first(); + $resit->status = 'PAID'; + $resit->paid_at = $data['billplz']['paid_at']; + $resit->save(); + + $resitoriginal = Resit::where('user_id', $resit->user_id) + ->where('lelong_id', $resit->lelong_id) + ->where('resit_type', 2) + ->first(); + $payment = $resit->total_payment; + $resitoriginal->total_payment = $resitoriginal->total_payment + $payment; + $resitoriginal->save(); + + $payment = new Payment; + $payment->user_id = $resitoriginal->user_id; + $payment->lelong_id = $resitoriginal->lelong_id; + $payment->total_payment = $resit->total_payment; + $payment->resit_id = $resitoriginal->id; + $payment->status_payment_opt = 2; //bayar secara online 2 + $payment->status = 1; //fee rm10 - 1 + $payment->remark = 'BAYARAN ONLINCE'; + $payment->save(); + + event(new PaymentNotify('PAID',$resitoriginal->user_id)); + + return response()->json([ + 'success' => true, + 'resit' => $resitoriginal + ]); + + }else{ + $resit = Resit::where('billplz_id','=',$data['billplz']['id'])->first(); + $resit->status = 'UNSUCCESSFUL'; + $resit->paid_at = null; + $resit->save(); + + event(new PaymentNotify('UNSUCCESSFUL',$resit->user_id)); + return response()->json([ + 'success' => false, + 'resit' => $resit + ]); + } + } + + public function bidresponse(Request $request){ + // dd('hye response'); + $http = new HttpMethodsClient( + new GuzzleHttpClient(), + new GuzzleMessageFactory() + ); + + $billplz = new Client($http, $this->api_key); + if(config('app.env') != 'production'){ + $billplz->useSandbox(); + } + $billplz->useVersion('v4'); + + $bill = $billplz->bill(); + $req = $request->toArray(); + $response = $bill->get($req['billplz']['id']); + $data = $response->toArray(); + // dd($data); + if($data['paid'] == 'true'){ + $resit = Resit::where('billplz_id','=',$data['id'])->first(); + $resit->status = 'PAID'; + $resit->paid_at = $data['paid_at']; + $resit->save(); + + $resitoriginal = Resit::where('user_id', $resit->user_id) + ->where('lelong_id', $resit->lelong_id) + ->where('resit_type', 2) + ->first(); + + $resitoriginal->total_payment = $resitoriginal->total_payment + $resit->total_payment; + $resitoriginal->save(); + + $payment = new Payment; + $payment->user_id = $resitoriginal->user_id; + $payment->lelong_id = $resitoriginal->lelong_id; + $payment->total_payment = $resit->total_payment; + $payment->resit_id = $resitoriginal->id; + $payment->status_payment_opt = 2; //bayar secara online 2 + $payment->status = 1; //fee rm10 - 1 + $payment->remark = 'BAYARAN ONLINCE'; + $payment->save(); + + event(new PaymentNotify('PAID',$resit->user_id)); + + return response()->json([ + 'success' => true, + 'resit' => $resit + ]); + + }else{ + $resit = Resit::where('billplz_id','=',$data['id'])->first(); + $resit->status = 'UNSUCCESSFUL'; + $resit->paid_at = null; + $resit->save(); + event(new PaymentNotify('UNSUCCESSFUL',$resit->user_id)); return response()->json([ 'success' => false, diff --git a/app/Http/Controllers/LelongController.php b/app/Http/Controllers/LelongController.php index 80877b9e..703e20bc 100644 --- a/app/Http/Controllers/LelongController.php +++ b/app/Http/Controllers/LelongController.php @@ -474,6 +474,7 @@ class LelongController extends Controller $previous_siri = Resit::orderBy('id','desc')->first(); $checkdata = Resit::where('user_id', $bidder->user_id) ->where('lelong_id', $id) + ->where('resit_type', 2) ->first(); if(!$checkdata){ if($previous_siri){ diff --git a/app/Http/Controllers/Mobile/LelongMobileController.php b/app/Http/Controllers/Mobile/LelongMobileController.php index 164d78df..1a795f48 100644 --- a/app/Http/Controllers/Mobile/LelongMobileController.php +++ b/app/Http/Controllers/Mobile/LelongMobileController.php @@ -180,4 +180,69 @@ class LelongMobileController extends Controller return response()->json($lelong); } + + public function bidresult($user_id) + { + $sag = LelongBidder::join('lelongbid', 'lelongbidder.lelongbid_id', '=', 'lelongbid.id') + ->join('lelong', 'lelongbid.lelong_id', '=', 'lelong.id') + ->where('lelongbidder.user_id',$user_id) + // ->where('lelongbid.lelong_id',$lelong_id) + ->where('lelongbidder.status_bidder',1) + ->whereNull('lelongbidder.status_payment') + ->select( + 'lelongbid.lelong_id', + 'lelongbidder.user_id', + 'lelongbidder.lelongbid_id', + 'lelongbidder.hargabida', + 'lelongbidder.status_payment', + 'lelongbid.norujukan' + + ) + ->get(); + + // dd($sag); + $data = []; + $total_hargabida = $sag->sum('hargabida'); + array_push($data,[ + 'sag'=> $sag, + 'total_hargabida'=> $total_hargabida + ]); + // dd($winner); + return response()->json($data); + } + + public function updatebiditem(Request $request) + { + // dd($request->norujukan->toArray()); + // foreach($request->norujukan as $norujukan) + // { + // dd($norujukan); + // } + $currentdate = Carbon::now(); + $currentdate = $currentdate->toDateTimeString(); + + $lelongbid = LelongBid::whereIn('norujukan',$request->norujukan) + ->where('lelong_id',$request->lelong_id) + ->get(); + + foreach($lelongbid as $bid) + { + $lelongbidder = LelongBidder::where('lelongbid_id',$bid->id)->first(); + $lelongbidder->status_payment =1; + $lelongbidder->save(); + + $lelongbid = LelongBid::where('id',$bid->id)->first(); + $lelongbid->status_jual = 1; + $lelongbid->t_jual = $currentdate; + $lelongbid->hargajual = $lelongbidder->hargabida; + $lelongbid->save(); + } + $response = [ + 'success' => "success", + 'message' => "Bidaan berjaya dibayar" + ]; + + return response()->json($response, 201); + + } } diff --git a/app/Http/Controllers/PaymentController.php b/app/Http/Controllers/PaymentController.php index 9e9c856a..9d90bb43 100644 --- a/app/Http/Controllers/PaymentController.php +++ b/app/Http/Controllers/PaymentController.php @@ -170,6 +170,7 @@ class PaymentController extends Controller $eachbidupdate = LelongBid::where('id',$bid)->first(); $eachbidupdate->status_jual = 1; $eachbidupdate->t_jual = $currentdate; + $eachbidupdate->hargajual = $eachbid->hargabida; $eachbidupdate->save(); } diff --git a/routes/api.php b/routes/api.php index abe36d12..a994ffb5 100644 --- a/routes/api.php +++ b/routes/api.php @@ -35,6 +35,10 @@ Route::post('/feepayment', [ApiController::class, 'feepayment'])->name('feepaym Route::get('/pembayaran/response', [ApiController::class, 'response'])->name('pay.paymentStatus'); Route::get('/pembayaran/backend', [ApiController::class, 'callback'])->name('pay.callback'); + +Route::post('/bidpayment', [ApiController::class, 'bidpayment'])->name('bidpayment'); +Route::get('/pembayaran/bidresponse', [ApiController::class, 'bidresponse'])->name('pay.bidpaymentStatus'); +Route::get('/pembayaran/bidbackend', [ApiController::class, 'bidbackend'])->name('pay.bidcallback'); //Protected routes Route::group(['middleware' => ['auth:sanctum']], function () { @@ -55,10 +59,12 @@ Route::group(['middleware' => ['auth:sanctum']], function () { Route::get('/lelongDetails/today', [LelongMobileController::class, 'getlelongdetails']); Route::get('/lelongDetails/cawangan', [LelongMobileController::class, 'searchLelByCaw']); Route::get('/karat', [LelongMobileController::class, 'getListKarat']); + Route::get('/result/{user_id}', [LelongMobileController::class, 'bidresult']); // Lelong => Bidder Route::post('/bidder/biditem', [LelongMobileController::class, 'bidderSelectBidItem']); Route::get('/bidder/listbiditem', [LelongMobileController::class, 'listBidItem']); + Route::post('/bidder/updatebiditem', [LelongMobileController::class, 'updatebiditem']); });