Un paiement est traité de façon asynchrone : l'API répond avant que le client n'ait payé. Deux moyens d'en connaître l'issue.
Si vous n'avez pas encore choisi votre mode de paiement, commencez par Les trois produits.
Des clés, un magasin
- Un compte entreprise Kelyko et des clés API (voir Authentification)
- Au moins un magasin (voir Gestion des magasins)
- Pour le paiement en magasin, un terminal configuré (voir Gestion des terminaux)
Le webhook, à privilégier
Configurez un endpoint webhook : Kelyko l'appelle dès que la transaction se termine, sans que vous ayez à demander quoi que ce soit. C'est la seule confirmation fiable qu'un paiement a abouti.
Voir Webhooks pour la mise en place et la vérification de signature.
Interroger le statut
Vous pouvez interroger le statut d'une demande de paiement via l'API :
Pour une demande de paiement (retourne le statut) :
Exemple · cURL
curl -X GET "https://api.kelyko.invalid/partner_api/payment_requests/{paymentRequestId}" \
-H "X-API-KEY: your_api_key_here" \
-H "X-API-KEY-ID: your_api_key_id_here"
Exemple · PHP
<?php
$paymentRequestId = 'd22c81f3-ee04-4ec5-8bd2-cd8af5dabcfc';
$ch = curl_init("https://api.kelyko.invalid/partner_api/payment_requests/{$paymentRequestId}");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'X-API-KEY: your_api_key_here',
'X-API-KEY-ID: your_api_key_id_here'
]);
$response = curl_exec($ch);
curl_close($ch);
$paymentRequest = json_decode($response, true);
?>
Exemple · Node.js
const paymentRequestId = 'd22c81f3-ee04-4ec5-8bd2-cd8af5dabcfc';
const response = await fetch(
`https://api.kelyko.invalid/partner_api/payment_requests/${paymentRequestId}`,
{
headers: {
'X-API-KEY': 'your_api_key_here',
'X-API-KEY-ID': 'your_api_key_id_here'
}
}
);
const paymentRequest = await response.json();
Exemple · Ruby
require 'net/http'
require 'json'
require 'uri'
payment_request_id = 'd22c81f3-ee04-4ec5-8bd2-cd8af5dabcfc'
uri = URI("https://api.kelyko.invalid/partner_api/payment_requests/#{payment_request_id}")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Get.new(uri.path)
request['X-API-KEY'] = 'your_api_key_here'
request['X-API-KEY-ID'] = 'your_api_key_id_here'
response = http.request(request)
payment_request = JSON.parse(response.body)
Exemple · Python
import requests
payment_request_id = 'd22c81f3-ee04-4ec5-8bd2-cd8af5dabcfc'
url = f'https://api.kelyko.invalid/partner_api/payment_requests/{payment_request_id}'
headers = {
'X-API-KEY': 'your_api_key_here',
'X-API-KEY-ID': 'your_api_key_id_here'
}
response = requests.get(url, headers=headers)
payment_request = response.json()
Pour un lien de paiement (retourne canReceivePayments, pas de statut) :
Exemple · cURL
curl -X GET "https://api.kelyko.invalid/partner_api/payment_links/{paymentLinkId}" \
-H "X-API-KEY: your_api_key_here" \
-H "X-API-KEY-ID: your_api_key_id_here"
Exemple · PHP
<?php
$paymentLinkId = 'd22c81f3-ee04-4ec5-8bd2-cd8af5dabcfc';
$ch = curl_init("https://api.kelyko.invalid/partner_api/payment_links/{$paymentLinkId}");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'X-API-KEY: your_api_key_here',
'X-API-KEY-ID: your_api_key_id_here'
]);
$response = curl_exec($ch);
curl_close($ch);
$paymentLink = json_decode($response, true);
?>
Exemple · Node.js
const paymentLinkId = 'd22c81f3-ee04-4ec5-8bd2-cd8af5dabcfc';
const response = await fetch(
`https://api.kelyko.invalid/partner_api/payment_links/${paymentLinkId}`,
{
headers: {
'X-API-KEY': 'your_api_key_here',
'X-API-KEY-ID': 'your_api_key_id_here'
}
}
);
const paymentLink = await response.json();
Exemple · Ruby
require 'net/http'
require 'json'
require 'uri'
payment_link_id = 'd22c81f3-ee04-4ec5-8bd2-cd8af5dabcfc'
uri = URI("https://api.kelyko.invalid/partner_api/payment_links/#{payment_link_id}")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Get.new(uri.path)
request['X-API-KEY'] = 'your_api_key_here'
request['X-API-KEY-ID'] = 'your_api_key_id_here'
response = http.request(request)
payment_link = JSON.parse(response.body)
Exemple · Python
import requests
payment_link_id = 'd22c81f3-ee04-4ec5-8bd2-cd8af5dabcfc'
url = f'https://api.kelyko.invalid/partner_api/payment_links/{payment_link_id}'
headers = {
'X-API-KEY': 'your_api_key_here',
'X-API-KEY-ID': 'your_api_key_id_here'
}
response = requests.get(url, headers=headers)
payment_link = response.json()
Pour les liens à usage unique (allowMultiplePayments: false), canReceivePayments: false signifie que le paiement a eu lieu. C'est une façon de vérifier la complétion en complément des webhooks.
Et ensuite
- Gérer les échecs : chaque erreur renvoyée par l'API et quoi en faire
- Webhooks : recevoir et vérifier les notifications