diff --git a/app/Http/Controllers/ExampleController.php b/app/Http/Controllers/ExampleController.php deleted file mode 100755 index aab066e..0000000 --- a/app/Http/Controllers/ExampleController.php +++ /dev/null @@ -1,18 +0,0 @@ -successResponse($countries); + } +} diff --git a/app/Http/Controllers/TransactionController.php b/app/Http/Controllers/TransactionController.php index 93aaedc..b5fd3d6 100755 --- a/app/Http/Controllers/TransactionController.php +++ b/app/Http/Controllers/TransactionController.php @@ -110,6 +110,8 @@ class TransactionController extends Controller $transaction->id_wallet_hyp = $walletHyperviseur->id; $transaction->commission_hyp = $hyperviseurCommission; $transaction->commission_ag = $agentCommission; + }else{ + return $this->errorResponse(trans('errors.visa_api_failed'),Response::HTTP_INTERNAL_SERVER_ERROR); } // }else{ @@ -165,6 +167,8 @@ class TransactionController extends Controller $transaction->id_wallet_hyp = $walletHyperviseur->id; $transaction->commission_hyp = $hyperviseurCommission; $transaction->commission_ag = $agentCommission; + }else{ + return $this->errorResponse(trans('errors.visa_api_failed'),Response::HTTP_INTERNAL_SERVER_ERROR); } } @@ -175,7 +179,7 @@ class TransactionController extends Controller $walletSuperviseur->save(); $walletHyperviseur->save(); $transaction->save(); - return $this->successResponse($walletAgent); + return $this->successResponse(trans('messages.successful_transaction')); } public function lastTransactions($id_wallet) diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index 496436c..a0e4ff7 100755 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -6,6 +6,7 @@ namespace App\Http\Controllers; use App\Models\Identification; use App\Models\User; use App\Traits\ApiResponser; +use App\Traits\Helper; use Illuminate\Http\Request; use Illuminate\Http\Response; use Illuminate\Support\Facades\Date; @@ -14,7 +15,7 @@ use Illuminate\Support\Facades\Mail; class UserController extends Controller { use ApiResponser; - + use Helper; /** * Create a new controller instance. * @@ -181,13 +182,4 @@ class UserController extends Controller return $destination; } - private function sendMail($email , $title , $messageText){ - - $recipients = [$email]; - Mail::mailer('smtp')->raw($messageText, function ($message) use ($recipients,$title) { - $message->subject($title); - $message->to($recipients); - }); -// return $this->successResponse("mail envoye"); - } } diff --git a/app/Http/Controllers/iLinkTransactionController.php b/app/Http/Controllers/iLinkTransactionController.php new file mode 100755 index 0000000..7807a57 --- /dev/null +++ b/app/Http/Controllers/iLinkTransactionController.php @@ -0,0 +1,334 @@ +validate($request, [ + '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', + ]); + $type = TypeIlinkTransaction::findOrFail($request->type); + + $walletAgent = Wallet::findOrFail($request->get('id_wallet_agent')); + $network_agent = NetworksAgent::findOrFail($walletAgent->id_networkAgent); + // Configuratrion du wallet + $config = ConfigWallet::where('id_network', $network_agent->network_id)->firstOrFail(); + + // Recuperation des wallets hyperviseur et superviseur + $codeGenerer = CodeGenerer::findOrFail($network_agent->codeGenerer_id); + $superviseur = AgentPlus::where('code_membre', $codeGenerer->code_parrain)->firstOrFail(); + $hyperviseur = AgentPlus::where('code_membre', $superviseur->code_parrain)->firstOrFail(); + + $wallet_agent_sup = WalletAgent::where('agent_id', $superviseur->id)->firstOrFail(); + $wallet_agent_hyp = WalletAgent::where('agent_id', $hyperviseur->id)->firstOrFail(); + $walletSuperviseur = Wallet::findOrFail($wallet_agent_sup->wallet_id); + $walletHyperviseur = Wallet::findOrFail($wallet_agent_hyp->wallet_id); + + $taxesNationales = array_values(array_filter($config->taxes->all(), function ($tax) { + return $tax->destination == 'national'; + })); + + $taxesInternationales = array_values(array_filter($config->taxes->all(), function ($tax) { + return $tax->destination == 'international'; + })); + + + $plr_user_wallet_wallet = $this->getPaliers($config->paliers_config_wallets->all(), "user_wallet_wallet_international"); + $plr_user_wallet_cash = $this->getPaliers($config->paliers_config_wallets->all(), "user_wallet_cash_international"); + $plr_agent_depot_wallet_ilink = $this->getPaliers($config->paliers_config_wallets->all(), "agent_depot_wallet_ilink_international"); + $plr_agent_depot_autre_wallet = $this->getPaliers($config->paliers_config_wallets->all(), "agent_depot_autre_wallet_international"); + $plr_agent_cash_cash = $this->getPaliers($config->paliers_config_wallets->all(), "agent_cash_cash_international"); + + $plr_user_wallet_wallet_national = $this->getPaliers($config->paliers_config_wallets->all(), "user_wallet_wallet_national"); + $plr_user_wallet_cash_national = $this->getPaliers($config->paliers_config_wallets->all(), "user_wallet_cash_national"); + $plr_agent_depot_wallet_ilink_national = $this->getPaliers($config->paliers_config_wallets->all(), "agent_depot_wallet_ilink_national"); + $plr_agent_depot_autre_wallet_national = $this->getPaliers($config->paliers_config_wallets->all(), "agent_depot_autre_wallet_national"); + $plr_agent_cash_cash_national = $this->getPaliers($config->paliers_config_wallets->all(), "agent_cash_cash_national"); + + + $data = $request->all(); + if (isset($request->cvv) && !is_numeric($request->cvv)) + return $this->errorResponse('errors.invalid_cvv'); + + $transaction->fill($data); + // Client API + $client = new \GuzzleHttp\Client([ + 'base_uri' => env('VISA_API_URL'), + 'auth' => [env('VISA_API_USERNAME'), env('VISA_API_PASSWORD')] + ]); + + switch ($type->id) { + case 1: //User - Envoi wallet à wallet + + break; + case 2: //User - Envoi de wallet à carte + + break; + case 3: //User - Envoi de wallet à cash + + break; + case 4: //User - Envoi de wallet à banque + // Non disponible + //Pas de taxes + break; +// case 5: //User - Envoi de carte à wallet +// $frais =$montant * $config->taux_com_user_carte_wallet / 100; +//// $taxe = ($init_country != $final_country) ? $this->calculateTax($taxesInternationales , $frais) : $this->calculateTax($taxesNationales ,$frais); +// break; +// case 6: //User - Envoi de carte à cash +// $frais =$montant * $config->taux_com_user_carte_cash / 100; +//// $taxe = ($init_country != $final_country) ? $this->calculateTax($taxesInternationales , $frais) : $this->calculateTax($taxesNationales ,$frais); +// break; + case 9: // User - Retrait de wallet en cash + + break; + case 10: //User - Retrait de carte vers wallet + + break; + case 11: // User - Retrait de carte vers cash + + break; + case 12: // Agent - Retrait en cash + + break; + case 13: // Agent - Retrait de la carte vers cash + + 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)){ + $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; + $walletUser->balance += $montantDepot; + $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_ag_envoi_cash / 100); + $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(); + $walletUser->save(); + $walletAgent->save(); + $walletSuperviseur->save(); + $walletHyperviseur->save(); + $transaction->id_wallet_user = $walletUser->id; + $transaction->id_wallet_ag = $walletAgent->id; + $transaction->id_wallet_sup = $walletSuperviseur->id; + $transaction->id_wallet_hyp = $walletHyperviseur->id; + $transaction->save(); + $this->sendMail($user->email, trans('messages.successful_transaction'), trans('messages.successful_deposit_ilink',['montant'=> $montantDepot])); + return $this->successResponse(trans('messages.successful_transaction')); + }else{ + return $this->errorResponse(trans('messages.incorrect_user_password')); + } + 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 + + $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(); + $transaction->save(); + return $this->successResponse(trans('messages.successful_transaction')); + + } else { + return $this->errorResponse(trans('errors.visa_api_failed'), Response::HTTP_INTERNAL_SERVER_ERROR); + } + break; + case 17: // Agent - Envoi de cash vers cash + + break; + case 18: // Agent - Envoi de cash vers banque + // Indisponible + break; + } + + } + + public function lastTransactions($id_wallet) + { + $transactions = WalletTransaction::where('id_wallet', $id_wallet)->orderBy('date', 'desc')->limit(10) + ->get(['type', DB::raw('\'wallet\' as source'), 'montant', 'numCarte AS destinataire', 'date', 'id']); + return $this->successResponse($transactions); + } + + public function calculateCommission(Request $request) + { + $rules = [ + 'id_wallet' => 'required|integer|min:1', + 'montant' => 'required|numeric|min:0|not_in:0', + 'type' => 'required|in:credit,debit', + ]; + + $this->validate($request, $rules); + + $walletAgent = Wallet::findOrFail($request->get('id_wallet')); + $network_agent = NetworksAgent::findOrFail($walletAgent->id_networkAgent); + // Configuratrion du wallet + $config = ConfigWallet::where('id_network', $network_agent->network_id)->firstOrFail(); + $commission = null; + if ($request->type == 'credit') { + //Depot + $commission = ($request->montant * $config->taux_com_client_depot / 100) + $config->frais_min_banque_depot; + $data['montant_calcule'] = $request->montant - $commission; + } elseif ($request->type == 'debit') { + // Retrait + $commission = $request->montant * $config->taux_com_client_retrait / 100; + $data['montant_calcule'] = $request->montant + $commission; + } + + $data['commission'] = $commission; + return $this->successResponse($data); + } + + + private function getPaliers(array $paliers, $type) + { + return array_values(array_filter($paliers, function ($palier) use ($type) { + return $palier->type == $type; + })); + } + + //Calcul des frais internationaux + private function calculateFees(array $paliers, $montant) + { + $size = sizeof($paliers); + + $min = $paliers[0]->min; + $max = $size > 0 ? $paliers[$size - 1]->max : 0; + $palier = null; + foreach ($paliers as $p) { + if ($montant >= $p->min && $montant <= $p->max) { + $palier = $p; + break; + } + } + + if ($palier) { + return (($palier->min + $palier->max) / 2 * $palier->taux / 100); + } else { + if ($montant < $min) + return $min * $paliers[0]->taux / 100; + else if ($montant > $max) + return $max * $paliers[$size - 1]->taux / 100; + } + } + + +//Calcul des taxes + private function calculateTax(array $taxes, $frais) + { + $sommeTaux = 0; + $sommeFixe = 0; + foreach ($taxes as $tax) { + if ($tax->type == '%') + $sommeTaux += $tax->valeur; + + if ($tax->type == 'fixe') + $sommeFixe += $tax->valeur; + } + return ($frais * $sommeTaux / 100) + $sommeFixe; + } + + private function random_string() + { + $character_set_array = array(); + $character_set_array[] = array('count' => 12, 'characters' => 'abcdefghjkmnpqrstuvwxyz'); + $character_set_array[] = array('count' => 4, 'characters' => '23456789'); + $temp_array = array(); + foreach ($character_set_array as $character_set) { + for ($i = 0; $i < $character_set['count']; $i++) { + $temp_array[] = $character_set['characters'][rand(0, strlen($character_set['characters']) - 1)]; + } + } + shuffle($temp_array); + return implode('', $temp_array); + } +} diff --git a/app/Models/ConfigWallet.php b/app/Models/ConfigWallet.php index 71bdb24..ba498d9 100755 --- a/app/Models/ConfigWallet.php +++ b/app/Models/ConfigWallet.php @@ -6,24 +6,50 @@ namespace App\Models; +use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Model; /** * Class ConfigWallet - * + * * @property int $id * @property float $taux_com_client_retrait * @property float $taux_com_client_depot * @property float $taux_com_ag_retrait * @property float $taux_com_ag_depot - * @property float $taux_com_sup_retrait * @property float $taux_com_sup_depot + * @property float $taux_com_sup_retrait * @property float $part_banque_retrait * @property float $part_banque_depot * @property float $frais_min_banque_depot * @property int $id_network - * + * @property float $taux_com_user_wallet_carte + * @property float $taux_com_user_carte_wallet + * @property float $taux_com_user_carte_cash + * @property float $taux_com_wallet_ag_envoi_cash_carte + * @property float $taux_com_wallet_ag_carte_cash + * @property float $taux_com_wallet_ag_depot_carte + * @property float $taux_com_ag_envoi_cash + * @property float $taux_com_sup_envoi_cash + * @property float $taux_com_hyp_envoi_cash + * @property float $taux_com_ag_retrait_cash + * @property float $taux_com_sup_retrait_cash + * @property float $taux_com_hyp_retrait_cash + * @property float $taux_com_ag_depot_cash_carte + * @property float $taux_com_sup_depot_cash_carte + * @property float $taux_com_hyp_depot_cash_carte + * @property float $taux_com_banque_depot_cash_carte + * @property float $taux_com_ag_retrait_carte_cash + * @property float $taux_com_sup_retrait_carte_cash + * @property float $taux_com_hyp_retrait_carte_cash + * @property float $taux_com_banque_retrait_carte_cash + * @property float $taux_com_hyp_retrait_carte_cash_ilink + * @property float $taux_com_banque_retrait_carte_cash_ilink + * @property string $type + * * @property Network $network + * @property Collection|PaliersConfigWallet[] $paliers_config_wallets + * @property Collection|Tax[] $taxes * * @package App\Models */ @@ -34,27 +60,87 @@ class ConfigWallet extends Model protected $casts = [ 'taux_com_client_retrait' => 'float', - 'taux_com_client_depot' => 'float', + 'taux_com_client_depot' => 'float', 'taux_com_ag_retrait' => 'float', - 'taux_com_ag_depot' => 'float', - 'taux_com_sup_retrait' => 'float', - 'taux_com_sup_depot' => 'float', + 'taux_com_ag_depot' => 'float', + 'taux_com_sup_depot' => 'float', + 'taux_com_sup_retrait' => 'float', 'part_banque_retrait' => 'float', 'part_banque_depot' => 'float', - 'frais_min_banque_depot' => 'float', - 'id_network' => 'int' + 'frais_min_banque_depot' => 'float', + 'id_network' => 'int', + 'taux_com_user_wallet_carte' => 'float', + 'taux_com_user_carte_wallet' => 'float', + 'taux_com_user_carte_cash' => 'float', + 'taux_com_wallet_ag_envoi_cash_carte' => 'float', + 'taux_com_wallet_ag_carte_cash' => 'float', + 'taux_com_wallet_ag_depot_carte' => 'float', + 'taux_com_ag_envoi_cash' => 'float', + 'taux_com_sup_envoi_cash' => 'float', + 'taux_com_hyp_envoi_cash' => 'float', + 'taux_com_ag_retrait_cash' => 'float', + 'taux_com_sup_retrait_cash' => 'float', + 'taux_com_hyp_retrait_cash' => 'float', + 'taux_com_ag_depot_cash_carte' => 'float', + 'taux_com_sup_depot_cash_carte' => 'float', + 'taux_com_hyp_depot_cash_carte' => 'float', + 'taux_com_banque_depot_cash_carte' => 'float', + 'taux_com_ag_retrait_carte_cash' => 'float', + 'taux_com_sup_retrait_carte_cash' => 'float', + 'taux_com_hyp_retrait_carte_cash' => 'float', + 'taux_com_banque_retrait_carte_cash' => 'float', + 'taux_com_hyp_retrait_carte_cash_ilink' => 'float', + 'taux_com_banque_retrait_carte_cash_ilink' => 'float' ]; protected $fillable = [ - 'taux_com_retrait', + 'taux_com_client_retrait', + 'taux_com_client_depot', 'taux_com_ag_retrait', - 'com_depot', 'taux_com_ag_depot', - 'id_network' + 'taux_com_sup_depot', + 'taux_com_sup_retrait', + 'part_banque_retrait', + 'part_banque_depot', + 'frais_min_banque_depot', + 'id_network', + 'taux_com_user_wallet_carte', + 'taux_com_user_carte_wallet', + 'taux_com_user_carte_cash', + 'taux_com_wallet_ag_envoi_cash_carte', + 'taux_com_wallet_ag_carte_cash', + 'taux_com_wallet_ag_depot_carte', + 'taux_com_ag_envoi_cash', + 'taux_com_sup_envoi_cash', + 'taux_com_hyp_envoi_cash', + 'taux_com_ag_retrait_cash', + 'taux_com_sup_retrait_cash', + 'taux_com_hyp_retrait_cash', + 'taux_com_ag_depot_cash_carte', + 'taux_com_sup_depot_cash_carte', + 'taux_com_hyp_depot_cash_carte', + 'taux_com_banque_depot_cash_carte', + 'taux_com_ag_retrait_carte_cash', + 'taux_com_sup_retrait_carte_cash', + 'taux_com_hyp_retrait_carte_cash', + 'taux_com_banque_retrait_carte_cash', + 'taux_com_hyp_retrait_carte_cash_ilink', + 'taux_com_banque_retrait_carte_cash_ilink', + 'type' ]; public function network() { return $this->belongsTo(Network::class, 'id_network'); } + + public function paliers_config_wallets() + { + return $this->hasMany(PaliersConfigWallet::class, 'idConfig'); + } + + public function taxes() + { + return $this->hasMany(Tax::class, 'idConfig'); + } } diff --git a/app/Models/PaliersConfigWallet.php b/app/Models/PaliersConfigWallet.php new file mode 100644 index 0000000..388bf30 --- /dev/null +++ b/app/Models/PaliersConfigWallet.php @@ -0,0 +1,49 @@ + 'float', + 'max' => 'float', + 'taux' => 'float', + 'idConfig' => 'int' + ]; + + protected $fillable = [ + 'type', + 'min', + 'max', + 'taux', + 'idConfig' + ]; + + public function config_wallet() + { + return $this->belongsTo(ConfigWallet::class, 'idConfig'); + } +} diff --git a/app/Models/Tax.php b/app/Models/Tax.php new file mode 100644 index 0000000..383093a --- /dev/null +++ b/app/Models/Tax.php @@ -0,0 +1,47 @@ + 'float', + 'idConfig' => 'int' + ]; + + protected $fillable = [ + 'nom', + 'type', + 'valeur', + 'destination', + 'idConfig' + ]; + + public function config_wallet() + { + return $this->belongsTo(ConfigWallet::class, 'idConfig'); + } +} diff --git a/app/Models/TypeIlinkTransaction.php b/app/Models/TypeIlinkTransaction.php new file mode 100644 index 0000000..c3a8ccf --- /dev/null +++ b/app/Models/TypeIlinkTransaction.php @@ -0,0 +1,37 @@ +hasMany(WalletIlinkTransaction::class, 'type'); + } +} diff --git a/app/Models/WalletIlinkTransaction.php b/app/Models/WalletIlinkTransaction.php new file mode 100644 index 0000000..ba7d2bb --- /dev/null +++ b/app/Models/WalletIlinkTransaction.php @@ -0,0 +1,166 @@ + 'float', + 'montant_retrait' => 'float', + 'status_retrait' => 'int', + 'network_destinataire' => 'int', + 'frais' => 'float', + 'taxe' => 'float', + 'init_country' => 'int', + 'final_country' => 'int', + 'commission_banque' => 'float', + 'commission_ag' => 'float', + 'commission_sup' => 'float', + 'commission_hyp' => 'float', + 'id_wallet_user' => 'int', + 'id_wallet_ag' => 'int', + 'id_wallet_sup' => 'int', + 'id_wallet_hyp' => 'int', + 'canceled' => 'int', + 'type' => 'int' + ]; + + protected $dates = [ + 'expiration_date', + 'date' + ]; + + protected $fillable = [ + 'montant', + 'montant_retrait', + 'code_retrait', + 'status_retrait', + 'id_destinataire', + 'type_id_destinataire', + 'network_destinataire', + 'type_document_destinataire', + 'id_document_destinataire', + 'nom_destinataire', + 'prenom_destinataire', + 'nom_emetteur', + 'prenom_emetteur', + 'frais', + 'taxe', + 'numero_carte', + 'expiration_date', + 'init_country', + 'final_country', + 'commission_banque', + 'commission_ag', + 'commission_sup', + 'commission_hyp', + 'id_wallet_user', + 'id_wallet_ag', + 'id_wallet_sup', + 'id_wallet_hyp', + 'canceled', + 'type', + 'date' + ]; + + public function country() + { + return $this->belongsTo(Country::class, 'final_country'); + } + + public function wallet() + { + return $this->belongsTo(Wallet::class, 'id_wallet_sup'); + } + + public function wallets_user() + { + return $this->belongsTo(WalletsUser::class, 'id_wallet_user'); + } + + public function type_ilink_transaction() + { + return $this->belongsTo(TypeIlinkTransaction::class, 'type'); + } + + public function network() + { + return $this->belongsTo(Network::class, 'network_destinataire'); + } + + // Regles de validation + //Envoi de cash vers wallet iLink + public function first_rules() + { + return [ + 'user_code'=>'required', + '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' + ]; + } + + public function card_rules() + { + return [ + 'montant'=> 'required|numeric|min:0|not_in:0', + 'numero_carte'=>'required', + 'cvv'=>'required_if:facade,front|size:3', + 'expiration_date'=>'required_if:facade,front|date_format:m/y|after_or_equal:today', + ]; + } +} diff --git a/app/Models/WalletsUser.php b/app/Models/WalletsUser.php index 24e34f6..7cce251 100644 --- a/app/Models/WalletsUser.php +++ b/app/Models/WalletsUser.php @@ -7,6 +7,7 @@ namespace App\Models; use Carbon\Carbon; +use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Model; /** @@ -18,6 +19,7 @@ use Illuminate\Database\Eloquent\Model; * @property int $idUser * * @property User $user + * @property Collection|WalletIlinkTransaction[] $wallet_ilink_transactions * * @package App\Models */ @@ -45,4 +47,9 @@ class WalletsUser extends Model { return $this->belongsTo(User::class, 'idUser'); } + + public function wallet_ilink_transactions() + { + return $this->hasMany(WalletIlinkTransaction::class, 'id_wallet_user'); + } } diff --git a/app/Traits/Helper.php b/app/Traits/Helper.php new file mode 100644 index 0000000..dc72672 --- /dev/null +++ b/app/Traits/Helper.php @@ -0,0 +1,26 @@ +raw($messageText, function ($message) use ($recipients,$title) { + $message->subject($title); + $message->to($recipients); + }); +// return $this->successResponse("mail envoye"); + } + + public function checkPassword($password , $encrypted_password , $salt) + { + $encrypted_password_to_check = base64_encode(sha1($password . $salt, true) . $salt); + return $encrypted_password_to_check == $encrypted_password; + } +} diff --git a/resources/lang/en/errors.php b/resources/lang/en/errors.php index 9eca328..fc46eca 100755 --- a/resources/lang/en/errors.php +++ b/resources/lang/en/errors.php @@ -5,5 +5,7 @@ return [ 'service_unavailable' => 'Service unavailable', 'invalid_cvv' => 'Invalid CVV', 'compression_failed' => 'Image compression failed!', - 'identification_carried_out' => 'Identification already carried out' + 'identification_carried_out' => 'Identification already carried out', + 'visa_api_failed'=> 'Request to API visa failed', + 'failed_transaction' => 'Failed transaction', ]; diff --git a/resources/lang/en/messages.php b/resources/lang/en/messages.php index a9dd35b..1c5887b 100755 --- a/resources/lang/en/messages.php +++ b/resources/lang/en/messages.php @@ -8,6 +8,8 @@ return [ 'success_treated_demand' => 'Request successfully processed', 'canceled_credit_request' => 'Canceled credit request', 'canceled_transaction' => 'Canceled transaction', + 'successful_transaction' => 'Successful transaction', + 'incorrect_user_password' => 'Incorrect user password', 'successful_identification'=>'User :name has been successfully identified.', 'user_identificated' => 'User already identificated', 'user_not_identificated' => 'User is not identificated', @@ -25,5 +27,6 @@ You can now use all iLink World services. Welcome to the iLink World family !!! Regards, -ILinkWorld team.' +ILinkWorld team.', + 'successful_deposit_ilink' => 'Your ilink account has been reloaded with :montant' ]; diff --git a/resources/lang/fr/errors.php b/resources/lang/fr/errors.php index 8d83fd7..0dc2086 100755 --- a/resources/lang/fr/errors.php +++ b/resources/lang/fr/errors.php @@ -5,5 +5,7 @@ return [ 'service_unavailable' => 'Service non disponible', 'invalid_cvv' => 'CVV invalide', 'compression_failed' => 'Échec de la compression d\'image', - 'identification_carried_out' => 'Identification déjà éffectuée' + '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', ]; diff --git a/resources/lang/fr/messages.php b/resources/lang/fr/messages.php index c9a3bc1..016f17e 100755 --- a/resources/lang/fr/messages.php +++ b/resources/lang/fr/messages.php @@ -8,6 +8,8 @@ return [ 'success_treated_demand' => 'Demande traitée avec succès', 'canceled_credit_request' => 'Demande de crédit annulée', 'canceled_transaction' => 'Transaction annulée', + 'successful_transaction' => 'Transaction réussie', + 'incorrect_user_password' => 'Mot de passe utilisateur incorrect', 'successful_identification' => 'L\'utilisateur :name a été identifié avec succes', 'validated_identification' => 'Identification validée', 'user_identificated' => 'Utilisateur déjà identifié', @@ -25,5 +27,6 @@ Vous pouvez desormais utiliser tous les services de iLink World. Bienvenue dans la famille iLink World !!! Cordialement, -Equipe iLinkWorld.' +Equipe iLinkWorld.', + 'successful_deposit_ilink' => 'Votre compte ilink a été rechargé d\'un montant de :montant' ]; diff --git a/routes/web.php b/routes/web.php index 01d90d4..12a6af0 100755 --- a/routes/web.php +++ b/routes/web.php @@ -14,6 +14,8 @@ //$router->get('/', function () use ($router) { // return $router->app->version(); //}); +// Helper routes +$router->get('countries','HelperController@countries'); // Transactions routes $router->group(['prefix' => '/transactions'] , function () use ($router){ @@ -21,6 +23,11 @@ $router->group(['prefix' => '/transactions'] , function () use ($router){ $router->get('{id_wallet}','TransactionController@lastTransactions'); $router->post('commission','TransactionController@calculateCommission'); $router->delete('{id_transaction}','TransactionController@cancel'); + + // Transactions wallet ilink + $router->group(['prefix' => '/ilink'] , function () use ($router){ + $router->post('','iLinkTransactionController@add'); + }); }); // Credits routes