Guide
Integrer le paiment avec YKNPG dans une application C++
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_TOKENet optionnelleYKNPG_BASE_URL.
- Créer le dossier
mkdir -p demo_cpp && cd demo_cpp
- É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;
}
- Compiler
g++ -std=c++17 transaction.cpp -o transaction -lcurl
- 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.