+ Add iLink agent depot transactions v1 ( Cash vers wallet ilink and Cash vers une carte visa )

This commit is contained in:
Djery-Tom 2020-06-19 14:48:27 +01:00
parent 9fe2fcdcf0
commit 12dc918736
17 changed files with 818 additions and 45 deletions

View File

@ -1,18 +0,0 @@
<?php
namespace App\Http\Controllers;
class ExampleController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
//
}
//
}

View File

@ -0,0 +1,26 @@
<?php
namespace App\Http\Controllers;
use App\Traits\ApiResponser;
use Illuminate\Support\Facades\DB;
class HelperController extends Controller
{
use ApiResponser;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
//
}
public function countries()
{
$countries = DB::select('SELECT id , name FROM countries');
return $this->successResponse($countries);
}
}

View File

@ -110,6 +110,8 @@ class TransactionController extends Controller
$transaction->id_wallet_hyp = $walletHyperviseur->id; $transaction->id_wallet_hyp = $walletHyperviseur->id;
$transaction->commission_hyp = $hyperviseurCommission; $transaction->commission_hyp = $hyperviseurCommission;
$transaction->commission_ag = $agentCommission; $transaction->commission_ag = $agentCommission;
}else{
return $this->errorResponse(trans('errors.visa_api_failed'),Response::HTTP_INTERNAL_SERVER_ERROR);
} }
// }else{ // }else{
@ -165,6 +167,8 @@ class TransactionController extends Controller
$transaction->id_wallet_hyp = $walletHyperviseur->id; $transaction->id_wallet_hyp = $walletHyperviseur->id;
$transaction->commission_hyp = $hyperviseurCommission; $transaction->commission_hyp = $hyperviseurCommission;
$transaction->commission_ag = $agentCommission; $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(); $walletSuperviseur->save();
$walletHyperviseur->save(); $walletHyperviseur->save();
$transaction->save(); $transaction->save();
return $this->successResponse($walletAgent); return $this->successResponse(trans('messages.successful_transaction'));
} }
public function lastTransactions($id_wallet) public function lastTransactions($id_wallet)

View File

