Guide
Guide Laravel pour encapsuler le flux YKNPG dans un contrôleur.
Guide Laravel pour encapsuler le flux YKNPG dans un contrôleur.
Pré-requis
- PHP 8.1+, Composer, installeur Laravel ou squelette
laravel/laravel. .envavecYKNPG_API_TOKEN.
- Créer le projet
composer create-project laravel/laravel demo-laravelcd demo-laravel
- Ajouter les variables d'environnement
- Fichier :
.env
YKNPG_API_TOKEN=remplacez-par-votre-jeton
YKNPG_BASE_URL=https://yknpg.ngoul.com/api/v1
- Créer le contrôleur
- Fichier :
app/Http/Controllers/PaymentController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Http;
class PaymentController extends Controller
{
public function pay(Request $request)
{
$request->validate([
'phone' => 'required|string',
'amount' => 'required|integer|min:1',
]);
$token = config('services.yknpg.token', env('YKNPG_API_TOKEN'));
$base = config('services.yknpg.base', env('YKNPG_BASE_URL', 'https://yknpg.ngoul.com/api/v1'));
$client = Http::withToken($token)->baseUrl($base)->timeout(10);
$payload = [
'amount' => (int) $request->amount,
'provider' => 'ORANGE_MONEY',
'user_infos' => ['number' => $request->phone],
'callback_url' => 'http://example.com',
'callback_method' => 'POST',
'your_message' => 'pay this',
'your_order_ref' => 'demo-1',
'provider_fees_on_customer' => true,
];
$created = $client->post('/transactions/', $payload)->throw()->json();
$paid = $client->post("/transactions/{$created['uuid']}/pay/")->throw()->json();
$status = $paid['status'] ?? 'new';
while (in_array($status, ['new', 'paying'])) {
sleep(5);
$status = $client->get("/transactions/{$created['uuid']}/")->throw()->json('status');
}
return response()->json([
'instructions' => $created['instructions'] ?? null,
'post_pay_instructions' => $paid['instructions'] ?? null,
'final_status' => $status,
]);
}
}
- Ajouter la route
- Fichier :
routes/api.php
use App\Http\Controllers\PaymentController;
Route::post('/pay', [PaymentController::class, 'pay']);
- Alias de config optionnel
- Fichier :
config/services.php(ajouter)
'yknpg' => [
'token' => env('YKNPG_API_TOKEN'),
'base' => env('YKNPG_BASE_URL', 'https://yknpg.ngoul.com/api/v1'),
],
- Exécuter
php artisan serve- Envoyer un POST JSON
{"phone": "...", "amount": 1000}vershttp://127.0.0.1:8000/api/pay.
Remarques
- Gardez le jeton côté serveur ; réutilisez le contrôleur/service dans des jobs ou files si nécessaire.