From 50996ddacd56cdac3a921c8b4303d804bc515cf1 Mon Sep 17 00:00:00 2001 From: Nurmuhammet Allanov Date: Wed, 10 Sep 2025 18:48:09 +0500 Subject: [PATCH] wip --- app/Helpers/helpers.php | 118 +++++++++++++++++- .../Controllers/OnlinePaymentController.php | 18 --- app/Jobs/SendSberToSystem.php | 2 +- app/Jobs/SendVisaToSystem.php | 49 ++++++++ app/Nova/Actions/Sber/SyncWithSystem.php | 2 +- .../VisaMaster/HandlesVisaMasterPayments.php | 2 +- config/logging.php | 7 ++ ...tem_to_visa_master_payment_order_items.php | 28 +++++ 8 files changed, 203 insertions(+), 23 deletions(-) create mode 100644 app/Jobs/SendVisaToSystem.php create mode 100644 database/migrations/2025_09_10_184213_add_synced_with_system_to_visa_master_payment_order_items.php diff --git a/app/Helpers/helpers.php b/app/Helpers/helpers.php index 7398d38..d4c660b 100644 --- a/app/Helpers/helpers.php +++ b/app/Helpers/helpers.php @@ -5,6 +5,7 @@ use App\Models\Payment\OnlinePaymentHistory; use App\Models\System\Roles\Permission; use App\Models\System\Verification; use App\Modules\SberPaymentOrder\Models\SberPaymentOrderItem; +use App\Modules\VisaMasterPaymentOrder\Models\VisaMasterPaymentOrderItem; use App\Nova\Resources\Order\Card\CardTransaction\Actions\DownloadCardTransaction; use GuzzleHttp\Client; use GuzzleHttp\Psr7\Request as GuzzleRequest; @@ -521,7 +522,7 @@ function getSberCredentials(SberPaymentOrderItem $item): array ]; } -function syncWithAzatAPI(SberPaymentOrderItem $orderItem): array +function syncSberWithAzatAPI(SberPaymentOrderItem $orderItem): array { $result = getSberCredentials($orderItem); @@ -572,7 +573,120 @@ function syncWithAzatAPI(SberPaymentOrderItem $orderItem): array $message = 'Error'; if (isset($systemResponse->msgSys)) { - $message .= ' ' . $systemResponse->msgSys; + $message .= ' '.$systemResponse->msgSys; + } + + return [ + 'error' => $message, + 'type' => 'modal', + ]; + } + + $orderItem->update([ + 'synced_with_system' => true, + ]); + + return [ + 'success' => true, + 'type' => 'modal', + ]; +} + +/** + * Get Sber credentials for a given payment item. + * + * @param SberPaymentOrderItem $item + * @return array{username?: string, password?: string, onlinePaymentResource?: OnlinePaymentHistory, relatedResource?: mixed, error?: string, type?: 'danger'|'modal'} + */ +function getVisaCredentials(VisaMasterPaymentOrderItem $item): array +{ + /** @var \App\Models\Payment\OnlinePaymentHistory|null $onlinePaymentResource */ + $onlinePaymentResource = OnlinePaymentHistory::find($item->online_payment_history_id); + + if (! $onlinePaymentResource) { + return ['error' => 'Online payment resource tapylmady', 'type' => 'danger']; + } + + $relatedResource = (new $onlinePaymentResource->online_paymantable_type) + ->find(id: $onlinePaymentResource->online_paymantable_id); + + if (! $relatedResource) { + return ['error' => 'Bu resource tapylmady', 'type' => 'danger']; + } + + $relatedResource->loadMissing(['branch']); + + if (! $relatedResource->branch) { + return ['error' => 'Şahamça bilen birikdirilmedik', 'type' => 'danger']; + } + + $username = $relatedResource->branch->billing_visa_master_username; + $password = $relatedResource->branch->billing_visa_master_password; + + if (empty($username) || empty($password)) { + return ['error' => 'Ulanyjy ady bilen açar sözi gabat gelmedi', 'type' => 'modal']; + } + + return [ + 'username' => $username, + 'password' => $password, + 'onlinePaymentResource' => $onlinePaymentResource, + 'relatedResource' => $relatedResource, + ]; +} + +function syncVisaWithAzatAPI(VisaMasterPaymentOrderItem $orderItem): array +{ + $result = getVisaCredentials($orderItem); + + if (isset($result['error'])) { + return $result; + } + + /** @var \App\Models\Payment\OnlinePaymentHistory $onlinePaymentResource */ + $onlinePaymentResource = $result['onlinePaymentResource']; + + /** @var \App\Modules\VisaMasterPaymentOrder\Models\VisaMasterPaymentOrder $sberPaymentOrder */ + $visaPaymentOrder = $result['relatedResource']; + + $response = checkOnlinePayment($onlinePaymentResource->orderId, $result['username'], $result['password']); + + if ($response['errorCode'] != 0) { + return [ + 'error' => $response['errorMessage'], + 'type' => 'modal', + ]; + } + + $systemRawResponse = syncWithBankSystem( + online_payment_order_uuid: $onlinePaymentResource->orderId, + bank_unique_code: $visaPaymentOrder->branch->unique_code, + online_payment_terminal_id: $response['terminalId'], + user_deposit_account: number_format($visaPaymentOrder->sender_deposit_account, 0, '', ''), + online_payment_auth_ref_num: $response['authRefNum'], + online_payment_tmt_amount: $orderItem->tmt_payment_amount, + pay_purpose: $orderItem->created_at->translatedFormat('F').' '.$orderItem->created_at->format('Y') + ); + + if ($systemRawResponse == null) { + return [ + 'error' => 'Connection issue to SYSTEM', + 'type' => 'modal', + ]; + } + + $systemResponse = json_decode($systemRawResponse); + + $success = false; + if (is_object($systemResponse)) { + $success = $systemResponse->errCode == 0; + } + + if (! $success) { + $message = 'Error'; + + if (isset($systemResponse->msgSys)) { + $message .= ' '.$systemResponse->msgSys; } return [ diff --git a/app/Http/Controllers/OnlinePaymentController.php b/app/Http/Controllers/OnlinePaymentController.php index fb06c78..3e803df 100644 --- a/app/Http/Controllers/OnlinePaymentController.php +++ b/app/Http/Controllers/OnlinePaymentController.php @@ -34,18 +34,6 @@ class OnlinePaymentController extends Controller /** @var \App\Modules\VisaMasterPaymentOrder\Models\VisaMasterPaymentOrderItem */ $resource = $data['resource']; - if ($data['success'] && $paymentHistory && is_array($paymentHistory->api_response)) { - info(OnlinePaymentRepo::syncWithBilling( - uuid: $paymentHistory->orderId, - bank_code: $bank->unique_code, - terminal_id: $paymentHistory->api_response['terminalId'], - account_number: $resource->parent->sender_datas[0]['deposit_account'], - rrn: $paymentHistory->api_response['authRefNum'], - amount: $resource->tmt_payment_amount, - pay_purpose: $resource->created_at->translatedFormat('F').' '.$resource->created_at->format('Y'), - )); - } - return view(OnlinePaymentRepo::statusView(), $data); } @@ -65,12 +53,6 @@ class OnlinePaymentController extends Controller /** @var \App\Modules\SberPaymentOrder\Models\SberPaymentOrderItem */ $resource = $data['resource']; - $response = $data['response']; - - // if ($data['success'] && $paymentHistory) { - // $this->runActions($paymentHistory, $bank, $response, $resource); - // } - return view(OnlinePaymentRepo::statusView(), $data); } } diff --git a/app/Jobs/SendSberToSystem.php b/app/Jobs/SendSberToSystem.php index d19d691..56616aa 100644 --- a/app/Jobs/SendSberToSystem.php +++ b/app/Jobs/SendSberToSystem.php @@ -44,7 +44,7 @@ class SendSberToSystem implements ShouldQueue return; } - $result = syncWithAzatAPI($orderItem); + $result = syncSberWithAzatAPI($orderItem); if (isset($result['error'])) { Log::channel('sber_job')->error(json_encode([ diff --git a/app/Jobs/SendVisaToSystem.php b/app/Jobs/SendVisaToSystem.php new file mode 100644 index 0000000..3ad6bfa --- /dev/null +++ b/app/Jobs/SendVisaToSystem.php @@ -0,0 +1,49 @@ +where('paid', true) + ->where('synced_with_system', false) + ->whereDate('created_at', '>', '2025-09-05') + ->first(); + + if (! $orderItem) { + return; + } + + $result = syncVisaWithAzatAPI($orderItem); + + if (isset($result['error'])) { + Log::channel('visa_job')->error(json_encode([ + 'error' => $result['error'], + 'orderItem' => $orderItem, + ])); + } + } +} diff --git a/app/Nova/Actions/Sber/SyncWithSystem.php b/app/Nova/Actions/Sber/SyncWithSystem.php index 72baba5..642bcca 100644 --- a/app/Nova/Actions/Sber/SyncWithSystem.php +++ b/app/Nova/Actions/Sber/SyncWithSystem.php @@ -34,7 +34,7 @@ class SyncWithSystem extends Action /** @var \App\Modules\SberPaymentOrder\Models\SberPaymentOrderItem $orderItem */ $orderItem = $models->first(); - $result = syncWithAzatAPI($orderItem); + $result = syncSberWithAzatAPI($orderItem); if (isset($result['error'])) { return $this->handleError($result); diff --git a/app/Repos/Payment/VisaMaster/HandlesVisaMasterPayments.php b/app/Repos/Payment/VisaMaster/HandlesVisaMasterPayments.php index 5516ac4..5f6c8bc 100644 --- a/app/Repos/Payment/VisaMaster/HandlesVisaMasterPayments.php +++ b/app/Repos/Payment/VisaMaster/HandlesVisaMasterPayments.php @@ -49,7 +49,7 @@ trait HandlesVisaMasterPayments $payment_status = $response['paymentAmountInfo']['depositedAmount'] > 0; $cardholderName = $response['cardAuthInfo']['cardholderName'] ?? '-'; - $cardPan = $response['cardAuthInfo']['Pan'] ?? '-'; + $cardPan = $response['cardAuthInfo']['pan'] ?? '-'; if ($payment_status) { $resource->update([ diff --git a/config/logging.php b/config/logging.php index d18823c..259f3a3 100644 --- a/config/logging.php +++ b/config/logging.php @@ -168,6 +168,13 @@ return [ 'level' => env('LOG_LEVEL', 'error'), 'replace_placeholders' => true, ], + + 'visa_job' => [ + 'driver' => 'single', + 'path' => storage_path('logs/visa_job.log'), + 'level' => env('LOG_LEVEL', 'error'), + 'replace_placeholders' => true, + ], ], ]; diff --git a/database/migrations/2025_09_10_184213_add_synced_with_system_to_visa_master_payment_order_items.php b/database/migrations/2025_09_10_184213_add_synced_with_system_to_visa_master_payment_order_items.php new file mode 100644 index 0000000..08433b6 --- /dev/null +++ b/database/migrations/2025_09_10_184213_add_synced_with_system_to_visa_master_payment_order_items.php @@ -0,0 +1,28 @@ +boolean('synced_with_system')->nullable()->default(false); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('visa_master_payment_order_items', function (Blueprint $table) { + $table->dropColumn('synced_with_system'); + }); + } +};