diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php index bda7588..b5ffe65 100755 --- a/app/Http/Controllers/Controller.php +++ b/app/Http/Controllers/Controller.php @@ -6,7 +6,7 @@ use Laravel\Lumen\Routing\Controller as BaseController; /** * @OA\Info( - * title="Wallet Service API", + * title="Wallet Service Interne API", * version="1.0.0", * @OA\Contact( * email="administrateur@ilink-app.com", diff --git a/app/Http/Controllers/NanoCreditController.php b/app/Http/Controllers/NanoCreditController.php index 0c0b267..df5d183 100755 --- a/app/Http/Controllers/NanoCreditController.php +++ b/app/Http/Controllers/NanoCreditController.php @@ -271,7 +271,7 @@ class NanoCreditController extends Controller * @OA\Parameter( * parameter="id_user", * name="id_user", - * description="ID de l'utilisateur", + * description="ID de l'utilisateur enregistré dans la base de données", * in="path", * required=true, * @OA\Schema( diff --git a/app/Http/Controllers/TransmittingNetworksController.php b/app/Http/Controllers/TransmittingNetworksController.php deleted file mode 100755 index e6c8cfe..0000000 --- a/app/Http/Controllers/TransmittingNetworksController.php +++ /dev/null @@ -1,192 +0,0 @@ -get("limit", 10)); - return ["data" => $users]; - } - - public function receivePayment(Request $request) - { - $this->validate($request, [ - 'type' => 'required|integer|in:1,17', // Les types de transactions possibles à recevoir [1,3,17] - 'montant' => 'required|numeric|min:0|not_in:0', - 'frais' => 'required|numeric|min:0|not_in:0', - 'taxe' => 'required|numeric|min:0|not_in:0', - 'part_reseau_emetteur' => 'required|numeric|min:0|not_in:0', - 'part_reseau_payeur' => 'required|numeric|min:0|not_in:0', - 'montant_commission' => 'required|numeric|min:0|not_in:0', - 'network_emetteur' => 'required|numeric|min:0|not_in:0', - 'network_destinataire' => 'required|numeric|min:0|not_in:0', - 'id_transaction_network_emetteur' => 'required', - ]); - - $configRecipient = ConfigWallet::where('id_network', $request->network_destinataire)->first(); - $configTransmitter = ConfigWallet::where('id_network', $request->network_emetteur)->first(); - - if (!$configRecipient) - return $this->errorResponse(trans('errors.recipient_network_not_configured')); - - if ($configRecipient->type != 'ilink') - return $this->errorResponse(trans('errors.recipient_network_not_authorized')); - - if (!$configTransmitter) - return $this->errorResponse(trans('errors.transmitter_network_not_configured')); - - if ($configTransmitter->type != 'autre') - return $this->errorResponse(trans('errors.transmitter_network_not_authorized')); - - $transmittingNetwork = TransmittingNetwork::where('id_network', $request->network_emetteur)->where('id_configWallet', $configRecipient->id)->first(); - if (!$transmittingNetwork) - return $this->errorResponse(trans('errors.transmitter_network_not_recognized')); - - - $transaction = new WalletIlinkTransaction(); - $transaction->fill($request->all()); - $transaction->id_transaction = $this->getTransactionID(); - $transaction->from_network_emetteur = true; - - //Hyperviseur destinataire - $hyperviseurDestinataire = WalletAgent::where('category', 'hyper')->where('network_id', $request->network_destinataire)->firstOrFail(); - $walletHyper = Wallet::findOrFail($hyperviseurDestinataire->wallet_id); - $transaction->id_wallet_hyp = $walletHyper->id; - $finalNetwork = Network::findOrFail($request->network_destinataire); - $transaction->final_country = $finalNetwork->country->id; - $initNetwork = Network::findOrFail($request->network_emetteur); - $transaction->init_country = $initNetwork->country->id; - $transaction->montant_net = $transaction->montant_net_final_country = $request->montant; - $transaction->part_reseau_payeur_final_country = $transaction->part_reseau_payeur; - $transaction->status_reseau_payeur = 'EN_COURS'; - - switch ($request->type) { - case 1: - $this->validate($request, [ - 'id_destinataire' => 'required', - 'nom_emetteur' => 'required', - 'prenom_emetteur' => 'required', - 'email_emetteur' => 'required', - 'type_document_emetteur' => 'required', - 'id_document_emetteur' => 'required', - 'id_emetteur' => 'required', - ]); - - $destinataire = User::where('user_code', $request->id_destinataire)->first(); - if ($destinataire) { // Si c'est un wallet ilink - if ($destinataire->network->country->id == $finalNetwork->country->id) { - $walletDestinataire = WalletsUser::where('idUser', $destinataire->id)->firstOrFail(); - $walletDestinataire->balance += $request->montant; - $transaction->id_wallet_user = $walletDestinataire->id; - $walletDestinataire->save(); - } else { - return $this->errorResponse(trans('errors.wallet_country_not_match', ['country' => $finalNetwork->country->name])); - } - } else { - return $this->errorResponse(trans('errors.wallet_not_defined')); - } - - - $walletHyper->balance_com += $request->montant_commission; - $walletHyper->save(); - - $transmittingNetwork->balance_compensation += $request->montant; - $transmittingNetwork->balance_com += $request->montant_commission; - $transmittingNetwork->save(); - - $transaction->commission_hyp = $transaction->commission_hyp_final_country = $request->montant_commission; - $transaction->status_reseau_payeur = 'TRAITEE'; - $transaction->date = $this->getCurrentTimeByCountryCode($initNetwork->country->code_country); - $transaction->save(); - - $message = trans('messages.wallet_incoming_payment_message', - ['id_transaction' => $transaction->id_transaction, 'amount' => $this->toMoneyWithNetwork($request->montant, $request->id), - 'sender_name' => $request->nom_emetteur . ' ' . $request->prenom_emetteur, 'init_country' => $initNetwork->country->name, 'sender_code' => $request->id_emetteur, - 'final_country' => $finalNetwork->country->name, 'network' => $initNetwork->name, 'receiver_code' => $request->id_destinataire]); - - $this->sendMail($destinataire->email, trans('messages.wallet_incoming_payment'), $message); - return $this->successResponse(trans('messages.success_treated_demand')); - case 17: - $this->validate($request, [ - 'id_emetteur' => 'required', - 'nom_emetteur' => 'required', - 'prenom_emetteur' => 'required', - 'type_document_emetteur' => 'required', - 'id_document_emetteur' => 'required', - 'email_emetteur' => 'required', - 'nom_destinataire' => 'required', - 'prenom_destinataire' => 'required', - 'type_document_destinataire' => 'required', - 'id_document_destinataire' => 'required', - 'email_destinataire' => 'required', - 'code_retrait' => 'required|size:16' - ]); - - $hash = $this->hashSSHA($request->code_retrait); - $transaction->encrypted_code_retrait = $hash['encrypted']; - $transaction->code_retrait_salt = $hash['salt']; - $transaction->status_retrait = false; - - $transaction->commission_ag = floatval($request->montant_commission * $configRecipient->taux_com_ag_envoi_cash / 100); - $transaction->commission_sup = floatval($request->montant_commission * $configRecipient->taux_com_sup_envoi_cash / 100); - $transaction->commission_hyp = $transaction->commission_hyp_final_country = floatval($request->montant_commission * $configRecipient->taux_com_hyp_envoi_cash / 100); - $transaction->date = $this->getCurrentTimeByCountryCode($initNetwork->country->code_country); - $transaction->save(); - - $message = trans('messages.cash_incoming_payment_message', - ['amount' => $this->toMoneyWithNetwork($request->montant, $request->id), 'id_transaction' => $transaction->id_transaction, - 'sender_name' => $request->nom_emetteur . ' ' . $request->prenom_emetteur, 'receiver_name' => $request->nom_destinataire . ' ' . $request->prenom_destinataire, - 'code' => wordwrap($request->code_retrait, 4, ' ', true), 'init_country' => $initNetwork->country->name, - 'final_country' => $finalNetwork->country->name, 'network' => $initNetwork->name]); - - $this->sendMail($request->email_destinataire, trans('messages.cash_incoming_payment'), $message); - return $this->successResponse(trans('messages.success_treated_demand')); - break; - case 18: - return $this->successResponse(trans('messages.success_treated_demand')); - break; - } - } - - private function getTransactionID() - { - do { - $code = $this->generateTransactionCode(); - $result = collect(DB::select('SELECT * FROM wallet_ilink_transaction WHERE id_transaction = :code', ['code' => $code])); - $codeCorrect = sizeof($result) < 0; - } while ($codeCorrect); - return $code; - } - - -} diff --git a/app/Http/Controllers/WalletController.php b/app/Http/Controllers/WalletController.php index cd4c0f2..af054a1 100755 --- a/app/Http/Controllers/WalletController.php +++ b/app/Http/Controllers/WalletController.php @@ -9,9 +9,11 @@ use App\Models\WalletAgent; use App\Models\WalletsUser; use App\Traits\ApiResponser; use App\Traits\Helper; +use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Http\Response; use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\Log; class WalletController extends Controller { @@ -386,7 +388,7 @@ class WalletController extends Controller * @OA\Parameter( * parameter="id_wallet_network", * name="id_wallet_network", - * description="ID du reseau auquel appartient le wallet", + * description="ID du reseau enregistré dans la base de données auquel appartient le wallet", * in="path", * required=true, * @OA\Schema( @@ -430,7 +432,7 @@ INNER JOIN countries c ON oc.id_country = c.id INNER JOIN type_operators top ON * @OA\Parameter( * parameter="id_wallet_network", * name="id_wallet_network", - * description="ID du reseau auquel appartient le wallet", + * description="ID du reseau enregistré dans la base de données auquel appartient le wallet", * in="path", * required=true, * @OA\Schema( @@ -486,7 +488,7 @@ INNER JOIN countries c ON oc.id_country = c.id INNER JOIN type_operators top ON * @OA\Property(property="id_bank", * type="integer", * example=4, - * description="ID de la banque" + * description="ID de la banque enregistré dans la base de données" * ), * @OA\Property(property="id_wallet_network", * type="integer", @@ -496,7 +498,7 @@ INNER JOIN countries c ON oc.id_country = c.id INNER JOIN type_operators top ON * @OA\Property(property="id_user", * type="integer", * example = 12, - * description="ID de l'utilisateur" + * description="ID de l'utilisateur enregistré dans la base de données" * ) * ) * ) @@ -508,7 +510,7 @@ INNER JOIN countries c ON oc.id_country = c.id INNER JOIN type_operators top ON * ref="#/components/schemas/ApiResponse", * example = { * "status" : 200, - * "response" : "Rattachement de votre compte bancaire effectué", + * "response" : "Votre requête de rattachement de votre compte bancaire a été prise en compte, vous recevrez un mail de confirmation dès lors que la banque aura validé votre code IBAN", * "error":null * } * ) @@ -527,6 +529,14 @@ INNER JOIN countries c ON oc.id_country = c.id INNER JOIN type_operators top ON $user = User::findOrFail($request->id_user); + if (isset($user->iban) && isset($user->id_bank_country)) + return $this->errorResponse(trans('errors.wallet_already_linked_to_bank_account')); + + //Verifier si l'utilisateur est identifié + $identification = $this->checkUserIdentification($user->id); + if ($identification instanceof JsonResponse) + return $identification; + //Verifier si la banque est associée au reseau $network_bank = NetworksOperator::where('id_network', $request->id_wallet_network)->where('id_operator_country', $request->id_bank)->first(); if (!$network_bank) @@ -547,9 +557,16 @@ INNER JOIN countries c ON oc.id_country = c.id INNER JOIN type_operators top ON return $this->errorResponse(trans('errors.bank_not_match_iban')); } - $user->iban = $request->iban; - $user->id_bank_country = $request->id_bank; - $user->save(); + // Envoyer une requete vers la banque contant ses informations personnelles pour verfication du code iban +// dd($identification); + Log::info('-------------------------- User - Rattacher le compte bancaire au wallet ------------------------------------'); + Log::info(array_merge($request->toArray(), $identification->toArray())); + Log::info('------------------------------------------------------------------------------------------------'); + + +// $user->iban = $request->iban; +// $user->id_bank_country = $request->id_bank; +// $user->save(); return $this->successResponse(trans('messages.successful_bank_account_attachment')); } diff --git a/app/Http/Controllers/iLinkTransactionController.php b/app/Http/Controllers/iLinkTransactionController.php index e5bd7f0..3de81bd 100755 --- a/app/Http/Controllers/iLinkTransactionController.php +++ b/app/Http/Controllers/iLinkTransactionController.php @@ -485,12 +485,12 @@ class iLinkTransactionController extends Controller * @OA\Property(property="id_wallet_user", * type="integer", * example=9, - * description="ID du wallet de l'utilisateur" + * description="ID du wallet de l'utilisateur enregistré dans la base de données" * ), * @OA\Property(property="id_wallet_network", * type="integer", * example=101, - * description="ID du reseau auquel appartient le wallet" + * description="ID du reseau enregistré dans la base de données auquel appartient le wallet" * ), * @OA\Property(property="montant", * type="number", @@ -1226,12 +1226,12 @@ class iLinkTransactionController extends Controller * @OA\Property(property="id_wallet_user", * type="integer", * example=9, - * description="ID du wallet de l'agent" + * description="ID du wallet de l'agent enregistré dans la base de données" * ), * @OA\Property(property="id_wallet_network", * type="integer", * example=101, - * description="ID du reseau auquel appartient le wallet" + * description="ID du reseau enregistré dans la base de données auquel appartient le wallet" * ), * @OA\Property(property="iban", * type="string", @@ -1240,7 +1240,7 @@ class iLinkTransactionController extends Controller * @OA\Property(property="id_bank", * type="integer", * example=4, - * description="ID de la banque" + * description="ID de la banque enregistré dans la base de données" * ), * @OA\Property(property="nom_emetteur", * type="string", @@ -1366,12 +1366,12 @@ class iLinkTransactionController extends Controller * @OA\Property(property="id_wallet_user", * type="integer", * example=9, - * description="ID du wallet de l'utilisateur" + * description="ID du wallet de l'utilisateur enregistré dans la base de données" * ), * @OA\Property(property="id_wallet_network", * type="integer", * example=101, - * description="ID du reseau auquel appartient le wallet" + * description="ID du reseau enregistré dans la base de données auquel appartient le wallet" * ), * @OA\Property(property="no_facture", * type="string", @@ -1470,7 +1470,7 @@ class iLinkTransactionController extends Controller * @OA\Property(property="id_wallet_user", * type="integer", * example=9, - * description="ID du wallet de l'utilisateur" + * description="ID du wallet de l'utilisateur enregistré dans la base de données" * ), * @OA\Property(property="montant", * type="number", @@ -1903,17 +1903,6 @@ class iLinkTransactionController extends Controller } - private function checkUserIdentification($id_user) - { - $identification = Identification::where('id_user', $id_user)->first(); - if (isset($identification)) { - if ($identification->status == 0) - return $this->errorResponse(trans('errors.validation_user_identification_required')); - } else { - return $this->errorResponse(trans('errors.user_identification_required')); - } - } - // public function index(Request $request){ // // $notices = DB::select('select notices.id,notices.title,notices.body,notices.created_at,notices.updated_at, diff --git a/app/Traits/Helper.php b/app/Traits/Helper.php index ab52db3..c03c225 100644 --- a/app/Traits/Helper.php +++ b/app/Traits/Helper.php @@ -499,4 +499,18 @@ trait Helper return $date->format('Y-m-d H:i:s'); } + // Verifier l'identification d'un utilisateur à partir de son id + public function checkUserIdentification($id_user) + { + $identification = Identification::where('id_user', $id_user)->first(); + if (isset($identification)) { + if ($identification->status == 0) + return $this->errorResponse(trans('errors.validation_user_identification_required')); + else + return $identification; + } else { + return $this->errorResponse(trans('errors.user_identification_required')); + } + } + } diff --git a/resources/lang/en/errors.php b/resources/lang/en/errors.php index 0949cfd..acd942d 100755 --- a/resources/lang/en/errors.php +++ b/resources/lang/en/errors.php @@ -83,4 +83,5 @@ Paying network : :network :country', "not_matching_operator" => "This operator is not a :type_operator", "wallet_not_linked_to_bank_account" => "Your wallet is not linked to a bank account", "update_banking_information" => "Update your banking information", + "wallet_already_linked_to_bank_account" => "Your wallet is already linked to your bank account", ]; diff --git a/resources/lang/en/messages.php b/resources/lang/en/messages.php index 857e664..8c8b197 100755 --- a/resources/lang/en/messages.php +++ b/resources/lang/en/messages.php @@ -310,4 +310,5 @@ Transaction Information: - Recipient's names : :receiver_name - IBAN of the recipient : :iban - Bank : :bank :country", + 'successful_bank_account_attachment_taken' => 'Your request to link your bank account has been taken into account, you will receive a confirmation email as soon as the bank has validated your IBAN code', ]; diff --git a/resources/lang/fr/errors.php b/resources/lang/fr/errors.php index 550c306..8583f91 100755 --- a/resources/lang/fr/errors.php +++ b/resources/lang/fr/errors.php @@ -83,4 +83,5 @@ Réseau payeur : :network :country', "not_matching_operator" => "Cet opérateur n'est pas un :type_operator", "wallet_not_linked_to_bank_account" => "Votre wallet n'est pas rattaché à un compte bancaire", "update_banking_information" => "Mettez à jour vos informations bancaires", + "wallet_already_linked_to_bank_account" => "Votre wallet est déjà rattaché à votre compte bancaire", ]; diff --git a/resources/lang/fr/messages.php b/resources/lang/fr/messages.php index 8bab0f7..798a146 100755 --- a/resources/lang/fr/messages.php +++ b/resources/lang/fr/messages.php @@ -311,4 +311,5 @@ Informations de la transaction : - Noms du destinataire : :receiver_name - IBAN du destinataire : :iban - Banque : :bank :country", + 'successful_bank_account_attachment_taken' => 'Votre requête de rattachement de votre compte bancaire a été prise en compte, vous recevrez un mail de confirmation dès lors que la banque aura validé votre code IBAN.', ]; diff --git a/routes/web.php b/routes/web.php index 88c0a2f..e630858 100755 --- a/routes/web.php +++ b/routes/web.php @@ -1,5 +1,5 @@ group(['prefix' => '', 'middleware' => 'auth'], function () use ($router) { // Helper routes - $router->post('receivePayment', 'TransmittingNetworksController@receivePayment'); $router->post('update_password', 'UserController@updatePassword'); $router->get('agent_codes/{agent_code}', 'HelperController@agentCodes'); $router->get('countries', 'HelperController@countries');