From 8aa95391a9a1b2d80b9e57cfad5bb5a8ec424327 Mon Sep 17 00:00:00 2001 From: Djery-Tom Date: Thu, 29 Jun 2023 09:53:32 +0100 Subject: [PATCH] Setup Cinetpay payout url --- .env.example | 4 + app/Http/Controllers/CinetpayController.php | 226 ++++++++++++++++++++ app/Http/Controllers/PaymentController.php | 25 +++ app/Http/Controllers/StripeController.php | 18 +- composer.json | 1 + composer.lock | 200 ++++++++++++++++- config/variables.php | 4 +- resources/lang/en/errors.php | 3 +- resources/lang/en/validation.php | 1 + resources/lang/fr/errors.php | 3 +- resources/lang/fr/validation.php | 2 +- routes/web.php | 6 +- 12 files changed, 472 insertions(+), 21 deletions(-) diff --git a/.env.example b/.env.example index 6301951..ff278db 100644 --- a/.env.example +++ b/.env.example @@ -34,11 +34,15 @@ YOOMEE_PASSWORD=Ilink@2022 CINETPAY_API_KEY=176445314662bebd39b1b6f8.42908045 CINETPAY_SECRET_KEY=140983310662e79736e8ae45.38146680 +CINETPAY_TRANFERT_PASSWORD=gzfmtNjtxfQKl39T CINETPAY_SITE_ID=862736 CINETPAY_API_URL=https://api-checkout.cinetpay.com/v2/ +CINETPAY_TRANSFERT_URL=https://client.cinetpay.com/v1/ RECEIVER_NAME="Commune X" +#STRIPE_KEY=pk_live_51NAILHJ6IfmAiBwqJZ0gkW6n7xz5ofvDYiMXfDmTwDXZdcGGPLPjOPmlL6NtoY58cfDufllT1sPzFvyYFAaMXkvi00UiU4G9K5 +#STRIPE_SECRET=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 STRIPE_KEY=pk_test_51NAILHJ6IfmAiBwqd8t8ZL9WjTdcMOSDt46TfLT1DS1VPRTrEY0UC3RDUF0b0woE95FkiUt84JVfIXgHCco4v9MO00DcQ7LkmO STRIPE_SECRET=sk_test_51NAILHJ6IfmAiBwqgblKnBatWzIt3mtMYyw9Tc2RRFWUJJDVJ2VGKCBo3o0eTPCAigLB8lAbPiDiuvQ9Arwg0fad00fv7zIJdY STRIPE_WEBHOOK_SECRET=your-stripe-webhook-secret diff --git a/app/Http/Controllers/CinetpayController.php b/app/Http/Controllers/CinetpayController.php index 6c42cc8..93913c2 100644 --- a/app/Http/Controllers/CinetpayController.php +++ b/app/Http/Controllers/CinetpayController.php @@ -3,11 +3,14 @@ namespace App\Http\Controllers; use App\Enums\PaymentTransactionStatus; +use App\Models\PaymentAggregator; use App\Models\PaymentTransaction; use GuzzleHttp\Client; use Illuminate\Http\Request; use Illuminate\Support\Facades\Lang; use Illuminate\Support\Facades\Log; +use Propaganistas\LaravelPhone\PhoneNumber; +use Propaganistas\LaravelPhone\Rules\Phone; use Throwable; class CinetpayController extends Controller @@ -164,6 +167,229 @@ class CinetpayController extends Controller } } + + public function payOut(Request $request) + { + $this->validate($request, [ +// 'aggregator_id' => 'required|integer', + 'amount' => 'required|numeric|min:5', + 'currency' => 'required|string|size:3', + 'customer_id' => 'nullable', +// 'payment_method' => 'required|string|in:WALLET', + 'customer_email' => 'required|email', + 'customer_name' => 'nullable|string', + 'customer_surname' => 'required|string', + 'customer_phone_number' => ['nullable','string',(new Phone())->country(['CI','SN','ML','CM','TG','BF','CD','GN','BJ'])], + 'customer_address' => 'required|string', + 'customer_city' => 'required|string', + 'customer_country' => 'required|string|size:2|in:CI,SN,ML,CM,TG,BF,CD,GN,BJ', + 'reason' => 'required|string' + ]); + + $aggregator = PaymentAggregator::where('name','like','%cinetpay%')->firstOrFail(); + + try{ + + $country_code = $request->input('customer_country'); + $phoneNumber = str_replace(' ','',$request->input('customer_phone_number')); + + $phone = new PhoneNumber($phoneNumber, $country_code); + $nationalPhone = str_replace(' ','',$phone->formatNational()); + $phonePrefix = substr($phoneNumber, 1, strlen($phoneNumber) - strlen($nationalPhone) - 1); + + $amount = $request->input('amount'); + $payment_method = 'WALLET'; + + if($amount < 500){ + return $this->errorResponse('Minimun amount is 500'); + } + + + $client = new Client([ + 'base_uri' => config('variables.cinetpay_transfert_url') + ]); + + // Login + $loginResponse = $client->post('auth/login', [ + 'form_params' => [ + "apikey" => config('variables.cinetpay_api_key'), + "password" => config('variables.cinetpay_transfert_password'), + ], + 'timeout' => $this->timeout, + 'http_errors' => false + ]); + + $responseData = json_decode($loginResponse->getBody()->getContents()); + $token = $responseData->data->token; + $responseCode = $loginResponse->getStatusCode(); + if ($responseCode == 200 && !empty($token)) { + + // Add Contact + $contactResponse = $client->post('transfer/contact', [ + 'query' => [ + 'token' => $token + ], + 'form_params' => [ + "data" => json_encode( + [ + [ + 'prefix' => $phonePrefix, + 'phone' => $nationalPhone, + 'name' => $request->input('customer_name'), + 'surname' => $request->input('customer_surname'), + 'email' => $request->input('customer_email') + ] + ] + ), + ], + 'timeout' => $this->timeout, + 'http_errors' => false + ]); + + $responseCode = $contactResponse->getStatusCode(); + + + if ($responseCode == 200) { + + $transactionId = $this->getTransactionID(); + $transaction = PaymentTransaction::create([ + 'aggregator_id' => $aggregator->id, + "currency" => $request->input('currency'), + "transaction_id" => $transactionId, + "amount" => $amount, + "payment_method" => $payment_method, + 'status' => PaymentTransactionStatus::INITIATED, + "reason" => $request->input('reason'), + "customer_id" => $request->input('customer_id'), + "customer_name" => $request->input('customer_name'), + "customer_surname" => $request->input('customer_surname'), + "customer_email" => $request->input('customer_email'), + "customer_phone_number" => $phoneNumber, + "customer_address" => $request->input('customer_address'), + "customer_city" => $request->input('customer_city'), + "customer_country" => $request->input('customer_country'), + "customer_state" => $request->input('customer_state'), + "customer_zip_code" => $request->input('customer_zip_code'), + ]); + + + // Transfert Fund + $transfertResponse = $client->post('transfer/money/send/contact', [ + 'query' => [ + 'token' => $token + ], + 'form_params' => [ + "data" => json_encode( + [ + [ + 'client_transaction_id' => $transactionId, + 'amount' => $amount, + 'notify_url' => route('cinetpay.transfert.webhook'), + 'prefix' => $phonePrefix, + 'phone' => $nationalPhone, + ] + ] + ), + ], + 'timeout' => $this->timeout, + 'http_errors' => false + ]); + + $responseData = json_decode($transfertResponse->getBody()->getContents()); + $responseCode = $transfertResponse->getStatusCode(); + + if ($responseCode == 200) { + + $transaction->update([ + 'aggregator_payment_ref' => $responseData->data[0]?->transaction_id, + 'status' => PaymentTransactionStatus::PENDING, + ]); + + return $this->successResponse([ + 'message' => 'Transfert is pending', + 'transaction_id' => $transactionId, + 'transaction_status' => $transaction->status + ]); + } + } + } + + $errorMessage = $responseData?->description ?? $responseData?->message; + + }catch (Throwable $e){ + Log::error("Error CinetPay transfert payment"); + $errorMessage = $e->getMessage(); + Log::error($errorMessage); + } + + return $this->errorResponse($errorMessage ?? __('errors.unexpected_error')); + } + + public function captureTransfertResult(Request $request) + { + $this->validate($request, [ + 'transaction_id' => 'nullable|string', + 'client_transaction_id' => 'nullable|string|exists:payment_transactions,transaction_id' + ]); + + if($request->has('transaction_id') && $request->has('client_transaction_id')){ + $transaction = PaymentTransaction::where('transaction_id',$request->input('client_transaction_id'))->firstOrFail(); + try { + + $client = new Client([ + 'base_uri' => config('variables.cinetpay_transfert_url') + ]); + + // Login + $loginResponse = $client->post('auth/login', [ + 'form_params' => [ + "apikey" => config('variables.cinetpay_api_key'), + "password" => config('variables.cinetpay_transfert_password'), + ], + 'timeout' => $this->timeout + ]); + + $responseData = json_decode($loginResponse->getBody()->getContents()); + $token = $responseData->data->token; + $responseCode = $loginResponse->getStatusCode(); + if ($responseCode == 200 && !empty($token)) { + + $response = $client->get('transfer/check/money', [ + 'query' => [ + 'token' => $token, + 'transaction_id' => $request->input('transaction_id') + ], + ]); + + $responseData = json_decode($response->getBody()->getContents()); + $responseCode = $response->getStatusCode(); + if ($responseCode == 200) { + + $transaction->update([ + 'status' => $responseData->data->status, + 'payment_method_exact' => $responseData->data->payment_method ?? null, + 'payment_date' => $responseData->data->payment_date ?? null, + ]); + + } + } + + } catch (Throwable $e) { + Log::info("Get Cinetpay Transfert Status Error"); + $errorMessage = $e->getMessage(); + Log::info($errorMessage); + $transaction->update([ + 'status' => PaymentTransactionStatus::REFUSED + ]); + } + + return $this->errorResponse($errorMessage ?? __('errors.unexpected_error')); + }else{ + return response("OK"); + } + } + + public function capturePaymentResult(Request $request) { $this->validate($request, [ diff --git a/app/Http/Controllers/PaymentController.php b/app/Http/Controllers/PaymentController.php index c7378ac..69bbe60 100644 --- a/app/Http/Controllers/PaymentController.php +++ b/app/Http/Controllers/PaymentController.php @@ -67,6 +67,31 @@ class PaymentController extends Controller } } + public function payOut(Request $request) + { + $this->validate($request, [ + 'network_name' => 'nullable|string', + 'payment_method' => 'required|string|in:WALLET,CARD', + ]); + + $paymentMethod = $request->input('payment_method'); + + if($paymentMethod === 'WALLET'){ + $networkName = strtolower($request->input('network_name')); + + if(str_contains($networkName,'orange') || str_contains($networkName,'mtn')){ + return app(CinetpayController::class)->payOut($request); + } + } + + if($paymentMethod == 'CARD'){ + return app(StripeController::class)->payOut($request); + } + + + return $this->errorResponse(__('errors.network_not_taken')); + } + public function paymentResult(Request $request) { if($request->has('transaction_id')){ diff --git a/app/Http/Controllers/StripeController.php b/app/Http/Controllers/StripeController.php index 658d80a..710b33a 100644 --- a/app/Http/Controllers/StripeController.php +++ b/app/Http/Controllers/StripeController.php @@ -83,11 +83,6 @@ class StripeController extends Controller $amount = $request->input('amount'); $currency = $request->input('currency'); - if ($currency != 'USD') { - // Convertir en multiple de 5 - $amount = $this->roundUpToAny($amount); - } - if($amount < 325 && $currency == 'XAF'){ $amount = 325; } @@ -256,8 +251,8 @@ class StripeController extends Controller 'customer_address' => 'required|string', 'customer_city' => 'required|string', 'customer_country' => 'required|string|size:2', -// 'customer_state' => 'required_if:customer_country,US|string|size:2', //Etat du pays dans lequel se trouve le client. Cette valeur est obligatoire si le client se trouve au États Unis d’Amérique (US) ou au Canada (CA) -// 'customer_zip_code' => 'required_if:customer_country,US|string|size:5', + 'customer_state' => 'required_if:customer_country,US|string|size:2', //Etat du pays dans lequel se trouve le client. Cette valeur est obligatoire si le client se trouve au États Unis d’Amérique (US) ou au Canada (CA) + 'customer_zip_code' => 'required_if:customer_country,US|string|size:5', 'reason' => 'required|string' ]); @@ -269,11 +264,6 @@ class StripeController extends Controller $amount = $request->input('amount'); $currency = $request->input('currency'); - if ($currency != 'USD') { - // Convertir en multiple de 5 - $amount = $this->roundUpToAny($amount); - } - if($amount < 325 && $currency == 'XAF'){ $amount = 325; } @@ -389,8 +379,8 @@ class StripeController extends Controller 'customer_address' => 'required|string', 'customer_city' => 'required|string', 'customer_country' => 'required|string|size:2', -// 'customer_state' => 'required_if:customer_country,US|string|size:2', //Etat du pays dans lequel se trouve le client. Cette valeur est obligatoire si le client se trouve au États Unis d’Amérique (US) ou au Canada (CA) -// 'customer_zip_code' => 'required_if:customer_country,US|string|size:5', + 'customer_state' => 'required_if:customer_country,US|string|size:2', //Etat du pays dans lequel se trouve le client. Cette valeur est obligatoire si le client se trouve au États Unis d’Amérique (US) ou au Canada (CA) + 'customer_zip_code' => 'required_if:customer_country,US|string|size:5', 'reason' => 'required|string' ]); diff --git a/composer.json b/composer.json index bd4e7f6..7e45b6e 100644 --- a/composer.json +++ b/composer.json @@ -14,6 +14,7 @@ "guzzlehttp/guzzle": "^7.4", "illuminate/session": "^9.52", "laravel/lumen-framework": "^9.0", + "propaganistas/laravel-phone": "^5.0", "stripe/stripe-php": "^10.13" }, "require-dev": { diff --git a/composer.lock b/composer.lock index 8bfcc07..5de0210 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "f0ebadd8749412a4cd14d3ae29e1d742", + "content-hash": "81090437c0e646c7e1df7fd291f0a3ac", "packages": [ { "name": "brick/math", @@ -1095,6 +1095,132 @@ ], "time": "2022-02-20T15:07:15+00:00" }, + { + "name": "giggsey/libphonenumber-for-php", + "version": "8.13.15", + "source": { + "type": "git", + "url": "https://github.com/giggsey/libphonenumber-for-php.git", + "reference": "b294846e26ea985e6b1fbdfaf15387daca60c2de" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/giggsey/libphonenumber-for-php/zipball/b294846e26ea985e6b1fbdfaf15387daca60c2de", + "reference": "b294846e26ea985e6b1fbdfaf15387daca60c2de", + "shasum": "" + }, + "require": { + "giggsey/locale": "^1.7|^2.0", + "php": ">=5.3.2", + "symfony/polyfill-mbstring": "^1.17" + }, + "require-dev": { + "pear/pear-core-minimal": "^1.9", + "pear/pear_exception": "^1.0", + "pear/versioncontrol_git": "^0.5", + "phing/phing": "^2.7", + "php-coveralls/php-coveralls": "^1.0|^2.0", + "symfony/console": "^2.8|^3.0|^v4.4|^v5.2", + "symfony/phpunit-bridge": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "8.x-dev" + } + }, + "autoload": { + "psr-4": { + "libphonenumber\\": "src/" + }, + "exclude-from-classmap": [ + "/src/data/", + "/src/carrier/data/", + "/src/geocoding/data/", + "/src/timezone/data/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Joshua Gigg", + "email": "giggsey@gmail.com", + "homepage": "https://giggsey.com/" + } + ], + "description": "PHP Port of Google's libphonenumber", + "homepage": "https://github.com/giggsey/libphonenumber-for-php", + "keywords": [ + "geocoding", + "geolocation", + "libphonenumber", + "mobile", + "phonenumber", + "validation" + ], + "support": { + "issues": "https://github.com/giggsey/libphonenumber-for-php/issues", + "source": "https://github.com/giggsey/libphonenumber-for-php" + }, + "time": "2023-06-23T07:47:45+00:00" + }, + { + "name": "giggsey/locale", + "version": "2.4", + "source": { + "type": "git", + "url": "https://github.com/giggsey/Locale.git", + "reference": "a6b33dfc9e8949b7e28133c4628b29cd9f1850bb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/giggsey/Locale/zipball/a6b33dfc9e8949b7e28133c4628b29cd9f1850bb", + "reference": "a6b33dfc9e8949b7e28133c4628b29cd9f1850bb", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "require-dev": { + "ext-json": "*", + "pear/pear-core-minimal": "^1.9", + "pear/pear_exception": "^1.0", + "pear/versioncontrol_git": "^0.5", + "phing/phing": "^2.7", + "php-coveralls/php-coveralls": "^2.0", + "phpunit/phpunit": "^8.5|^9.5", + "symfony/console": "^5.0|^6.0", + "symfony/filesystem": "^5.0|^6.0", + "symfony/finder": "^5.0|^6.0", + "symfony/process": "^5.0|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Giggsey\\Locale\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Joshua Gigg", + "email": "giggsey@gmail.com", + "homepage": "https://giggsey.com/" + } + ], + "description": "Locale functions required by libphonenumber-for-php", + "support": { + "issues": "https://github.com/giggsey/Locale/issues", + "source": "https://github.com/giggsey/Locale/tree/2.4" + }, + "time": "2023-04-13T07:40:58+00:00" + }, { "name": "graham-campbell/result-type", "version": "v1.1.1", @@ -3787,6 +3913,78 @@ ], "time": "2023-02-25T19:38:58+00:00" }, + { + "name": "propaganistas/laravel-phone", + "version": "5.0.3", + "source": { + "type": "git", + "url": "https://github.com/Propaganistas/Laravel-Phone.git", + "reference": "32aa5ed857a9a6c1a80a0ebdbff4676f2f8e37cc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Propaganistas/Laravel-Phone/zipball/32aa5ed857a9a6c1a80a0ebdbff4676f2f8e37cc", + "reference": "32aa5ed857a9a6c1a80a0ebdbff4676f2f8e37cc", + "shasum": "" + }, + "require": { + "giggsey/libphonenumber-for-php": "^7.0|^8.0", + "illuminate/contracts": "^9.0|^10.0", + "illuminate/support": "^9.0|^10.0", + "illuminate/validation": "^9.0|^10.0", + "php": "^8.0" + }, + "require-dev": { + "laravel/pint": "^1.4", + "nunomaduro/larastan": "^2.4", + "orchestra/testbench": "*", + "phpunit/phpunit": "^9.5.10" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Propaganistas\\LaravelPhone\\PhoneServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Propaganistas\\LaravelPhone\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Propaganistas", + "email": "Propaganistas@users.noreply.github.com" + } + ], + "description": "Adds phone number functionality to Laravel based on Google's libphonenumber API.", + "keywords": [ + "laravel", + "libphonenumber", + "phone", + "validation" + ], + "support": { + "issues": "https://github.com/Propaganistas/Laravel-Phone/issues", + "source": "https://github.com/Propaganistas/Laravel-Phone/tree/5.0.3" + }, + "funding": [ + { + "url": "https://github.com/Propaganistas", + "type": "github" + } + ], + "time": "2023-02-04T16:13:42+00:00" + }, { "name": "psr/cache", "version": "3.0.0", diff --git a/config/variables.php b/config/variables.php index d9792e5..f0b1738 100644 --- a/config/variables.php +++ b/config/variables.php @@ -15,7 +15,9 @@ return [ 'cinetpay_api_key' => env('CINETPAY_API_KEY', ''), 'cinetpay_secret_key' => env('CINETPAY_SECRET_KEY', ''), 'cinetpay_site_id' => env('CINETPAY_SITE_ID', ''), - 'cinetpay_api_url' => env('CINETPAY_API_URL', ''), + 'cinetpay_transfert_password' => env('CINETPAY_TRANFERT_PASSWORD', ''), + 'cinetpay_transfert_url' => env('CINETPAY_TRANSFERT_URL', ''), + 'stripe_key' => env('STRIPE_KEY', ''), 'stripe_secret' => env('STRIPE_SECRET', ''), 'stripe_webhook_secret' => env('STRIPE_WEBHOOK_SECRET', ''), diff --git a/resources/lang/en/errors.php b/resources/lang/en/errors.php index 87acb44..f0c19a6 100755 --- a/resources/lang/en/errors.php +++ b/resources/lang/en/errors.php @@ -4,5 +4,6 @@ return [ 'unexpected_error' => 'Unexpected error. Try later', 'validation_error' => 'The field :field has :validation', 'service_unavailable' => 'Service unavailable', - 'timeout' => "The server did not receive a complete response within the timeout period. Please Try again later" + 'timeout' => "The server did not receive a complete response within the timeout period. Please Try again later", + 'network_not_taken' => "Network not taken into account" ]; diff --git a/resources/lang/en/validation.php b/resources/lang/en/validation.php index ce1d80d..fcf2bb3 100644 --- a/resources/lang/en/validation.php +++ b/resources/lang/en/validation.php @@ -117,6 +117,7 @@ return [ 'uploaded' => 'The :attribute failed to upload.', 'url' => 'The :attribute format is invalid.', 'uuid' => 'The :attribute must be a valid UUID.', + 'phone' => 'The :attribute field must be a valid number.', /* |-------------------------------------------------------------------------- diff --git a/resources/lang/fr/errors.php b/resources/lang/fr/errors.php index 80cf491..000e293 100755 --- a/resources/lang/fr/errors.php +++ b/resources/lang/fr/errors.php @@ -4,5 +4,6 @@ return [ 'unexpected_error' => 'Erreur inattendue. Essayer plus tard', 'validation_error' => 'Le champ :field a :validation', 'service_unavailable' => 'Service non disponible', - 'timeout' => "Le serveur n'a pas reçu de réponse complete dans le délai imparti. Essayer plus tard" + 'timeout' => "Le serveur n'a pas reçu de réponse complete dans le délai imparti. Essayer plus tard", + 'network_not_taken' => "Réseau non pris en compte" ]; diff --git a/resources/lang/fr/validation.php b/resources/lang/fr/validation.php index 935410c..3c1b801 100644 --- a/resources/lang/fr/validation.php +++ b/resources/lang/fr/validation.php @@ -132,7 +132,7 @@ return [ 'rule-name' => 'custom-message', ], ], - + 'phone' => 'Le champ :attribute doit être un numéro valide.', 'attributes' => [ 'address' => 'adresse', 'age' => 'âge', diff --git a/routes/web.php b/routes/web.php index 3efc625..3d088a4 100644 --- a/routes/web.php +++ b/routes/web.php @@ -39,6 +39,7 @@ $router->group(['middleware' => 'session'], function () use ($router) { */ $router->addRoute(['GET','POST'],'/yoomee/v2/webhook', ['as' => 'yoomee.v2.webhook' , 'uses' => 'YoomeeV2Controller@capturePaymentResult']); $router->addRoute(['GET','POST'],'/cinetpay/webhook', ['as' => 'cinetpay.webhook' , 'uses' => 'CinetpayController@capturePaymentResult']); +$router->addRoute(['GET','POST'],'/cinetpay/transfert/webhook', ['as' => 'cinetpay.transfert.webhook' , 'uses' => 'CinetpayController@captureTransfertResult']); $router->addRoute(['GET','POST'],'/stripe/webhook', ['as' => 'stripe.webhook' , 'uses' => 'StripeController@capturePaymentResult']); $router->addRoute(['GET','POST'],'/paymentResult', ['as' => 'paymentResult' , 'uses' => 'PaymentController@paymentResult']); @@ -51,7 +52,7 @@ $router->group(['middleware' => 'auth'], function () use ($router) { $router->get('methods','PaymentController@getMethods'); $router->post('pay','PaymentController@pay'); $router->get('checkStatus/{transaction_id}','PaymentController@checkStatus'); - + $router->post('payOut','PaymentController@payOut'); /** * Yoomee Endpoints @@ -72,6 +73,7 @@ $router->group(['middleware' => 'auth'], function () use ($router) { $router->group(['prefix' => 'cinetpay'], function () use ($router) { $router->get('methods',['as' => 'cinetpay.methods', 'uses' => 'CinetpayController@getMethods']); $router->addRoute(['GET','POST'],'pay',['as' => 'cinetpay.pay', 'uses' => 'CinetpayController@pay']); + $router->post('payOut',['as' => 'cinetpay.payout', 'uses' => 'CinetpayController@payOut']); }); /** @@ -82,7 +84,7 @@ $router->group(['middleware' => 'auth'], function () use ($router) { $router->get('methods',['as' => 'stripe.methods', 'uses' => 'StripeController@getMethods']); $router->post('pay',['as' => 'stripe.pay', 'uses' => 'StripeController@pay']); $router->post('payIn',['as' => 'stripe.submit', 'uses' => 'StripeController@payIn']); - $router->post('payOut',['as' => 'stripe.submit', 'uses' => 'StripeController@payOut']); + $router->post('payOut',['as' => 'stripe.payout', 'uses' => 'StripeController@payOut']); }); });