Guide

Guide C++ pour créer et payer une transaction YKNPG (libcurl).

Guide C++ pour créer et payer une transaction YKNPG (libcurl).

Pré-requis

  • g++ avec C++17, en-tĂŞtes libcurl.
  • Variables d'env YKNPG_API_TOKEN et optionnelle YKNPG_BASE_URL.
  1. Créer le dossier
  • mkdir -p demo_cpp && cd demo_cpp
  1. Écrire le programme
  • Fichier : transaction.cpp
#include <curl/curl.h>
#include <cstdlib>
#include <iostream>
#include <sstream>
#include <string>

struct Memory {
    std::string data;
};

size_t writeCallback(char* ptr, size_t size, size_t nmemb, void* userdata) {
    size_t total = size * nmemb;
    static_cast<Memory*>(userdata)->data.append(ptr, total);
    return total;
}

std::string baseUrl() {
    const char* env = std::getenv("YKNPG_BASE_URL");
    return env ? env : "https://yknpg.ngoul.com/api/v1";
}

int main(int argc, char** argv) {
    if (argc < 3) {
        std::cerr << "Usage: ./transaction <phone> <amount>\n";
        return 1;
    }

    const char* token = std::getenv("YKNPG_API_TOKEN");
    if (!token) {
        std::cerr << "Set YKNPG_API_TOKEN\n";
        return 1;
    }

    curl_global_init(CURL_GLOBAL_DEFAULT);
    CURL* curl = curl_easy_init();
    Memory mem;

    std::ostringstream payload;
    payload << "{\"amount\":" << argv[2]
            << ",\"provider\":\"ORANGE_MONEY\"," 
            << "\"user_infos\":{\"number\":\"" << argv[1] << "\"},"
            << "\"callback_url\":\"http://example.com\"," 
            << "\"callback_method\":\"POST\"," 
            << "\"your_message\":\"pay this\"," 
            << "\"your_order_ref\":\"demo-1\"," 
            << "\"provider_fees_on_customer\":true}";

    std::string url = baseUrl() + "/transactions/";
    struct curl_slist* headers = nullptr;
    std::string auth = "Authorization: Bearer " + std::string(token);
    headers = curl_slist_append(headers, "Content-Type: application/json");
    headers = curl_slist_append(headers, auth.c_str());

    curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
    curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
    curl_easy_setopt(curl, CURLOPT_POSTFIELDS, payload.str().c_str());
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writeCallback);
    curl_easy_setopt(curl, CURLOPT_WRITEDATA, &mem);

    CURLcode res = curl_easy_perform(curl);
    if (res != CURLE_OK) {
        std::cerr << "Create failed: " << curl_easy_strerror(res) << "\n";
    } else {
        std::cout << "Transaction response:\n" << mem.data << "\n";
    }

    curl_slist_free_all(headers);
    curl_easy_cleanup(curl);
    curl_global_cleanup();
    return 0;
}
  1. Compiler
  • g++ -std=c++17 transaction.cpp -o transaction -lcurl
  1. Exécuter
  • YKNPG_API_TOKEN=token ./transaction <phone> <amount>

Remarques

  • Étendez avec un POST supplĂ©mentaire vers /transactions/{uuid}/pay/ et un polling GET ; prĂ©fĂ©rez une bibliothèque JSON (par ex. nlohmann/json) pour parser la rĂ©ponse.