+ Fix bugs and add User - Envoi de wallet à carte
This commit is contained in:
parent
2ecf785ca3
commit
8a87d9231c
|
@ -31,7 +31,7 @@ class HelperController extends Controller
|
||||||
{
|
{
|
||||||
$networks = DB::select('SELECT n.id , n.name , c.type FROM networks n INNER JOIN configWallet c ON c.id_network = n.id WHERE n.id IN ( SELECT distinct id_network FROM paying_networks )
|
$networks = DB::select('SELECT n.id , n.name , c.type FROM networks n INNER JOIN configWallet c ON c.id_network = n.id WHERE n.id IN ( SELECT distinct id_network FROM paying_networks )
|
||||||
AND status = 1 AND country_id = :id;',['id'=>$id_country]);
|
AND status = 1 AND country_id = :id;',['id'=>$id_country]);
|
||||||
foreach ($networks as$network){
|
foreach ($networks as $network){
|
||||||
if($network->type == 'ilink')
|
if($network->type == 'ilink')
|
||||||
$network->type = 'ilink-world';
|
$network->type = 'ilink-world';
|
||||||
}
|
}
|
||||||
|
|
|
@ -113,64 +113,113 @@ class iLinkTransactionController extends Controller
|
||||||
$walletUser = WalletsUser::findOrFail($request->id_wallet_user);
|
$walletUser = WalletsUser::findOrFail($request->id_wallet_user);
|
||||||
$user = User::findOrFail($walletUser->idUser);
|
$user = User::findOrFail($walletUser->idUser);
|
||||||
if ($this->checkPassword($request->password, $user->encrypted_password, $user->salt)) {
|
if ($this->checkPassword($request->password, $user->encrypted_password, $user->salt)) {
|
||||||
$transaction->frais = $frais = ($request->init_country != $request->final_country) ? $this->calculateFees($plr_user_wallet_wallet, $request->montant) : $this->calculateFees($plr_user_wallet_wallet_national, $request->montant);
|
if($request->montant > $walletUser->balance){
|
||||||
$transaction->taxe = $taxe = ($request->init_country != $request->final_country) ? $this->calculateTax($taxesInternationales, $frais) : $this->calculateTax($taxesNationales, $frais);
|
return $this->errorResponse(trans('errors.insufficient_balance'));
|
||||||
$transaction->montant_depot = $montantDepot = $transaction->montant - $frais - $taxe;
|
|
||||||
$configPayeur = ConfigWallet::where('id_network', $request->network_destinataire)->firstOrFail();
|
|
||||||
$reseauPayeur = PayingNetwork::where('id_network', $request->network_destinataire)->where('id_configWallet', $config->id)->firstOrFail();
|
|
||||||
if($request->init_country != $request->final_country){
|
|
||||||
$transaction->part_reseau_payeur = $frais * $reseauPayeur->taux_partage / 100;
|
|
||||||
$transaction->part_reseau_emetteur = $frais - $transaction->part_reseau_payeur;
|
|
||||||
}else{
|
}else{
|
||||||
$transaction->part_reseau_payeur = 0;
|
$transaction->frais = $frais = ($request->init_country != $request->final_country) ? $this->calculateFees($plr_user_wallet_wallet, $request->montant) : $this->calculateFees($plr_user_wallet_wallet_national, $request->montant);
|
||||||
$transaction->part_reseau_emetteur = $frais;
|
$transaction->taxe = $taxe = ($request->init_country != $request->final_country) ? $this->calculateTax($taxesInternationales, $frais) : $this->calculateTax($taxesNationales, $frais);
|
||||||
}
|
$transaction->montant_depot = $montantDepot = $transaction->montant - $frais - $taxe;
|
||||||
$transaction->commission_hyp = $transaction->part_reseau_emetteur;
|
$configPayeur = ConfigWallet::where('id_network', $request->network_destinataire)->firstOrFail();
|
||||||
$reseauPayeur->balance_com += $transaction->part_reseau_payeur;
|
$reseauPayeur = PayingNetwork::where('id_network', $request->network_destinataire)->where('id_configWallet', $config->id)->firstOrFail();
|
||||||
if ($configPayeur->type == 'ilink') {
|
if($request->init_country != $request->final_country){
|
||||||
$walletHyperviseur->balance_com += $transaction->part_reseau_emetteur;
|
$transaction->part_reseau_payeur = $frais * $reseauPayeur->taux_partage / 100;
|
||||||
$destinataire = User::where('user_code', $request->id_destinataire)->first();
|
$transaction->part_reseau_emetteur = $frais - $transaction->part_reseau_payeur;
|
||||||
if($destinataire) { // Si c'est un wallet ilink
|
|
||||||
$walletDestinataire = WalletsUser::where('idUser', $destinataire->id)->firstOrFail();
|
|
||||||
$walletDestinataire->balance += $montantDepot;
|
|
||||||
$walletDestinataire->save();
|
|
||||||
} else {
|
|
||||||
return $this->errorResponse(trans('errors.wallet_not_defined'));
|
|
||||||
}
|
|
||||||
$walletUser->balance -= $transaction->montant;
|
|
||||||
//Hyperviseur payeur
|
|
||||||
$hyperviseurPayeur = AgentPlus::where('category', 'hyper')->where('network_id', $request->network_destinataire)->firstOrFail();
|
|
||||||
if($hyperviseurPayeur->id == $hyperviseur->id){ //Si c'est le reseau payeur est aussi emetteur
|
|
||||||
$walletHyperviseur->balance_com += $transaction->part_reseau_payeur;
|
|
||||||
$reseauPayeur->balance_com += $transaction->part_reseau_emetteur;
|
|
||||||
}else{
|
}else{
|
||||||
$wallet_agent_hypPayeur = WalletAgent::where('agent_id', $hyperviseurPayeur->id)->firstOrFail();
|
$transaction->part_reseau_payeur = 0;
|
||||||
$walletHyperviseurPayeur = Wallet::findOrFail($wallet_agent_hypPayeur->wallet_id);
|
$transaction->part_reseau_emetteur = $frais;
|
||||||
$walletHyperviseurPayeur->balance_com += $transaction->part_reseau_payeur;
|
|
||||||
$walletHyperviseurPayeur->save();
|
|
||||||
}
|
}
|
||||||
$walletHyperviseur->save();
|
$transaction->commission_hyp = $transaction->part_reseau_emetteur;
|
||||||
$walletUser->save();
|
$reseauPayeur->balance_com += $transaction->part_reseau_payeur;
|
||||||
} else {
|
if ($configPayeur->type == 'ilink') {
|
||||||
//Emettre requete SSL vers wallet extene correspondant pour recharger le compte dont l'id est :
|
$walletHyperviseur->balance_com += $transaction->part_reseau_emetteur;
|
||||||
|
$destinataire = User::where('user_code', $request->id_destinataire)->first();
|
||||||
|
if($destinataire) { // Si c'est un wallet ilink
|
||||||
|
$walletDestinataire = WalletsUser::where('idUser', $destinataire->id)->firstOrFail();
|
||||||
|
$walletDestinataire->balance += $montantDepot;
|
||||||
|
$walletDestinataire->save();
|
||||||
|
} else {
|
||||||
|
return $this->errorResponse(trans('errors.wallet_not_defined'));
|
||||||
|
}
|
||||||
|
$walletUser->balance -= $transaction->montant;
|
||||||
|
//Hyperviseur payeur
|
||||||
|
$hyperviseurPayeur = AgentPlus::where('category', 'hyper')->where('network_id', $request->network_destinataire)->firstOrFail();
|
||||||
|
if($hyperviseurPayeur->id == $hyperviseur->id){ //Si c'est le reseau payeur est aussi emetteur
|
||||||
|
$walletHyperviseur->balance_com += $transaction->part_reseau_payeur;
|
||||||
|
$reseauPayeur->balance_com += $transaction->part_reseau_emetteur;
|
||||||
|
}else{
|
||||||
|
$wallet_agent_hypPayeur = WalletAgent::where('agent_id', $hyperviseurPayeur->id)->firstOrFail();
|
||||||
|
$walletHyperviseurPayeur = Wallet::findOrFail($wallet_agent_hypPayeur->wallet_id);
|
||||||
|
$walletHyperviseurPayeur->balance_com += $transaction->part_reseau_payeur;
|
||||||
|
$walletHyperviseurPayeur->save();
|
||||||
|
}
|
||||||
|
$walletHyperviseur->save();
|
||||||
|
$walletUser->save();
|
||||||
|
} else {
|
||||||
|
//Emettre requete SSL vers wallet extene correspondant pour recharger le compte dont l'id est :
|
||||||
// $transaction->id_destinataire ;
|
// $transaction->id_destinataire ;
|
||||||
// et le montant est:
|
// et le montant est:
|
||||||
// $montantDepot;
|
// $montantDepot;
|
||||||
|
}
|
||||||
|
$reseauPayeur->save();
|
||||||
|
$transaction->save();
|
||||||
|
$this->sendMail($user->email, trans('messages.successful_transaction'), trans('messages.successful_user_send_to_wallet',
|
||||||
|
['id_transaction' => $transaction->id, 'amount' => $this->toMoney($transaction->montant, $request->init_country), 'net_init' => $this->toMoney($montantDepot, $request->init_country),
|
||||||
|
'net_final' => $this->convertMoney($montantDepot, $request->init_country, $request->final_country), 'fees' => $this->toMoney($frais + $taxe, $request->init_country),
|
||||||
|
'init_country'=>$this->getCountryName($request->init_country) , 'final_country'=>$this->getCountryName($request->final_country),
|
||||||
|
'sender_code' => $user->user_code, 'receiver_code' => $transaction->id_destinataire]));
|
||||||
|
return $this->successResponse(trans('messages.successful_transaction'));
|
||||||
}
|
}
|
||||||
$reseauPayeur->save();
|
|
||||||
$transaction->save();
|
|
||||||
$this->sendMail($user->email, trans('messages.successful_transaction'), trans('messages.successful_user_send_to_wallet',
|
|
||||||
['id_transaction' => $transaction->id, 'amount' => $this->toMoney($transaction->montant, $request->init_country), 'net_init' => $this->toMoney($montantDepot, $request->init_country),
|
|
||||||
'net_final' => $this->convertMoney($montantDepot, $request->init_country, $request->final_country), 'fees' => $this->toMoney($frais + $taxe, $request->init_country),
|
|
||||||
'init_country'=>$this->getCountryName($request->init_country) , 'final_country'=>$this->getCountryName($request->final_country),
|
|
||||||
'sender_code' => $user->user_code, 'receiver_code' => $transaction->id_destinataire]));
|
|
||||||
return $this->successResponse(trans('messages.successful_transaction'));
|
|
||||||
} else {
|
} else {
|
||||||
return $this->errorResponse(trans('messages.incorrect_user_password'));
|
return $this->errorResponse(trans('messages.incorrect_user_password'));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 2: //User - Envoi de wallet à carte
|
case 2: //User - Envoi de wallet à carte
|
||||||
|
$this->validate($request, $transaction->card_rules());
|
||||||
|
$walletUser = WalletsUser::findOrFail($request->id_wallet_user);
|
||||||
|
$user = User::findOrFail($walletUser->idUser);
|
||||||
|
if ($this->checkPassword($request->password, $user->encrypted_password, $user->salt)) {
|
||||||
|
if ($request->montant > $walletUser->balance) {
|
||||||
|
return $this->errorResponse(trans('errors.insufficient_balance'));
|
||||||
|
} else {
|
||||||
|
$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_user_wallet_carte / 100;
|
||||||
|
$transaction->montant_depot = $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) {
|
||||||
|
$walletUser->balance -= $transaction->montant;
|
||||||
|
|
||||||
|
$walletHyperviseur->balance_com += $frais;
|
||||||
|
$transaction->commission_hyp = $frais;
|
||||||
|
$transaction->id_wallet_hyp = $walletHyperviseur->id;
|
||||||
|
$transaction->frais = $frais;
|
||||||
|
$transaction->date = new \DateTime();
|
||||||
|
$walletHyperviseur->save();
|
||||||
|
$walletUser->save();
|
||||||
|
$transaction->save();
|
||||||
|
$this->sendMail($user->email, trans('messages.successful_transaction'), trans('messages.successful_user_send_to_cart',
|
||||||
|
['id_transaction' => $transaction->id, 'amount' => $this->toMoneyWithNetwork($transaction->montant, $request->id_network),
|
||||||
|
'net' => $this->toMoneyWithNetwork($montantDepot, $request->id_network), 'fees' => $this->toMoneyWithNetwork($frais, $request->id_network),
|
||||||
|
'sender_code' => $user->user_code, 'cart_number' => wordwrap($request->numero_carte, 4, ' ', true)]));
|
||||||
|
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;
|
break;
|
||||||
case 3: //User - Envoi de wallet à cash
|
case 3: //User - Envoi de wallet à cash
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,7 @@ use Brick\Money\ExchangeRateProvider\BaseCurrencyProvider;
|
||||||
use Brick\Money\Money;
|
use Brick\Money\Money;
|
||||||
use Brick\Math\RoundingMode;
|
use Brick\Math\RoundingMode;
|
||||||
use PDO;
|
use PDO;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
|
||||||
trait Helper
|
trait Helper
|
||||||
{
|
{
|
||||||
|
@ -46,6 +47,14 @@ trait Helper
|
||||||
return Country::findOrFail($id_country)->name;
|
return Country::findOrFail($id_country)->name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function toMoneyWithNetwork($amount , $id_network){
|
||||||
|
$currency = collect(DB::select('SELECT cu.code FROM networks n INNER JOIN countries c ON c.id = n.country_id INNER JOIN currencies cu ON cu.id = c.idCurrency
|
||||||
|
WHERE n.id = :id',['id'=>$id_network]))->first();
|
||||||
|
|
||||||
|
$money = Money::of(round($amount, 0),$currency ? $currency->code : 'XAF');
|
||||||
|
return $money->formatTo('fr_FR');
|
||||||
|
}
|
||||||
|
|
||||||
public function toMoney($amount, $id_country)
|
public function toMoney($amount, $id_country)
|
||||||
{
|
{
|
||||||
$country = Country::findOrFail($id_country);
|
$country = Country::findOrFail($id_country);
|
||||||
|
|
|
@ -9,5 +9,6 @@ return [
|
||||||
'visa_api_failed'=> 'Request to API visa failed',
|
'visa_api_failed'=> 'Request to API visa failed',
|
||||||
'failed_transaction' => 'Failed transaction',
|
'failed_transaction' => 'Failed transaction',
|
||||||
'user_phone_not_exist' => 'This customer number does not exist',
|
'user_phone_not_exist' => 'This customer number does not exist',
|
||||||
'wallet_not_defined' => 'This code does not correspond to an iLink wallet'
|
'wallet_not_defined' => 'This code does not correspond to an iLink wallet',
|
||||||
|
'insufficient_balance'=> 'The balance is insufficient to complete this transaction',
|
||||||
];
|
];
|
||||||
|
|
|
@ -56,4 +56,12 @@ Transaction information:
|
||||||
- Fees + Tax : :fees
|
- Fees + Tax : :fees
|
||||||
- Number of the sending wallet: :sender_code
|
- Number of the sending wallet: :sender_code
|
||||||
- Number of the recipient wallet: :receiver_code',
|
- Number of the recipient wallet: :receiver_code',
|
||||||
|
'successful_user_send_to_cart' => 'Sending money to a visa card made.
|
||||||
|
Transaction information:
|
||||||
|
- Transaction ID: :id_transaction
|
||||||
|
- Amount of the transaction: :amount
|
||||||
|
- Net shipping amount: :net
|
||||||
|
- Fees: :fees
|
||||||
|
- Number of the sending wallet: :sender_code
|
||||||
|
- Recipient\'s card number: :cart_number',
|
||||||
];
|
];
|
||||||
|
|
|
@ -9,5 +9,6 @@ return [
|
||||||
'visa_api_failed'=> 'La requete vers l\'api visa a échouée',
|
'visa_api_failed'=> 'La requete vers l\'api visa a échouée',
|
||||||
'failed_transaction' => 'Transaction échouée',
|
'failed_transaction' => 'Transaction échouée',
|
||||||
'user_phone_not_exist' => 'Ce numéro client n\'existe pas',
|
'user_phone_not_exist' => 'Ce numéro client n\'existe pas',
|
||||||
'wallet_not_defined' => 'Ce code ne correspond pas à un wallet iLink'
|
'wallet_not_defined' => 'Ce code ne correspond pas à un wallet iLink',
|
||||||
|
'insufficient_balance'=> 'Le solde est insuffisant pour effectuer cette transaction',
|
||||||
];
|
];
|
||||||
|
|
|
@ -56,4 +56,12 @@ Informations de la transaction :
|
||||||
- Frais et Taxe : :fees
|
- Frais et Taxe : :fees
|
||||||
- Numero du wallet émetteur : :sender_code
|
- Numero du wallet émetteur : :sender_code
|
||||||
- Numero du wallet destinataire : :receiver_code',
|
- Numero du wallet destinataire : :receiver_code',
|
||||||
|
'successful_user_send_to_cart' => 'Envoi d\'argent vers une carte visa effectué.
|
||||||
|
Informations de la transaction :
|
||||||
|
- Transaction ID : :id_transaction
|
||||||
|
- Montant de la transaction : :amount
|
||||||
|
- Montant net d\'envoi: :net
|
||||||
|
- Frais : :fees
|
||||||
|
- Numero du wallet émetteur : :sender_code
|
||||||
|
- Numero de la carte du destinataire : :cart_number',
|
||||||
];
|
];
|
||||||
|
|
Loading…
Reference in New Issue