@ -6,6 +6,7 @@ namespace App\Http\Controllers;
use App\Models\Identification; use App\Models\Identification;
use App\Models\User; use App\Models\User;
use App\Traits\ApiResponser; use App\Traits\ApiResponser;
use App\Traits\Helper;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Http\Response; use Illuminate\Http\Response;
use Illuminate\Support\Facades\Date; use Illuminate\Support\Facades\Date;
@ -14,7 +15,7 @@ use Illuminate\Support\Facades\Mail;
class UserController extends Controller class UserController extends Controller
{ {
use ApiResponser; use ApiResponser;
use Helper;
/** /**
* Create a new controller instance. * Create a new controller instance.
* *
@ -181,13 +182,4 @@ class UserController extends Controller
return $destination; 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");
}
} }

View File

@ -0,0 +1,334 @@
<?php
namespace App\Http\Controllers;
use App\Models\AgentPlus;
use App\Models\CodeGenerer;
use App\Models\ConfigWallet;
use App\Models\NetworksAgent;
use App\Models\TypeIlinkTransaction;
use App\Models\PaliersConfigWallet;
use App\Models\User;
use App\Models\Wallet;
use App\Models\WalletAgent;
use App\Models\WalletIlinkTransaction;
use App\Models\WalletsUser;
use App\Models\WalletTransaction;
use App\Traits\ApiResponser;
use App\Traits\Helper;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\DB;
use function GuzzleHttp\Promise\all;
class iLinkTransactionController extends Controller
{
use ApiResponser;
use Helper;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
//
}
public function add(Request $request)
{
$transaction = new WalletIlinkTransaction();
$this->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 sapplique 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);
}
}

View File

@ -6,6 +6,7 @@
namespace App\Models; namespace App\Models;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
/** /**
@ -16,14 +17,39 @@ use Illuminate\Database\Eloquent\Model;
* @property float $taux_com_client_depot * @property float $taux_com_client_depot
* @property float $taux_com_ag_retrait * @property float $taux_com_ag_retrait
* @property float $taux_com_ag_depot * @property float $taux_com_ag_depot
* @property float $taux_com_sup_retrait
* @property float $taux_com_sup_depot * @property float $taux_com_sup_depot
* @property float $taux_com_sup_retrait
* @property float $part_banque_retrait * @property float $part_banque_retrait
* @property float $part_banque_depot * @property float $part_banque_depot
* @property float $frais_min_banque_depot * @property float $frais_min_banque_depot
* @property int $id_network * @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 Network $network
* @property Collection|PaliersConfigWallet[] $paliers_config_wallets
* @property Collection|Tax[] $taxes
* *
* @package App\Models * @package App\Models
*/ */
@ -37,24 +63,84 @@ class ConfigWallet extends Model
'taux_com_client_depot' => 'float', 'taux_com_client_depot' => 'float',
'taux_com_ag_retrait' => 'float', 'taux_com_ag_retrait' => 'float',
'taux_com_ag_depot' => 'float', 'taux_com_ag_depot' => 'float',
'taux_com_sup_retrait' => 'float',
'taux_com_sup_depot' => 'float', 'taux_com_sup_depot' => 'float',
'taux_com_sup_retrait' => 'float',
'part_banque_retrait' => 'float', 'part_banque_retrait' => 'float',
'part_banque_depot' => 'float', 'part_banque_depot' => 'float',
'frais_min_banque_depot' => 'float', 'frais_min_banque_depot' => 'float',
'id_network' => 'int' '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 = [ protected $fillable = [
'taux_com_retrait', 'taux_com_client_retrait',
'taux_com_client_depot',
'taux_com_ag_retrait', 'taux_com_ag_retrait',
'com_depot',
'taux_com_ag_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() public function network()
{ {
return $this->belongsTo(Network::class, 'id_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');
}
} }

View File

@ -0,0 +1,49 @@
<?php
/**
* Created by Reliese Model.
*/
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
/**
* Class PaliersConfigWallet
*
* @property int $id
* @property string $type
* @property float $min
* @property float $max
* @property float $taux
* @property int $idConfig
*
* @property ConfigWallet $config_wallet
*
* @package App\Models
*/
class PaliersConfigWallet extends Model
{
protected $table = 'paliersConfigWallet';
public $timestamps = false;
protected $casts = [
'min' => 'float',
'max' => 'float',
'taux' => 'float',
'idConfig' => 'int'
];
protected $fillable = [
'type',
'min',
'max',
'taux',
'idConfig'
];
public function config_wallet()
{
return $this->belongsTo(ConfigWallet::class, 'idConfig');
}
}

47
app/Models/Tax.php Normal file
View File

@ -0,0 +1,47 @@
<?php
/**
* Created by Reliese Model.
*/
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
/**
* Class Tax
*
* @property int $id
* @property string $nom
* @property string $type
* @property float $valeur
* @property string $destination
* @property int $idConfig
*
* @property ConfigWallet $config_wallet
*
* @package App\Models
*/
class Tax extends Model
{
protected $table = 'taxes';
public $timestamps = false;
protected $casts = [
'valeur' => 'float',
'idConfig' => 'int'
];
protected $fillable = [
'nom',
'type',
'valeur',
'destination',
'idConfig'
];
public function config_wallet()
{
return $this->belongsTo(ConfigWallet::class, 'idConfig');
}
}

View File

@ -0,0 +1,37 @@
<?php
/**
* Created by Reliese Model.
*/
namespace App\Models;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Database\Eloquent\Model;
/**
* Class TypeIlinkTransaction
*
* @property int $id
* @property string $acteur
* @property string $nom
*
* @property Collection|WalletIlinkTransaction[] $wallet_ilink_transactions
*
* @package App\Models
*/
class TypeIlinkTransaction extends Model
{
protected $table = 'type_ilink_transaction';
public $timestamps = false;
protected $fillable = [
'acteur',
'nom'
];
public function wallet_ilink_transactions()
{
return $this->hasMany(WalletIlinkTransaction::class, 'type');
}
}

View File

@ -0,0 +1,166 @@
<?php
/**
* Created by Reliese Model.
*/
namespace App\Models;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Model;
/**
* Class WalletIlinkTransaction
*
* @property int $id
* @property float $montant
* @property float $montant_retrait
* @property string $code_retrait
* @property int $status_retrait
* @property string $id_destinataire
* @property string $type_id_destinataire
* @property int $network_destinataire
* @property string $type_document_destinataire
* @property string $id_document_destinataire
* @property string $nom_destinataire
* @property string $prenom_destinataire
* @property string $nom_emetteur
* @property string $prenom_emetteur
* @property float $frais
* @property float $taxe
* @property string $numero_carte
* @property Carbon $expiration_date
* @property int $init_country
* @property int $final_country
* @property float $commission_banque
* @property float $commission_ag
* @property float $commission_sup
* @property float $commission_hyp
* @property int $id_wallet_user
* @property int $id_wallet_ag
* @property int $id_wallet_sup
* @property int $id_wallet_hyp
* @property int $canceled
* @property int $type
* @property Carbon $date
*
* @property Country $country
* @property Wallet $wallet
* @property WalletsUser $wallets_user
* @property TypeIlinkTransaction $type_ilink_transaction
* @property Network $network
*
* @package App\Models
*/
class WalletIlinkTransaction extends Model
{
protected $table = 'wallet_ilink_transaction';
public $timestamps = false;
protected $casts = [
'montant' => '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',
];
}
}

