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

View File

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

View File

@ -2,12 +2,16 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use App\Models\Wallet;
use App\Traits\ApiResponser; use App\Traits\ApiResponser;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
class WalletController extends Controller class WalletController extends Controller
{ {
use ApiResponser; use ApiResponser;
/** /**
* Create a new controller instance. * Create a new controller instance.
* *
@ -18,10 +22,20 @@ class WalletController extends Controller
// //
} }
public function activated(){ public function activated($id_agent)
$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');
$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); 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; use Illuminate\Database\Eloquent\Model;
/** /**
* Class AgentsPlus * Class AgentPlus
* *
* @property int $id * @property int $id
* @property string $uid * @property string $uid
* @property string $firstname * @property string $firstname
* @property string $adresse
* @property string $lastname * @property string $lastname
* @property string $email * @property string $email
* @property float $userlongitude * @property float $longitude
* @property float $userlatitude * @property float $latitude
* @property string $phone
* @property int $active * @property int $active
* @property Carbon $created * @property Carbon $created
* @property Carbon $openHours * @property Carbon $openHours
@ -31,23 +33,27 @@ use Illuminate\Database\Eloquent\Model;
* @property string $category * @property string $category
* @property string $code_membre * @property string $code_membre
* @property int $number_geoBysuper * @property int $number_geoBysuper
* @property int $network_id
* @property string $code_dial
* @property string $transactionNumber
* *
* @package App\Models * @package App\Models
*/ */
class AgentsPlus extends Model class AgentPlus extends Model
{ {
protected $table = 'agents_plus'; protected $table = 'agent_plus';
public $incrementing = false; public $incrementing = false;
public $timestamps = false; public $timestamps = false;
protected $casts = [ protected $casts = [
'id' => 'int', 'id' => 'int',
'userlongitude' => 'float', 'longitude' => 'float',
'userlatitude' => 'float', 'latitude' => 'float',
'active' => 'int', 'active' => 'int',
'solde' => 'float', 'solde' => 'float',
'etat' => 'int', 'etat' => 'int',
'number_geoBysuper' => 'int' 'number_geoBysuper' => 'int',
'network_id' => 'int'
]; ];
protected $dates = [ protected $dates = [
@ -60,10 +66,12 @@ class AgentsPlus extends Model
'id', 'id',
'uid', 'uid',
'firstname', 'firstname',
'adresse',
'lastname', 'lastname',
'email', 'email',
'userlongitude', 'longitude',
'userlatitude', 'latitude',
'phone',
'active', 'active',
'created', 'created',
'openHours', 'openHours',
@ -75,6 +83,9 @@ class AgentsPlus extends Model
'code_parrain', 'code_parrain',
'category', 'category',
'code_membre', 'code_membre',
'number_geoBysuper' 'number_geoBysuper',
'network_id',
'code_dial',
'transactionNumber'
]; ];
} }

View File

@ -76,7 +76,7 @@ class WalletTransaction extends Model
return [ return [
'montant'=> 'required|numeric|min:1', 'montant'=> 'required|numeric|min:1',
'numCarte'=>'required|integer', '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', 'expiration_date'=>'required|date_format:m/Y|after_or_equal:today',
'type' =>'required|in:credit,debit', 'type' =>'required|in:credit,debit',
'id_wallet' => 'required|integer|min:0' 'id_wallet' => 'required|integer|min:0'

View File

@ -6,6 +6,7 @@
"type": "project", "type": "project",
"require": { "require": {
"php": "^7.2.5", "php": "^7.2.5",
"guzzlehttp/guzzle": "^6.5",
"laravel/lumen-framework": "^7.0" "laravel/lumen-framework": "^7.0"
}, },
"require-dev": { "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", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "4be8fced66fbffeff2568a82e343bfc0", "content-hash": "4f5df1d5bb479b7274f68ed7be7e047b",
"packages": [ "packages": [
{ {
"name": "brick/math", "name": "brick/math",
@ -292,6 +292,195 @@
], ],
"time": "2020-02-13T22:36:52+00:00" "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", "name": "illuminate/auth",
"version": "v7.3.0", "version": "v7.3.0",
@ -1986,6 +2175,56 @@
], ],
"time": "2019-01-08T18:20:26+00:00" "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", "name": "psr/log",
"version": "1.1.3", "version": "1.1.3",
@ -2081,6 +2320,46 @@
], ],
"time": "2017-10-23T01:57:42+00:00" "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", "name": "ramsey/collection",
"version": "1.0.1", "version": "1.0.1",

View File

@ -20,5 +20,6 @@ $router->post('/virement','CommissionController@virement');
// Wallets routes // Wallets routes
$router->group(['prefix' => '/wallets'] , function () use ($router){ $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');
}); });