diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index dc0296b..197434c 100755 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -82,26 +82,36 @@ class UserController extends Controller public function fetchIdentification($user_phone) { // return Identification::where('id_user', $id_user)->firstOrFail(); - $user = User::where('phone', $user_phone)->firstOrFail(); - $identification = Identification::where('id_user', $user->id)->first(); - $data['isIdentified'] = false; - $data['isIdentifiedValidated'] = false; - $data['data'] = $identification; - if($identification){ - $data['isIdentified'] = true; - $data['isIdentifiedValidated'] = $identification->status == 1 ; + $user = User::where('phone', $user_phone)->first(); + if($user){ + $identification = Identification::where('id_user', $user->id)->first(); + $data['isIdentified'] = false; + $data['isIdentifiedValidated'] = false; + $data['data'] = $identification; + if($identification){ + $data['isIdentified'] = true; + $data['isIdentifiedValidated'] = $identification->status == 1 ; + } + return $this->successResponse($data); + }else{ + return $this->errorResponse(trans('errors.user_phone_not_exist'),Response::HTTP_NOT_FOUND); } - return $this->successResponse($data); + } public function verifyIdentification($user_phone) { - $user = User::where('phone', $user_phone)->firstOrFail(); - $identification = Identification::where('id_user', $user->id)->first(); - if($identification){ - return $this->errorResponse(trans('messages.user_identificated')); - }else - return $this->successResponse($user); + $user = User::where('phone', $user_phone)->first(); + if($user){ + $identification = Identification::where('id_user', $user->id)->first(); + if($identification){ + return $this->errorResponse(trans('messages.user_identificated')); + }else + return $this->successResponse($user); + }else{ + return $this->errorResponse(trans('errors.user_phone_not_exist'),Response::HTTP_NOT_FOUND); + } + } private function generateRandomString($length = 10) diff --git a/app/Http/Controllers/iLinkTransactionController.php b/app/Http/Controllers/iLinkTransactionController.php index 8042c2c..3524534 100755 --- a/app/Http/Controllers/iLinkTransactionController.php +++ b/app/Http/Controllers/iLinkTransactionController.php @@ -43,6 +43,7 @@ class iLinkTransactionController extends Controller 'type' => 'required|integer|min:0|not_in:0', 'id_wallet_agent' => 'integer|min:0|not_in:0', 'id_wallet_user' => 'integer|min:0|not_in:0', + 'password'=>'required' ]); $type = TypeIlinkTransaction::findOrFail($request->type); @@ -133,13 +134,15 @@ class iLinkTransactionController extends Controller break; case 14: // Agent - Envoi de cash vers wallet iLink $this->validate($request, $transaction->first_rules()); - $user = User::where('user_code', $request->user_code)->firstOrFail(); - if($this->checkPassword($request->password,$user->encrypted_password,$user->salt)){ + $agent = AgentPlus::findOrFail($network_agent->agent_id); + if($this->checkPassword($request->password,$agent->encrypted_password,$agent->salt)){ + $user = User::where('user_code', $request->user_code)->firstOrFail(); $walletUser = WalletsUser::where('idUser', $user->id)->firstOrFail(); $frais = ($request->init_country != $request->final_country) ? $this->calculateFees($plr_agent_depot_wallet_ilink, $request->montant) : $this->calculateFees($plr_agent_depot_wallet_ilink_national, $request->montant); $taxe = ($request->init_country != $request->final_country) ? $this->calculateTax($taxesInternationales, $frais) : $this->calculateTax($taxesNationales, $frais); $montantDepot = $request->montant - $frais - $taxe; + $transaction->montant_depot = $montantDepot; $walletUser->balance += $montantDepot; $commisionAgent = floatval($frais * $config->taux_com_ag_envoi_cash / 100); $commisionSuper = floatval($frais * $config->taux_com_sup_envoi_cash / 100); @@ -170,100 +173,142 @@ class iLinkTransactionController extends Controller } break; case 15: // Agent - Envoi de cash vers autre wallet - - break; - case 16: // Agent - Envoi de cash vers une carte visa - $this->validate($request, $transaction->card_rules()); - $expiration_date = \DateTime::createFromFormat('m/y', $request->expiration_date); - if (!$expiration_date) - $expiration_date = new \DateTime(); - $transaction->expiration_date = $expiration_date; - - $frais = $request->montant * $config->taux_com_wallet_ag_envoi_cash_carte / 100; - $montantDepot = $transaction->montant - $frais; - - $body['amount'] = $montantDepot; - $body['card_number'] = $request->numero_carte; - $body['cvv'] = $request->cvv; - $body['expiry_date'] = $expiration_date->format('Y-m'); - - $response = $client->post('fund-transfer-api/v1/transaction/push', ['json' => $body]); - $code = $response->getStatusCode(); - - if ($code == 200) { - $banqueCommission = floatval($frais * $config->taux_com_banque_depot_cash_carte / 100); - $transaction->commission_banque = $banqueCommission; - // 2---> Emmètre via API sécurisé SSL une requête de débit de notre - //compte marchand du (Part de la banque partenaire en % - //pour le dépôtqui s’applique sur les frais minimum) et créditer - //le compte des opérations défini avec notre banque - //partenaire - +// $this->validate($request, $transaction->first_rules()); + $agent = AgentPlus::findOrFail($network_agent->agent_id); + if($this->checkPassword($request->password,$agent->encrypted_password,$agent->salt)){ + $frais = ($request->init_country != $request->final_country) ? $this->calculateFees($plr_agent_depot_autre_wallet, $request->montant) : $this->calculateFees($plr_agent_depot_autre_wallet_national, $request->montant); + $taxe = ($request->init_country != $request->final_country) ? $this->calculateTax($taxesInternationales, $frais) : $this->calculateTax($taxesNationales, $frais); + $montantDepot = $request->montant - $frais - $taxe; + $transaction->montant_depot = $montantDepot; + //Emettre une trame securise pour crediter le wallet utilisateur +// $walletUser->balance += $montantDepot; +// $transaction->id_destinataire = r + $commisionAgent = floatval($frais * $config->taux_com_ag_envoi_cash / 100); + $commisionSuper = floatval($frais * $config->taux_com_sup_envoi_cash / 100); + $commisionHyper = floatval($frais * $config->taux_com_hyp_envoi_cash / 100); $walletAgent->balance_princ -= $transaction->montant; - - $agentCommission = floatval($frais * $config->taux_com_ag_depot_cash_carte / 100); - $superviseurCommission = floatval($frais * $config->taux_com_sup_depot_cash_carte / 100); - $hyperviseurCommission = floatval($frais * $config->taux_com_hyp_depot_cash_carte / 100); - - $walletAgent->balance_com += $agentCommission; - $transaction->commission_ag = $agentCommission; - $walletSuperviseur->balance_com += $superviseurCommission; - $transaction->commission_sup = $superviseurCommission; - $walletHyperviseur->balance_com += $hyperviseurCommission; - $transaction->commission_hyp = $hyperviseurCommission; - $transaction->id_wallet_ag = $walletAgent->id; - $transaction->id_wallet_sup = $walletSuperviseur->id; - $transaction->id_wallet_hyp = $walletHyperviseur->id; + $walletAgent->balance_com += $commisionAgent; + $transaction->commission_ag = $commisionAgent; + $walletSuperviseur->balance_com += $commisionSuper; + $transaction->commission_sup = $commisionSuper; + $walletHyperviseur->balance_com += $commisionHyper; + $transaction->commission_hyp = $commisionHyper; + $transaction->taxe = $taxe; $transaction->frais = $frais; $transaction->date = new \DateTime(); + $walletAgent->save(); $walletSuperviseur->save(); $walletHyperviseur->save(); + $transaction->id_wallet_ag = $walletAgent->id; + $transaction->id_wallet_sup = $walletSuperviseur->id; + $transaction->id_wallet_hyp = $walletHyperviseur->id; $transaction->save(); - return $this->successResponse(trans('messages.successful_transaction')); + }else{ + return $this->errorResponse(trans('messages.incorrect_user_password')); + } + break; + case 16: // Agent - Envoi de cash vers une carte visa + $this->validate($request, $transaction->card_rules()); + $agent = AgentPlus::findOrFail($network_agent->agent_id); + if($this->checkPassword($request->password,$agent->encrypted_password,$agent->salt)){ + $expiration_date = \DateTime::createFromFormat('m/y', $request->expiration_date); + if (!$expiration_date) + $expiration_date = new \DateTime(); + $transaction->expiration_date = $expiration_date; - } else { - return $this->errorResponse(trans('errors.visa_api_failed'), Response::HTTP_INTERNAL_SERVER_ERROR); + $frais = $request->montant * $config->taux_com_wallet_ag_envoi_cash_carte / 100; + $montantDepot = $transaction->montant - $frais; + $transaction->montant_depot = $montantDepot; + $body['amount'] = $montantDepot; + $body['card_number'] = $request->numero_carte; + $body['cvv'] = $request->cvv; + $body['expiry_date'] = $expiration_date->format('Y-m'); + + $response = $client->post('fund-transfer-api/v1/transaction/push', ['json' => $body]); + $code = $response->getStatusCode(); + + if ($code == 200) { + $banqueCommission = floatval($frais * $config->taux_com_banque_depot_cash_carte / 100); + $transaction->commission_banque = $banqueCommission; + // 2---> Emmètre via API sécurisé SSL une requête de débit de notre + //compte marchand du (Part de la banque partenaire en % + //pour le dépôtqui s’applique sur les frais minimum) et créditer + //le compte des opérations défini avec notre banque + //partenaire + + $walletAgent->balance_princ -= $transaction->montant; + + $agentCommission = floatval($frais * $config->taux_com_ag_depot_cash_carte / 100); + $superviseurCommission = floatval($frais * $config->taux_com_sup_depot_cash_carte / 100); + $hyperviseurCommission = floatval($frais * $config->taux_com_hyp_depot_cash_carte / 100); + + $walletAgent->balance_com += $agentCommission; + $transaction->commission_ag = $agentCommission; + $walletSuperviseur->balance_com += $superviseurCommission; + $transaction->commission_sup = $superviseurCommission; + $walletHyperviseur->balance_com += $hyperviseurCommission; + $transaction->commission_hyp = $hyperviseurCommission; + $transaction->id_wallet_ag = $walletAgent->id; + $transaction->id_wallet_sup = $walletSuperviseur->id; + $transaction->id_wallet_hyp = $walletHyperviseur->id; + $transaction->frais = $frais; + $transaction->date = new \DateTime(); + $walletAgent->save(); + $walletSuperviseur->save(); + $walletHyperviseur->save(); + $transaction->save(); + return $this->successResponse(trans('messages.successful_transaction')); + + } else { + return $this->errorResponse(trans('errors.visa_api_failed'), Response::HTTP_INTERNAL_SERVER_ERROR); + } + }else{ + return $this->errorResponse(trans('messages.incorrect_user_password')); } break; case 17: // Agent - Envoi de cash vers cash $this->validate($request, $transaction->cash_cash_rules()); + $agent = AgentPlus::findOrFail($network_agent->agent_id); + if($this->checkPassword($request->password,$agent->encrypted_password,$agent->salt)){ + $frais = ($request->init_country != $request->final_country)? $this->calculateFees($plr_agent_cash_cash, $request->montant) : $this->calculateFees($plr_agent_cash_cash_national, $request->montant); + $taxe = ($request->init_country != $request->final_country) ? $this->calculateTax($taxesInternationales , $frais) : $this->calculateTax($taxesNationales ,$frais); + $montantRetrait = $request->montant - $frais - $taxe; + $commisionAgent = floatval( $frais * $config->taux_com_ag_envoi_cash / 100) ; + $commisionSuper = floatval( $frais * $config->taux_com_sup_envoi_cash / 100) ; + $commisionHyper = floatval( $frais * $config->taux_com_hyp_envoi_cash / 100); - $frais = ($request->init_country != $request->final_country)? $this->calculateFees($plr_agent_cash_cash, $request->montant) : $this->calculateFees($plr_agent_cash_cash_national, $request->montant); - $taxe = ($request->init_country != $request->final_country) ? $this->calculateTax($taxesInternationales , $frais) : $this->calculateTax($taxesNationales ,$frais); - $montantRetrait = $request->montant - $frais - $taxe; - $commisionAgent = floatval( $frais * $config->taux_com_ag_envoi_cash / 100) ; - $commisionSuper = floatval( $frais * $config->taux_com_sup_envoi_cash / 100) ; - $commisionHyper = floatval( $frais * $config->taux_com_hyp_envoi_cash / 100); + $transaction->montant_retrait = $montantRetrait; + $walletAgent->balance_com += $commisionAgent; + $transaction->commission_ag = $commisionAgent; + $walletSuperviseur->balance_com += $commisionSuper; + $transaction->commission_sup = $commisionSuper; + $walletHyperviseur->balance_com += $commisionHyper; + $transaction->commission_hyp = $commisionHyper; + $transaction->id_wallet_ag = $walletAgent->id; + $transaction->id_wallet_sup = $walletSuperviseur->id; + $transaction->id_wallet_hyp = $walletHyperviseur->id; - $transaction->montant_retrait = $montantRetrait; - $walletAgent->balance_com += $commisionAgent; - $transaction->commission_ag = $commisionAgent; - $walletSuperviseur->balance_com += $commisionSuper; - $transaction->commission_sup = $commisionSuper; - $walletHyperviseur->balance_com += $commisionHyper; - $transaction->commission_hyp = $commisionHyper; - $transaction->id_wallet_ag = $walletAgent->id; - $transaction->id_wallet_sup = $walletSuperviseur->id; - $transaction->id_wallet_hyp = $walletHyperviseur->id; + $code_retrait = $this->random_string(); + $hash = $this->hashSSHA($code_retrait); + $transaction->encrypted_code_retrait = $hash['encrypted']; + $transaction->code_retrait_salt = $hash['salt']; - $code_retrait = $this->random_string(); - $hash = $this->hashSSHA($code_retrait); - $transaction->encrypted_code_retrait = $hash['encrypted']; - $transaction->code_retrait_salt = $hash['salt']; - - $walletAgent->balance_princ -= $transaction->montant; - $transaction->frais = $frais; - $transaction->taxe = $taxe; - $transaction->date = new \DateTime(); - $transaction->status_retrait = 0; - $walletAgent->save(); - $walletSuperviseur->save(); - $walletHyperviseur->save(); - $transaction->save(); - $this->sendMail($request->email_emetteur, trans('messages.successful_transaction'), trans('messages.successful_send_cash',['montant'=> $montantRetrait, - 'code'=> $code_retrait])); - return $this->successResponse(trans('messages.successful_transaction')); + $walletAgent->balance_princ -= $transaction->montant; + $transaction->frais = $frais; + $transaction->taxe = $taxe; + $transaction->date = new \DateTime(); + $transaction->status_retrait = 0; + $walletAgent->save(); + $walletSuperviseur->save(); + $walletHyperviseur->save(); + $transaction->save(); + $this->sendMail($request->email_emetteur, trans('messages.successful_transaction'), trans('messages.successful_send_cash',['montant'=> $montantRetrait, + 'code'=> $code_retrait])); + return $this->successResponse(trans('messages.successful_transaction')); + }else{ + return $this->errorResponse(trans('messages.incorrect_user_password')); + } break; case 18: // Agent - Envoi de cash vers banque // Indisponible diff --git a/app/Models/WalletIlinkTransaction.php b/app/Models/WalletIlinkTransaction.php index 6cf96d1..1cbcb42 100644 --- a/app/Models/WalletIlinkTransaction.php +++ b/app/Models/WalletIlinkTransaction.php @@ -14,6 +14,7 @@ use Illuminate\Database\Eloquent\Model; * * @property int $id * @property float $montant + * @property float $montant_depot * @property float $montant_retrait * @property string $encrypted_code_retrait * @property string $code_retrait_salt @@ -29,7 +30,7 @@ use Illuminate\Database\Eloquent\Model; * @property string $prenom_emetteur * @property string $email_emetteur * @property string $type_document_emetteur - * @property string $id_type_document_emetteur + * @property string $id_document_emetteur * @property float $frais * @property float $taxe * @property string $numero_carte @@ -63,6 +64,7 @@ class WalletIlinkTransaction extends Model protected $casts = [ 'montant' => 'float', + 'montant_depot' => 'float', 'montant_retrait' => 'float', 'status_retrait' => 'int', 'network_destinataire' => 'int', @@ -89,6 +91,7 @@ class WalletIlinkTransaction extends Model protected $fillable = [ 'montant', + 'montant_depot', 'montant_retrait', 'encrypted_code_retrait', 'code_retrait_salt', @@ -104,7 +107,7 @@ class WalletIlinkTransaction extends Model 'prenom_emetteur', 'email_emetteur', 'type_document_emetteur', - 'id_type_document_emetteur', + 'id_document_emetteur', 'frais', 'taxe', 'numero_carte', @@ -149,7 +152,7 @@ class WalletIlinkTransaction extends Model return $this->belongsTo(Network::class, 'network_destinataire'); } -// Regles de validation + // Regles de validation //Envoi de cash vers wallet iLink public function first_rules() { @@ -158,7 +161,6 @@ class WalletIlinkTransaction extends Model 'init_country' =>'required|integer|min:0|not_in:0', 'final_country' =>'required|integer|min:0|not_in:0', 'montant'=> 'required|numeric|min:0|not_in:0', - 'password'=>'required' ]; } diff --git a/resources/lang/en/errors.php b/resources/lang/en/errors.php index fc46eca..1746906 100755 --- a/resources/lang/en/errors.php +++ b/resources/lang/en/errors.php @@ -8,4 +8,5 @@ return [ 'identification_carried_out' => 'Identification already carried out', 'visa_api_failed'=> 'Request to API visa failed', 'failed_transaction' => 'Failed transaction', + 'user_phone_not_exist' => 'This customer number does not exist', ]; diff --git a/resources/lang/fr/errors.php b/resources/lang/fr/errors.php index 0dc2086..a39c88e 100755 --- a/resources/lang/fr/errors.php +++ b/resources/lang/fr/errors.php @@ -8,4 +8,5 @@ return [ 'identification_carried_out' => 'Identification déjà éffectuée', 'visa_api_failed'=> 'La requete vers l\'api visa a échouée', 'failed_transaction' => 'Transaction échouée', + 'user_phone_not_exist' => 'Ce numéro client n\'existe pas', ];