diff --git a/app/Http/Controllers/Api/FetchLoanHistoryController.php b/app/Http/Controllers/Api/FetchLoanHistoryController.php index b425364..4d11ee1 100644 --- a/app/Http/Controllers/Api/FetchLoanHistoryController.php +++ b/app/Http/Controllers/Api/FetchLoanHistoryController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers\Api; use App\Http\Controllers\Controller; +use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; class FetchLoanHistoryController extends Controller @@ -10,7 +11,7 @@ class FetchLoanHistoryController extends Controller /** * Fetch loan history */ - public function index(Request $request) + public function index(Request $request): JsonResponse { $request->validate([ 'passport_serie' => ['required', 'string', 'max:255'], @@ -50,10 +51,13 @@ class FetchLoanHistoryController extends Controller curl_close($curl); - return $response; + return response()->json($response); } - public function sampleRequest() + /** + * Sample request for dev mode + */ + public function sampleRequest(): JsonResponse { return response()->json([ 'recipient' => [ diff --git a/app/Http/Controllers/Auth/RegisterController.php b/app/Http/Controllers/Auth/RegisterController.php index 130cf73..d782971 100644 --- a/app/Http/Controllers/Auth/RegisterController.php +++ b/app/Http/Controllers/Auth/RegisterController.php @@ -61,6 +61,7 @@ class RegisterController extends Controller /** * Get a validator for an incoming registration request. * + * @param array $data * @return \Illuminate\Contracts\Validation\Validator */ protected function validator(array $data) @@ -78,6 +79,7 @@ class RegisterController extends Controller /** * Create a new user instance after a valid registration. * + * @param array $data * @return \App\Models\User */ protected function create(array $data) @@ -96,7 +98,7 @@ class RegisterController extends Controller /** * Sms verification */ - public function smsVerification() + public function smsVerification(): View { return view('vendor.nova.pages.sms-verification'); } @@ -104,7 +106,7 @@ class RegisterController extends Controller /** * Verify sms code */ - public function verifySmsCode(Request $request) + public function verifySmsCode(Request $request): \Illuminate\Routing\Redirector|\Illuminate\Http\RedirectResponse { $request->validate([ 'code' => ['required', 'integer', new PhoneCodeVerification(auth()->user()->phone)], diff --git a/app/Http/Controllers/Auth/ResetPasswordController.php b/app/Http/Controllers/Auth/ResetPasswordController.php index 419a51f..f801571 100644 --- a/app/Http/Controllers/Auth/ResetPasswordController.php +++ b/app/Http/Controllers/Auth/ResetPasswordController.php @@ -24,7 +24,7 @@ class ResetPasswordController extends Controller /** * Store new password */ - public function store(Request $request) + public function store(Request $request): JsonResponse { $request->validate([ 'username' => ['required', 'string', 'max:250', 'exists:users,username'], diff --git a/app/Http/Controllers/FetchCardHistoryController.php b/app/Http/Controllers/FetchCardHistoryController.php index 50393c5..5f27a7a 100644 --- a/app/Http/Controllers/FetchCardHistoryController.php +++ b/app/Http/Controllers/FetchCardHistoryController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers; use App\Repos\System\Settings\Legal\PassportRepo; +use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Validation\Rule; @@ -13,7 +14,7 @@ class FetchCardHistoryController extends Controller * * @param Request $request */ - public function index(Request $request) + public function index(Request $request): JsonResponse { $request->validate([ 'passport_serie' => ['required', 'string', Rule::in(array_keys(PassportRepo::values()))], @@ -60,10 +61,13 @@ class FetchCardHistoryController extends Controller curl_close($curl); - return $response; + return response()->json($response); } - public function sampleResponse() + /** + * Sample request + */ + public function sampleResponse(): JsonResponse { return response()->json([ 'idSeria' => 'I-AS', diff --git a/app/Http/Controllers/FetchLoanRemainingController.php b/app/Http/Controllers/FetchLoanRemainingController.php index afe19ee..8d70e17 100644 --- a/app/Http/Controllers/FetchLoanRemainingController.php +++ b/app/Http/Controllers/FetchLoanRemainingController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers; use App\Repos\System\Settings\Legal\PassportRepo; +use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Validation\Rule; @@ -13,7 +14,7 @@ class FetchLoanRemainingController extends Controller * * @param Request $request */ - public function index(Request $request) + public function index(Request $request): JsonResponse { $request->validate([ 'passport_serie' => ['required', 'string', Rule::in(array_keys(PassportRepo::values()))], @@ -57,10 +58,13 @@ class FetchLoanRemainingController extends Controller curl_close($curl); - return $response; + return response()->json($response); } - public function sampleResponse() + /** + * Sample request + */ + public function sampleResponse(): JsonResponse { return response()->json([ 'idSeria' => 'I-AS', diff --git a/app/Http/Controllers/OnlinePaymentController.php b/app/Http/Controllers/OnlinePaymentController.php index 9c5079f..1ee7da3 100644 --- a/app/Http/Controllers/OnlinePaymentController.php +++ b/app/Http/Controllers/OnlinePaymentController.php @@ -3,81 +3,35 @@ namespace App\Http\Controllers; use App\Http\Requests\OnlinePaymentStoreRequest; -use App\Models\Payment\OnlinePaymentHistory; use App\Repos\Payment\OnlinePaymentRepo; -use Illuminate\Support\Facades\Http; -use Illuminate\Support\Facades\Log; +use Illuminate\Contracts\View\View; class OnlinePaymentController extends Controller { /** - * Online payment + * Card online payment */ - public function store(OnlinePaymentStoreRequest $request) + public function store(OnlinePaymentStoreRequest $request): View { - // Find order from history - $paymentHistory = OnlinePaymentHistory::where('orderId', $request->orderId)->first(); - - // Find related resource - $resource = (new $paymentHistory->online_paymantable_type)->find(id: $paymentHistory->online_paymantable_id); - - // If resource could not be found or does not exist, then inform it via logs - if (! $resource) { - Log::channel('halkbank_payment_check_error') - ->error('Related resource not found', [ - 'orderId' => $request->orderId, - 'onlinePaymentHistory_id' => $paymentHistory->id, - 'related_resource' => [ - 'type' => $paymentHistory->online_paymantable_type, - 'id' => $paymentHistory->online_paymantable_id, - ], - ]); - } - - $resource->load('branch'); - - $response = Http::asForm()->post('https://mpi.gov.tm/payment/rest/getOrderStatus.do', [ - 'language' => 'ru', - 'orderId' => $request->orderId, - 'userName' => $resource->branch->billing_username, - 'password' => $resource->branch->billing_password, - ]); - - $payment_status = $response['ErrorCode'] == '0'; - - if ($payment_status) { - $resource->update([ - 'paid' => true, - ]); - - $paymentHistory->update([ - 'paymentStatus' => OnlinePaymentRepo::PAID, - ]); - } else { - $paymentHistory->update([ - 'paymentStatus' => OnlinePaymentRepo::FAILED, - ]); - } - - return view(OnlinePaymentRepo::statusView(), [ - 'success' => $payment_status, - 'title' => $payment_status ? __('Payment is successful') : __('Payment has failed'), - 'pnr' => $paymentHistory->orderNumber, - 'branch_name' => $resource->branch->name, - 'price_amount' => $paymentHistory->amount, - 'return_url' => $resource->panelUrl('index'), - ]); - } - - public function visaMaster(OnlinePaymentStoreRequest $request) - { - $data = OnlinePaymentRepo::checkPaymentVisaMaster($request); - OnlinePaymentRepo::syncWithBilling(); + $data = OnlinePaymentRepo::checkCardOrderPayment($request); return view(OnlinePaymentRepo::statusView(), $data); } - public function sber(OnlinePaymentStoreRequest $request) + /** + * Visa-master online payment + */ + public function visaMaster(OnlinePaymentStoreRequest $request): View + { + $data = OnlinePaymentRepo::checkPaymentVisaMaster($request); + + return view(OnlinePaymentRepo::statusView(), $data); + } + + /** + * Sber online payment + */ + public function sber(OnlinePaymentStoreRequest $request): View { $data = OnlinePaymentRepo::checkPaymentSber($request); diff --git a/app/Repos/Payment/Card/HandlesCardOrderPayments.php b/app/Repos/Payment/Card/HandlesCardOrderPayments.php new file mode 100644 index 0000000..12bf27e --- /dev/null +++ b/app/Repos/Payment/Card/HandlesCardOrderPayments.php @@ -0,0 +1,65 @@ + + */ + public static function checkCardOrderPayment(Request $request): array + { + // Find order from history + $paymentHistory = OnlinePaymentHistory::where('orderId', $request->orderId)->first(); + + // Find related resource + $resource = (new $paymentHistory->online_paymantable_type)->find(id: $paymentHistory->online_paymantable_id); + + // If resource could not be found or does not exist, then inform it via logs + if (! $resource) { + static::logResourceNotFound($request, $paymentHistory); + + return static::resourceNotFound(); + } + + $resource->load('branch'); + + $bank_branch = $resource->branch; + + $response = Http::asForm()->post('https://mpi.gov.tm/payment/rest/getOrderStatus.do', [ + 'language' => 'ru', + 'orderId' => $request->orderId, + 'userName' => $bank_branch->billing_username, + 'password' => $bank_branch->billing_password, + ]); + + $payment_status = $response['ErrorCode'] == '0'; + $returnURL = $resource->panelUrl('index'); + + if ($payment_status) { + $resource->update([ + 'paid' => true, + ]); + + $paymentHistory->update([ + 'paymentStatus' => OnlinePaymentRepo::PAID, + ]); + + return static::successfulPaymentResponse($paymentHistory, $bank_branch, $resource, $returnURL); + } + + $paymentHistory->update([ + 'paymentStatus' => OnlinePaymentRepo::FAILED, + ]); + + return static::failedPaymentResponse($paymentHistory, $bank_branch, $resource, $returnURL); + } +} diff --git a/app/Repos/Payment/OnlinePaymentRepo.php b/app/Repos/Payment/OnlinePaymentRepo.php index 06a4b60..925b195 100644 --- a/app/Repos/Payment/OnlinePaymentRepo.php +++ b/app/Repos/Payment/OnlinePaymentRepo.php @@ -4,6 +4,7 @@ namespace App\Repos\Payment; use App\Models\Payment\OnlinePaymentHistory; use App\Repos\Payment\Billing\HandlesBillingSyncing; +use App\Repos\Payment\Card\HandlesCardOrderPayments; use App\Repos\Payment\Sber\HandlesSberPeyments; use App\Repos\Payment\VisaMaster\HandlesVisaMasterPayments; use Illuminate\Http\Request; @@ -14,6 +15,7 @@ use Laravel\Nova\Makeable; class OnlinePaymentRepo { use HandlesBillingSyncing; + use HandlesCardOrderPayments; use HandlesSberPeyments; use HandlesVisaMasterPayments; use Makeable;