+ Retrait et depot d'argent

+ Fetch all wallets for agent by her id
This commit is contained in:
DJERY-TOM 2020-04-17 16:26:12 +01:00
parent bfc53164e8
commit 95bfc8f3bd
8 changed files with 379 additions and 49 deletions

View File

@ -3,9 +3,11 @@
namespace App\Exceptions;
use App\Traits\ApiResponser;
use GuzzleHttp\Exception\ServerException;
use Illuminate\Auth\Access\AuthorizationException;
use Illuminate\Auth\AuthenticationException;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Illuminate\Database\QueryException;
use Illuminate\Http\Response;
use Illuminate\Validation\ValidationException;
use Laravel\Lumen\Exceptions\Handler as ExceptionHandler;
@ -88,6 +90,15 @@ class Handler extends ExceptionHandler
return $this->errorResponse($exception->getMessage(),Response::HTTP_UNAUTHORIZED);
}
if ($exception instanceof QueryException)
{
return $this->errorResponse($exception->getMessage(),Response::HTTP_INTERNAL_SERVER_ERROR);
}
if ($exception instanceof ServerException)
{
return $this->errorResponse($exception->getMessage(),Response::HTTP_INTERNAL_SERVER_ERROR);
}
if( env('APP_DEBUG', false))
{

View File

@ -2,10 +2,9 @@
namespace App\Http\Controllers;
use App\Models\AgentsPlus;
use App\Models\AgentPlus;
use App\Models\CodeGenerer;
use App\Models\ConfigWallet;
use App\Models\Network;
use App\Models\NetworksAgent;
use App\Models\Wallet;
use App\Models\WalletAgent;
@ -39,45 +38,53 @@ class TransactionController extends Controller
// Recuperation des wallets hyperviseur et superviseur
$codeGenerer = CodeGenerer::findOrFail($network_agent->codeGenerer_id);
$superviseur = AgentsPlus::where('code_membre',$codeGenerer->code_parrain)->firstOrFail();
$hyperviseur = AgentsPlus::where('code_membre',$superviseur->code_parrain)->firstOrFail();
$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);;;
$walletSuperviseur = Wallet::findOrFail($wallet_agent_sup->wallet_id);
$walletHyperviseur = Wallet::findOrFail($wallet_agent_hyp->wallet_id);
$transaction->fill($request->all());
$data = $request->all();
$data['expiration_date'] = \DateTime::createFromFormat('m/Y',$request->expiration_date);
$transaction->fill($data);
$client = new \GuzzleHttp\Client();
// Procedure de depot d'argent
if($transaction->type == 'credit')
{
$frais = $transaction->montant * $config->taux_com_client_depot;
$frais = $transaction->montant * $config->taux_com_client_depot / 100 ;
if($walletAgent->balance_princ >= ($transaction->montant + $config->taux_com_client_depot + $config->part_banque_depot)){
//Requete vers la banque
// 1 ---> Emmètre via API sécurisé SSL une requête de débit de notre
//compte marchand la valeur égale au $montantDepot( montant de la
//transaction la frais calculé en % - frais minimum fixe du
//dépôt client) et créditer sa carte visa de cette valeur
if($walletAgent->balance_princ >= ($transaction->montant + $frais + $config->frais_min_banque_depot)){
$banqueCommission = floatval($config->frais_min_banque_depot * $config->part_banque_depot);
// 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
$response = $client->post('https://ilink-app.com/mobilebackendtest/interacted/MembersAction.php');
$code = $response->getStatusCode();
if($code == 200){
//Requete vers la banque
// 1 ---> Emmètre via API sécurisé SSL une requête de débit de notre
//compte marchand la valeur égale au $montantDepot( montant de la
//transaction la frais calculé en % - frais minimum fixe du
//dépôt client) et créditer sa carte visa de cette valeur
$walletAgent->balance_princ -= $transaction->montant;
$banqueCommission = floatval($config->frais_min_banque_depot * $config->part_banque_depot / 100);
// 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
$agentCommission = floatval($config->frais_min_banque_depot * $config->taux_com_ag_depot);
$superviseurCommission = floatval($config->frais_min_banque_depot * $config->taux_com_sup_depot);
$hyperviseurCommission = $frais + $config->frais_min_banque_depot - $superviseurCommission - $agentCommission - $banqueCommission;
$walletAgent->balance_princ -= $transaction->montant;
$agentCommission = floatval($config->frais_min_banque_depot * $config->taux_com_ag_depot / 100);
$superviseurCommission = floatval($config->frais_min_banque_depot * $config->taux_com_sup_depot / 100);
$hyperviseurCommission = $frais + $config->frais_min_banque_depot - $superviseurCommission - $agentCommission - $banqueCommission;
$walletAgent->balance_com += $agentCommission;
$walletSuperviseur->balance_com += $superviseurCommission;
$walletHyperviseur->balance_com += $hyperviseurCommission;
}
$walletAgent->balance_com += $agentCommission;
$walletSuperviseur->balance_com += $superviseurCommission;
$walletHyperviseur->balance_com += $hyperviseurCommission;
}else{
return $this->errorResponse('Solde agent inferieur au montant de depot + frais + frais minimun de depot de la banque', Response::HTTP_BAD_REQUEST);
}
@ -86,14 +93,17 @@ class TransactionController extends Controller
}elseif ($transaction->type == 'debit')
{
$frais = $transaction->montant * $config->taux_com_client_retrait;
$frais = $transaction->montant * $config->taux_com_client_retrait / 100;
$response = $client->post('https://ilink-app.com/mobilebackendtest/interacted/MembersAction.php');
$code = $response->getStatusCode();
if($code == 200) {
//Requete vers la banque
// 1 ---> Emmètre via API sécurisé SSL une requête de retrait du
//(montant de la transaction + frais de transaction) pour débiter
//sa carte et créditer notre compte marchand
$banqueCommission = floatval($transaction->montant * $config->part_banque_retrait);
$banqueCommission = floatval($transaction->montant * $config->part_banque_retrait / 100);
// 2---> Emmètre via API sécurisé SSL une requête de débit de notre
//compte marchand du (montant de la transaction multiplié
//par la Part de la banque partenaire en % ) et créditer le
@ -101,15 +111,18 @@ class TransactionController extends Controller
$walletAgent->balance_princ += $transaction->montant;
$agentCommission=floatval($transaction->montant*$config->taux_com_ag_retrait);
$superviseurCommission=floatval($transaction->montant*$config->taux_com_sup_retrait);
$hyperviseurCommission = $frais + $config->frais_min_banque_depot - $superviseurCommission - $agentCommission - $banqueCommission;
$agentCommission=floatval($transaction->montant*$config->taux_com_ag_retrait / 100);
$superviseurCommission=floatval($transaction->montant*$config->taux_com_sup_retrait / 100);
$hyperviseurCommission = $frais - $superviseurCommission - $agentCommission - $banqueCommission;
// dd(array($hyperviseurCommission ,$superviseurCommission));
$walletAgent->balance_com += $agentCommission;
$walletSuperviseur->balance_com += $superviseurCommission;
$walletHyperviseur->balance_com += $hyperviseurCommission;
}
}
$transaction->date = new \DateTime();

View File

@ -2,12 +2,16 @@
namespace App\Http\Controllers;
use App\Models\Wallet;
use App\Traits\ApiResponser;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\DB;
class WalletController extends Controller
{
use ApiResponser;
/**
* Create a new controller instance.
*
@ -18,10 +22,20 @@ class WalletController extends Controller
//
}
public function activated(){
$networks = DB::select('SELECT networks.name AS network,networks.status AS status,networks.id,countries.name AS country,networks.country_id , configWallet.id_network FROM `networks`
INNER JOIN countries ON networks.country_id=countries.id LEFT JOIN configWallet ON configWallet.id_network = networks.id WHERE status = 1 AND id_network IS NOT NULL');
public function activated($id_agent)
{
$networks = DB::select('SELECT na.network_id ,ne.name as network , countries.name AS country,ne.country_id , wallets.* FROM agents ag
INNER JOIN networks_agents na ON ag.id=na.agent_id INNER JOIN codeGenerer cg ON cg.id=na.codeGenerer_id INNER JOIN networks ne ON ne.id=na.network_id INNER JOIN countries ON ne.country_id=countries.id LEFT JOIN wallets ON na.id = wallets.id_networkAgent WHERE ag.id= :id AND network_id IN (
SELECT networks.id FROM networks LEFT JOIN configWallet ON configWallet.id_network = networks.id WHERE status = 1 AND id_network IS NOT NULL)', ['id' => $id_agent]);
return $this->successResponse($networks);
}
public function show($id_wallet)
{
$wallet = Wallet::findOrFail($id_wallet);
return $this->successResponse($wallet);
}
}

View File

@ -10,15 +10,17 @@ use Carbon\Carbon;
use Illuminate\Database\Eloquent\Model;
/**
* Class AgentsPlus
* Class AgentPlus
*
* @property int $id
* @property string $uid
* @property string $firstname
* @property string $adresse
* @property string $lastname
* @property string $email
* @property float $userlongitude
* @property float $userlatitude
* @property float $longitude
* @property float $latitude
* @property string $phone
* @property int $active
* @property Carbon $created
* @property Carbon $openHours
@ -31,23 +33,27 @@ use Illuminate\Database\Eloquent\Model;
* @property string $category
* @property string $code_membre
* @property int $number_geoBysuper
* @property int $network_id
* @property string $code_dial
* @property string $transactionNumber
*
* @package App\Models
*/
class AgentsPlus extends Model
class AgentPlus extends Model
{
protected $table = 'agents_plus';
protected $table = 'agent_plus';
public $incrementing = false;
public $timestamps = false;
protected $casts = [
'id' => 'int',
'userlongitude' => 'float',
'userlatitude' => 'float',
'longitude' => 'float',
'latitude' => 'float',
'active' => 'int',
'solde' => 'float',
'etat' => 'int',
'number_geoBysuper' => 'int'
'number_geoBysuper' => 'int',
'network_id' => 'int'
];
protected $dates = [
@ -60,10 +66,12 @@ class AgentsPlus extends Model
'id',
'uid',
'firstname',
'adresse',
'lastname',
'email',
'userlongitude',
'userlatitude',
'longitude',
'latitude',
'phone',
'active',
'created',
'openHours',
@ -75,6 +83,9 @@ class AgentsPlus extends Model
'code_parrain',
'category',
'code_membre',
'number_geoBysuper'
'number_geoBysuper',
'network_id',
'code_dial',
'transactionNumber'
];
}

View File

@ -76,7 +76,7 @@ class WalletTransaction extends Model
return [
'montant'=> 'required|numeric|min:1',
'numCarte'=>'required|integer',
'cvv'=>'required|integer|min:3|max:4',
'cvv'=>'required|integer|min:100|max:999',
'expiration_date'=>'required|date_format:m/Y|after_or_equal:today',
'type' =>'required|in:credit,debit',
'id_wallet' => 'required|integer|min:0'

View File

@ -6,6 +6,7 @@
"type": "project",
"require": {
"php": "^7.2.5",
"guzzlehttp/guzzle": "^6.5",
"laravel/lumen-framework": "^7.0"
},
"require-dev": {

281
composer.lock generated
View File

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"This file is @generated automatically"
],
"content-hash": "4be8fced66fbffeff2568a82e343bfc0",
"content-hash": "4f5df1d5bb479b7274f68ed7be7e047b",
"packages": [
{
"name": "brick/math",
@ -292,6 +292,195 @@
],
"time": "2020-02-13T22:36:52+00:00"
},
{
"name": "guzzlehttp/guzzle",
"version": "6.5.2",
"source": {
"type": "git",
"url": "https://github.com/guzzle/guzzle.git",
"reference": "43ece0e75098b7ecd8d13918293029e555a50f82"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/guzzle/zipball/43ece0e75098b7ecd8d13918293029e555a50f82",
"reference": "43ece0e75098b7ecd8d13918293029e555a50f82",
"shasum": ""
},
"require": {
"ext-json": "*",
"guzzlehttp/promises": "^1.0",
"guzzlehttp/psr7": "^1.6.1",
"php": ">=5.5"
},
"require-dev": {
"ext-curl": "*",
"phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0",
"psr/log": "^1.1"
},
"suggest": {
"ext-intl": "Required for Internationalized Domain Name (IDN) support",
"psr/log": "Required for using the Log middleware"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "6.5-dev"
}
},
"autoload": {
"psr-4": {
"GuzzleHttp\\": "src/"
},
"files": [
"src/functions_include.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Michael Dowling",
"email": "mtdowling@gmail.com",
"homepage": "https://github.com/mtdowling"
}
],
"description": "Guzzle is a PHP HTTP client library",
"homepage": "http://guzzlephp.org/",
"keywords": [
"client",
"curl",
"framework",
"http",
"http client",
"rest",
"web service"
],
"time": "2019-12-23T11:57:10+00:00"
},
{
"name": "guzzlehttp/promises",
"version": "v1.3.1",
"source": {
"type": "git",
"url": "https://github.com/guzzle/promises.git",
"reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646",
"reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646",
"shasum": ""
},
"require": {
"php": ">=5.5.0"
},
"require-dev": {
"phpunit/phpunit": "^4.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.4-dev"
}
},
"autoload": {
"psr-4": {
"GuzzleHttp\\Promise\\": "src/"
},
"files": [
"src/functions_include.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Michael Dowling",
"email": "mtdowling@gmail.com",
"homepage": "https://github.com/mtdowling"
}
],
"description": "Guzzle promises library",
"keywords": [
"promise"
],
"time": "2016-12-20T10:07:11+00:00"
},
{
"name": "guzzlehttp/psr7",
"version": "1.6.1",
"source": {
"type": "git",
"url": "https://github.com/guzzle/psr7.git",
"reference": "239400de7a173fe9901b9ac7c06497751f00727a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a",
"reference": "239400de7a173fe9901b9ac7c06497751f00727a",
"shasum": ""
},
"require": {
"php": ">=5.4.0",
"psr/http-message": "~1.0",
"ralouphie/getallheaders": "^2.0.5 || ^3.0.0"
},
"provide": {
"psr/http-message-implementation": "1.0"
},
"require-dev": {
"ext-zlib": "*",
"phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8"
},
"suggest": {
"zendframework/zend-httphandlerrunner": "Emit PSR-7 responses"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.6-dev"
}
},
"autoload": {
"psr-4": {
"GuzzleHttp\\Psr7\\": "src/"
},
"files": [
"src/functions_include.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Michael Dowling",
"email": "mtdowling@gmail.com",
"homepage": "https://github.com/mtdowling"
},
{
"name": "Tobias Schultze",
"homepage": "https://github.com/Tobion"
}
],
"description": "PSR-7 message implementation that also provides common utility methods",
"keywords": [
"http",
"message",
"psr-7",
"request",
"response",
"stream",
"uri",
"url"
],
"time": "2019-07-01T23:21:34+00:00"
},
{
"name": "illuminate/auth",
"version": "v7.3.0",
@ -1986,6 +2175,56 @@
],
"time": "2019-01-08T18:20:26+00:00"
},
{
"name": "psr/http-message",
"version": "1.0.1",
"source": {
"type": "git",
"url": "https://github.com/php-fig/http-message.git",
"reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
"reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
"shasum": ""
},
"require": {
"php": ">=5.3.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0.x-dev"
}
},
"autoload": {
"psr-4": {
"Psr\\Http\\Message\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "PHP-FIG",
"homepage": "http://www.php-fig.org/"
}
],
"description": "Common interface for HTTP messages",
"homepage": "https://github.com/php-fig/http-message",
"keywords": [
"http",
"http-message",
"psr",
"psr-7",
"request",
"response"
],
"time": "2016-08-06T14:39:51+00:00"
},
{
"name": "psr/log",
"version": "1.1.3",
@ -2081,6 +2320,46 @@
],
"time": "2017-10-23T01:57:42+00:00"
},
{
"name": "ralouphie/getallheaders",
"version": "3.0.3",
"source": {
"type": "git",
"url": "https://github.com/ralouphie/getallheaders.git",
"reference": "120b605dfeb996808c31b6477290a714d356e822"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822",
"reference": "120b605dfeb996808c31b6477290a714d356e822",
"shasum": ""
},
"require": {
"php": ">=5.6"
},
"require-dev": {
"php-coveralls/php-coveralls": "^2.1",
"phpunit/phpunit": "^5 || ^6.5"
},
"type": "library",
"autoload": {
"files": [
"src/getallheaders.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Ralph Khattar",
"email": "ralph.khattar@gmail.com"
}
],
"description": "A polyfill for getallheaders.",
"time": "2019-03-08T08:55:37+00:00"
},
{
"name": "ramsey/collection",
"version": "1.0.1",

View File

@ -20,5 +20,6 @@ $router->post('/virement','CommissionController@virement');
// Wallets routes
$router->group(['prefix' => '/wallets'] , function () use ($router){
$router->get('activated', 'WalletController@activated');
$router->get('{id_agent}/activated', 'WalletController@activated');
$router->get('{id_wallet}', 'WalletController@show');
});