---
title: Clients : Node, PHP, Python, Go
description: Clients API Coinetic prêts à l'emploi pour Node.js, PHP, Python et Go, un fichier sans dépendance : signature des requêtes, factures, webhooks.
url: https://coinetic.money/fr/docs/sdks/
lang: fr
---

# Clients et exemples

Chaque client tient en un seul fichier, sans dépendance externe. Copiez-le dans votre projet : vous disposez aussitôt de la signature des requêtes, de la création et de la lecture des factures et de la vérification des webhooks.

### Node.js

Node 22+. Classes `CoineticClient`, `CoineticError`, fonction `verifyWebhook`.

    Télécharger cryptopay.js ↓

### PHP

PHP 8.1+, extensions curl et json. `\Cryptopay\Client`, `\Cryptopay\verify_webhook`.

    Télécharger Cryptopay.php ↓

### Python

Python 3.9+, bibliothèque standard uniquement. `CoineticClient`, `verify_webhook`.

    Télécharger cryptopay.py ↓

### Go

Go 1.22+, bibliothèque standard uniquement. Package `cryptopayclient`.

    Télécharger cryptopay.go ↓

## Contenu

| Fonction | Node.js | PHP | Python | Go |
| --- | --- | --- | --- | --- |
| Signer une requête | `signRequest` | `sign_request` | `sign_request` | `SignRequest` |
| Créer une facture | `createInvoice` | `createInvoice` | `create_invoice` | `CreateInvoice` |
| Lire une facture | `getInvoice` | `getInvoice` | `get_invoice` | `GetInvoice` |
| Vérifier un webhook | `verifyWebhook` | `verify_webhook` | `verify_webhook` | `VerifyWebhook` |
| Statuts « livrable » | `PAID_STATUSES` | `PAID_STATUSES` | `PAID_STATUSES` | `PaidStatuses` |

Les noms techniques des fichiers et des classes (`cryptopay.*`, `CryptopayClient`) sont historiques et ne changeront pas ; en Node.js et en Python, les alias `CoineticClient` et `CoineticError` sont disponibles.

## Les quatre clients validés sur les mêmes valeurs de référence

Les signatures de requêtes et de webhooks de tous les clients correspondent aux [valeurs de référence](https://coinetic.money/fr/docs/authentication/#test-vectors). Vous écrivez un client dans un autre langage ? Commencez par obtenir ces mêmes valeurs : c'est le moyen le plus rapide de trouver une erreur de signature.

## Flux minimal

`pseudo-code`

```
invoice = client.createInvoice({order_id, price_amount: "3.00", price_currency: "USD",
                                return_url: "https://shop.example/orders/42"},
                               idempotencyKey = "order-42")
redirect(invoice.checkout_url)

on POST /webhooks/coinetic (raw body!):
    event = verifyWebhook(WEBHOOK_SECRET, headers, rawBody)   # sinon 400/401
    if seen(event.id): return 200                             # livraison en double
    inv = client.getInvoice(event.data.invoice_id)            # revérification
    if inv.status in PAID_STATUSES: grantOnce(inv.order_id)
    return 200
```

## Ce que les clients ne font pas

- Ils ne stockent aucun secret : la clé et le secret leur sont fournis de l'extérieur, via des variables d'environnement ou un gestionnaire de secrets.
- Ils ne conservent pas les `X-Webhook-Id` déjà traités : c'est le rôle de votre base de données.
- Ils ne convertissent pas les montants en nombres : tous les montants sont des chaînes.
- Ils ne relancent pas les requêtes d'eux-mêmes : relancez avec le même `Idempotency-Key` en cas de `429`, de `5xx` ou d'erreur réseau.
- Ils ne fonctionnent ni dans le navigateur ni dans une application mobile, uniquement côté serveur : c'est là que réside le secret.
