+ 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->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)

View File

@ -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");
}
}

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,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');
}
}

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;
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');
}
}

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',
'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',
];

View File

@ -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'
];

View File

@ -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',
];

View File

@ -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'
];

View File

@ -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