View File

@ -7,6 +7,7 @@
namespace App\Models; namespace App\Models;
use Carbon\Carbon; use Carbon\Carbon;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
/** /**
@ -18,6 +19,7 @@ use Illuminate\Database\Eloquent\Model;
* @property int $idUser * @property int $idUser
* *
* @property User $user * @property User $user
* @property Collection|WalletIlinkTransaction[] $wallet_ilink_transactions
* *
* @package App\Models * @package App\Models
*/ */
@ -45,4 +47,9 @@ class WalletsUser extends Model
{ {
return $this->belongsTo(User::class, 'idUser'); return $this->belongsTo(User::class, 'idUser');
} }
public function wallet_ilink_transactions()
{
return $this->hasMany(WalletIlinkTransaction::class, 'id_wallet_user');
}
} }

26
app/Traits/Helper.php Normal file
View File

@ -0,0 +1,26 @@
<?php
namespace App\Traits;
use Illuminate\Support\Facades\Mail;
trait Helper
{
public 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");
}
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;
}
}

View File

@ -5,5 +5,7 @@ return [
'service_unavailable' => 'Service unavailable', 'service_unavailable' => 'Service unavailable',
'invalid_cvv' => 'Invalid CVV', 'invalid_cvv' => 'Invalid CVV',
'compression_failed' => 'Image compression failed!', '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',
]; ];

View File

@ -8,6 +8,8 @@ return [
'success_treated_demand' => 'Request successfully processed', 'success_treated_demand' => 'Request successfully processed',
'canceled_credit_request' => 'Canceled credit request', 'canceled_credit_request' => 'Canceled credit request',
'canceled_transaction' => 'Canceled transaction', 'canceled_transaction' => 'Canceled transaction',
'successful_transaction' => 'Successful transaction',
'incorrect_user_password' => 'Incorrect user password',
'successful_identification'=>'User :name has been successfully identified.', 'successful_identification'=>'User :name has been successfully identified.',
'user_identificated' => 'User already identificated', 'user_identificated' => 'User already identificated',
'user_not_identificated' => 'User is not 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 !!! Welcome to the iLink World family !!!
Regards, Regards,
ILinkWorld team.' ILinkWorld team.',
'successful_deposit_ilink' => 'Your ilink account has been reloaded with :montant'
]; ];

View File

@ -5,5 +5,7 @@ return [
'service_unavailable' => 'Service non disponible', 'service_unavailable' => 'Service non disponible',
'invalid_cvv' => 'CVV invalide', 'invalid_cvv' => 'CVV invalide',
'compression_failed' => 'Échec de la compression d\'image', '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',
]; ];

View File

@ -8,6 +8,8 @@ return [
'success_treated_demand' => 'Demande traitée avec succès', 'success_treated_demand' => 'Demande traitée avec succès',
'canceled_credit_request' => 'Demande de crédit annulée', 'canceled_credit_request' => 'Demande de crédit annulée',
'canceled_transaction' => 'Transaction 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', 'successful_identification' => 'L\'utilisateur :name a été identifié avec succes',
'validated_identification' => 'Identification validée', 'validated_identification' => 'Identification validée',
'user_identificated' => 'Utilisateur déjà identifié', '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 !!! Bienvenue dans la famille iLink World !!!
Cordialement, Cordialement,
Equipe iLinkWorld.' Equipe iLinkWorld.',
'successful_deposit_ilink' => 'Votre compte ilink a été rechargé d\'un montant de :montant'
]; ];

View File

@ -14,6 +14,8 @@
//$router->get('/', function () use ($router) { //$router->get('/', function () use ($router) {
// return $router->app->version(); // return $router->app->version();
//}); //});
// Helper routes
$router->get('countries','HelperController@countries');
// Transactions routes // Transactions routes
$router->group(['prefix' => '/transactions'] , function () use ($router){ $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->get('{id_wallet}','TransactionController@lastTransactions');
$router->post('commission','TransactionController@calculateCommission'); $router->post('commission','TransactionController@calculateCommission');
$router->delete('{id_transaction}','TransactionController@cancel'); $router->delete('{id_transaction}','TransactionController@cancel');
// Transactions wallet ilink
$router->group(['prefix' => '/ilink'] , function () use ($router){
$router->post('','iLinkTransactionController@add');
});
}); });
// Credits routes // Credits routes