Guide

Guide d'intégration Python pour créer et payer une transaction YKNPG.

Guide d'intégration Python pour créer et payer une transaction YKNPG.

Pré-requis

  • Python 3.10+, accès internet vers votre API YKNPG.
  • Un jeton bearer stocké comme YKNPG_API_TOKEN (utiliser .env, ne jamais le coder en dur).
  • requests et python-dotenv installés.
  1. Créer le dossier du projet
  • mkdir -p demo_python && cd demo_python
  • python -m venv .venv && source .venv/bin/activate
  1. Installer les dépendances
  • pip install requests python-dotenv
  1. Ajouter le fichier d'environnement
  • Fichier : .env
YKNPG_API_TOKEN=remplacez-par-votre-jeton
YKNPG_BASE_URL=https://yknpg.ngoul.com/api/v1
  1. Créer le script de transaction
  • Fichier : create_transaction.py
import os
import time
from dotenv import load_dotenv
import requests

load_dotenv()

API_TOKEN = os.environ["YKNPG_API_TOKEN"]
BASE_URL = os.environ.get("YKNPG_BASE_URL", "https://yknpg.ngoul.com/api/v1")


def create_transaction(amount: int, phone: str) -> dict:
    payload = {
        "amount": amount,
        "provider": "ORANGE_MONEY",
        "user_infos": {"number": phone},
        "callback_url": "http://example.com",
        "callback_method": "POST",
        "your_message": "pay this",
        "your_order_ref": "demo-1",
        "provider_fees_on_customer": True,
    }
    resp = requests.post(
        f"{BASE_URL}/transactions/",
        headers={"Authorization": f"Bearer {API_TOKEN}"},
        json=payload,
        timeout=10,
    )
    resp.raise_for_status()
    return resp.json()


def pay_transaction(uuid: str) -> dict:
    resp = requests.post(
        f"{BASE_URL}/transactions/{uuid}/pay/",
        headers={"Authorization": f"Bearer {API_TOKEN}"},
        timeout=10,
    )
    resp.raise_for_status()
    return resp.json()


def poll_status(uuid: str) -> str:
    status = "new"
    while status in {"new", "paying"}:
        time.sleep(5)
        resp = requests.get(
            f"{BASE_URL}/transactions/{uuid}/",
            headers={"Authorization": f"Bearer {API_TOKEN}"},
            timeout=10,
        )
        resp.raise_for_status()
        status = resp.json()["status"]
        print(f"Current status: {status}")
    return status


if __name__ == "__main__":
    phone = input("Enter phone number: ")
    amount = int(input("Enter amount: "))

    transaction = create_transaction(amount, phone)
    print("Gateway instructions:", transaction.get("instructions"))

    paid = pay_transaction(transaction["uuid"])
    print("Post-pay instructions:", paid.get("instructions"))

    final_status = poll_status(transaction["uuid"])
    print("Final status:", final_status)
  1. Exécuter
  • python create_transaction.py
  • Suivez les invites du terminal ; partagez les instructions avec le payeur.

Remarques

  • Le flux reflète create_transaction_vapi : création → affichage des instructions → paiement → polling.
  • Ajustez provider et callback_url selon vos besoins ; gardez les secrets dans .env.