Documentation / Intégration
Page de paiement
La page de paiement, c'est nous qui la fournissons. Votre serveur se contente d'y rediriger le client, via le checkout_url renvoyé à la création de la facture.
Ce que voit le client
- Le montant de la commande et le compte à rebours de validité de la facture.
- Le choix de la devise : uniquement les actifs de la facture disponibles à cet instant.
- Une fois la devise choisie : un QR code, le montant exact avec un bouton « Copier », l'adresse, un avertissement sur le réseau et un lien « Ouvrir dans le portefeuille » (BIP21, EIP-681, Solana Pay, TRON).
- Un statut qui se met à jour tout seul : « Paiement détecté » → « Confirmations 7/20 » → « Paiement reçu ».
- Un bouton « Retour à la boutique » qui mène à votre
return_url.
Tant que rien n'est payé, le client peut changer de devise. Dès le premier paiement, la devise est figée. Pour un actif volatil, un minuteur de cours tourne (20 minutes) ; à son expiration, le montant et l'adresse sont masqués.
La page est disponible en russe et en anglais, en thème clair ou sombre selon les réglages de l'appareil.
Comment l'ouvrir
| Où | Comment |
|---|---|
| Site web | Navigation dans le même onglet : 303 See Other depuis votre serveur ou location.href |
| iOS | ASWebAuthenticationSession ou SFSafariViewController |
| Android | Chrome Custom Tabs (androidx.browser) |
| Bot Telegram | Bouton inline avec un lien vers checkout_url |
| À proscrire | iframe, WKWebView, WebView : pas de barre d'adresse (impossible de distinguer un site de phishing), liens vers les portefeuilles peu fiables. La page interdit d'ailleurs l'intégration (frame-ancestors 'none') |
Applications mobilesL'application n'appelle jamais l'API Coinetic directement et ne stocke pas le secret de la clé : on l'extrait d'un build en quelques minutes. C'est votre serveur qui crée la facture à la demande de l'application, et il ne lui renvoie que le
checkout_url.Retour du client
- Le client peut revenir avant de payer, pendant les confirmations, ou ne jamais revenir. Votre page de commande ne doit pas en dépendre.
- Vous pouvez passer le numéro de commande dans le
return_url, mais lisez le statut dans votre propre base : c'est le webhook qui la met à jour. Si la commande n'est pas encore payée, revérifiez avecGET /v1/invoices/{id}. - Pour une application, passez un lien universel (Universal Links / App Links) :
https://shop.example/app/orders/ORDER-1001. Les schémas personnalisés (myapp://) ne sont pas acceptés.
Cas fréquents
| Situation | Que faire |
|---|---|
| Le client a fermé l'onglet | Affichez dans la commande un lien « Procéder au paiement » vers checkout_url : la facture reste valable jusqu'à expires_at |
| La facture a expiré | Créez une nouvelle facture avec un nouvel order_id (par exemple ORDER-1001-2) et un nouvel Idempotency-Key |
| Sous-paiement | « Payez le solde à la même adresse » : la page de paiement affiche le reste dû |
| Paiement après expiration | Les fonds sont reçus, la décision vous appartient : livrer la commande ou effectuer un remboursement |
| Contrôle AML | Indiquez au client que le paiement est en cours de vérification ; attendez invoice.paid |