Version de travail · contenus et exemples à affiner Voir les 95 pages ↗
Parlons de votre projet ↗
Encaissements / P020

Suivre un paiement

Adaptation éditoriale
Référence de travail. Les routes, schémas, limites et procédures hérités du référentiel sont à aligner avec l’API d’Éric. Ils ne prouvent pas une fonctionnalité livrée. Les hôtes .invalid sont des exemples inertes.

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

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