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.
  • .env avec YKNPG_API_TOKEN.
  1. Créer le projet
  • composer create-project laravel/laravel demo-laravel
  • cd demo-laravel
  1. Ajouter les variables d'environnement
  • Fichier : .env
YKNPG_API_TOKEN=remplacez-par-votre-jeton
YKNPG_BASE_URL=https://yknpg.ngoul.com/api/v1
  1. 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,
        ]);
    }
}
  1. Ajouter la route
  • Fichier : routes/api.php
use App\Http\Controllers\PaymentController;
Route::post('/pay', [PaymentController::class, 'pay']);
  1. 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'),
],
  1. Exécuter
  • php artisan serve
  • Envoyer un POST JSON {"phone": "...", "amount": 1000} vers http://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.