From b55fcaf235adbb4665d220dbc56ca8b20d3924bd Mon Sep 17 00:00:00 2001 From: ivan-sim Date: Thu, 18 Apr 2024 11:24:16 +0700 Subject: [PATCH] Testing callback on server --- .../Http/Controllers/Api/DuitkuController.php | 264 ++++++++++++++++++ Modules/Linksehat/Routes/api.php | 10 +- app/Helpers/Helper.php | 11 +- 3 files changed, 280 insertions(+), 5 deletions(-) create mode 100644 Modules/Linksehat/Http/Controllers/Api/DuitkuController.php diff --git a/Modules/Linksehat/Http/Controllers/Api/DuitkuController.php b/Modules/Linksehat/Http/Controllers/Api/DuitkuController.php new file mode 100644 index 00000000..035cbd1f --- /dev/null +++ b/Modules/Linksehat/Http/Controllers/Api/DuitkuController.php @@ -0,0 +1,264 @@ +setSandboxMode(true); + // set sanitizer (default : true) + $duitkuConfig->setSanitizedMode(false); + // set log parameter (default : true) + $duitkuConfig->setDuitkuLogs(false); + return $duitkuConfig; + } + + public function createInvoice(Request $request) + { + $data = [ + 'paymentMethod' => $request->paymentMethod, + 'paymentAmount' => $request->paymentAmount, + 'email' => $request->email, + 'phoneNumber' => $request->phoneNumber, + 'productDetails' => $request->productDetails, + 'merchantOrderId' => $request->merchantOrderId, + 'additionalParam' => $request->additionalParam, + 'merchantUserInfo' => $request->merchantUserInfo, + 'customerVaName' => $request->customerVaName, + // 'callbackUrl' => $request->callbackUrl, + // 'returnUrl' => $request->returnUrl, + // 'expiryPeriod' => $request->expiryPeriod, + 'firstName' => $request->firstName, + 'lastName' => $request->lastName, + 'alamat' => $request->alamat, + 'city' => $request->city, + 'postalCode' => $request->postalCode, + // 'countryCode' => $request->countryCode + ]; + $validator = Validator::make($request->all(), [ + 'paymentMethod' => 'nullable', + 'paymentAmount' => 'required', + 'email' => 'required|email', + 'phoneNumber' => 'nullable', + 'productDetails' => 'required', + 'merchantOrderId' => 'required', + 'additionalParam' => 'nullable', + 'merchantUserInfo' => 'nullable', + 'customerVaName' => 'required', + // 'callbackUrl' => 'required', + // 'returnUrl' => 'nullable', + // 'expiryPeriod' => 'required', + 'firstName' => 'required', + 'lastName' => 'required', + 'alamat' => 'required', + 'city' => 'required', + 'postalCode' => 'required', + // 'countryCode' => 'required' + + ], [ + 'paymentAmount.required' => 'Jumlah pembayaran harus diisi', + 'email.required' => 'Email harus diisi', + 'email.email' => 'Format email salah', + 'productDetails.required' => 'Judul pembayaran harus diisi', + 'merchantOrderId.required' => 'Order ID harus diisi', + 'customerVaName.required' => 'Nama panggilan pelanggan harus diisi', + 'firstName.required' => 'Nama depan pelanggan harus diisi', + 'lastName.required' => 'Nama belakang pelanggan harus diisi', + 'alamat.required' => 'Alamat pelanggan harus diisi', + 'city.required' => 'Kota pelanggan harus diisi', + 'postalCode.required' => 'Kode pos pelanggan harus diisi', + ]); + + if ($validator->fails()) + { + return Helper::responseJson( + data: $data, + status: 'Bad Request', + statusCode: 400, + message: $validator->errors() + ); + } + else + { + #CONTOH DARI DUITKU + // $paymentMethod = ""; // PaymentMethod list => https://docs.duitku.com/pop/id/#payment-method + // $paymentAmount = 10000; // Amount + // $email = "customer@gmail.com"; // your customer email + // $phoneNumber = "081234567890"; // your customer phone number (optional) + // $productDetails = "Test Payment"; + // $merchantOrderId = "2"; // from merchant, unique + // $additionalParam = ''; // optional + // $merchantUserInfo = ''; // optional + // $customerVaName = 'John Doe'; // display name on bank confirmation display + // $callbackUrl = 'http://YOUR_SERVER/callback'; // url for callback + // $returnUrl = 'http://YOUR_SERVER/return'; // url for redirect + // $expiryPeriod = 60; // set the expired time in minutes + + // // Customer Detail + // $firstName = "John"; + // $lastName = "Doe"; + + // // Address + // $alamat = "Jl. Kembangan Raya"; + // $city = "Jakarta"; + // $postalCode = "11530"; + // $countryCode = "ID"; + + $paymentMethod = $request->paymentMethod; // PaymentMethod list => https://docs.duitku.com/pop/id/#payment-method + $paymentAmount = $request->paymentAmount; // Amount + $email = $request->email; // your customer email + $phoneNumber = $request->phoneNumber; // your customer phone number (optional) + $productDetails = $request->productDetails; + $merchantOrderId = $request->merchantOrderId; // from merchant, unique + $additionalParam = $request->additionalParam; // optional + $merchantUserInfo = $request->merchantUserInfo; // optional + $customerVaName = $request->customerVaName; // display name on bank confirmation display + $callbackUrl = env('APP_URL').'/api/linksehat/callback-duitku'; // url for callback + $returnUrl = ''; // url for redirect + $expiryPeriod = 60; // set the expired time in minutes + + // Customer Detail + $firstName = $request->firstName; + $lastName = $request->lastName; + + // Address + $alamat = $request->alamat; + $city = $request->city; + $postalCode = $request->postalCode; + $countryCode = "ID"; + + $address = array( + 'firstName' => $firstName, + 'lastName' => $lastName, + 'address' => $alamat, + 'city' => $city, + 'postalCode' => $postalCode, + 'phone' => $phoneNumber, + 'countryCode' => $countryCode + ); + + $customerDetail = array( + 'firstName' => $firstName, + 'lastName' => $lastName, + 'email' => $email, + 'phoneNumber' => $phoneNumber, + 'billingAddress' => $address, + 'shippingAddress' => $address + ); + + // Item Details + $item1 = array( + 'name' => $productDetails, + 'price' => $paymentAmount, + 'quantity' => 1 + ); + + $itemDetails = array( + $item1 + ); + + $params = array( + 'paymentAmount' => $paymentAmount, + 'merchantOrderId' => $merchantOrderId, + 'productDetails' => $productDetails, + 'additionalParam' => $additionalParam, + 'merchantUserInfo' => $merchantUserInfo, + 'customerVaName' => $customerVaName, + 'email' => $email, + 'phoneNumber' => $phoneNumber, + 'itemDetails' => $itemDetails, + 'customerDetail' => $customerDetail, + 'callbackUrl' => $callbackUrl, + 'returnUrl' => $returnUrl, + 'expiryPeriod' => $expiryPeriod + ); + $duitkuConfig = $this->configuration(); + try { + // createInvoice Request + $responseDuitkuPop = \Duitku\Pop::createInvoice($params, $duitkuConfig); + + header('Content-Type: application/json'); + echo $responseDuitkuPop; + } catch (Exception $e) { + echo $e->getMessage(); + + } + } + } + + public function paymentMethod(Request $request) + { + $duitkuConfig = $this->configuration(); + try { + $paymentAmount = "10000"; //"YOUR_AMOUNT"; + $paymentMethodList = \Duitku\Pop::getPaymentMethod($paymentAmount, $duitkuConfig); + + header('Content-Type: application/json'); + echo $paymentMethodList; + } catch (Exception $e) { + echo $e->getMessage(); + } + } + + public function checkStatus(Request $request) + { + $duitkuConfig = $this->configuration(); + try { + $merchantOrderId = "2"; + $transactionList = \Duitku\Pop::transactionStatus($merchantOrderId, $duitkuConfig); + + header('Content-Type: application/json'); + $transaction = json_decode($transactionList); + + // var_dump($transactionList); + + if ($transaction->statusCode == "00") { + // Action Success + } else if ($transaction->statusCode == "01") { + // Action Pending + } else { + // Action Failed Or Expired + } + echo $transaction->statusCode; + } catch (Exception $e) { + echo $e->getMessage(); + } + } + + public function callback(Request $request) + { + $duitkuConfig = $this->configuration(); + try { + $callback = \Duitku\Pop::callback($duitkuConfig); + + header('Content-Type: application/json'); + $notif = json_decode($callback); + + // var_dump($callback); + + if ($notif->resultCode == "00") { + // Action Success + } else if ($notif->resultCode == "01") { + // Action Failed + } + } catch (Exception $e) { + http_response_code(400); + echo $e->getMessage(); + } + } +} diff --git a/Modules/Linksehat/Routes/api.php b/Modules/Linksehat/Routes/api.php index 8dfff2f5..9a4aaed8 100644 --- a/Modules/Linksehat/Routes/api.php +++ b/Modules/Linksehat/Routes/api.php @@ -5,6 +5,7 @@ use Modules\Linksehat\Http\Controllers\Api\AuthController; use Modules\Linksehat\Http\Controllers\Api\DashboardController; use Modules\Linksehat\Http\Controllers\Api\AutocompleteController; use Modules\Linksehat\Http\Controllers\Api\DoctorController; +use Modules\Linksehat\Http\Controllers\Api\DuitkuController; use Modules\Linksehat\Http\Controllers\Api\HospitalController; use Modules\Linksehat\Http\Controllers\Api\NotificationTokenController; use Modules\Linksehat\Http\Controllers\Api\PersonController; @@ -89,5 +90,12 @@ Route::prefix('linksehat')->group(function () { Route::get('card/{member_id}', [LinkingController::class, 'card']); Route::get('card/{member_id}/{log_id}', [LinkingController::class, 'card_detail']); + + }); -}); + + Route::post('create-invoice-duitku', [DuitkuController::class, 'createInvoice']); + Route::post('payment-method-duitku', [DuitkuController::class, 'paymentMethod']); + Route::post('check-status-duitku', [DuitkuController::class, 'checkStatus']); + Route::post('callback-duitku', [DuitkuController::class, 'callback']); +;}); diff --git a/app/Helpers/Helper.php b/app/Helpers/Helper.php index 12892c3d..6643d50b 100644 --- a/app/Helpers/Helper.php +++ b/app/Helpers/Helper.php @@ -105,7 +105,7 @@ class Helper } else { return 'User not found.'; } - + } public static function serviceName($code) @@ -269,11 +269,14 @@ class Helper * * @param array|object $data * @param int $statusCode - * @param string $message + * @param string|array|object $message * @return JsonResponse */ - public static function responseJson(array|object $data = [], string $status = 'success', int $statusCode = Response::HTTP_OK, string $message = 'Data berhasil di ambil'): JsonResponse + public static function responseJson(array|object $data = [], string $status = 'success', int $statusCode = Response::HTTP_OK, string|array|object $message = 'Data berhasil di ambil'): JsonResponse { + if ($message instanceof \Illuminate\Support\MessageBag) { + $message = $message->first(); + } return response()->json([ 'status' => $status, 'statusCode' => $statusCode, @@ -450,7 +453,7 @@ class Helper } } else { // throw new ImportRowException(__('Format Date Invalid'), 0, null, $date_from_row); - return null; + return null; } }