Paiements
Facturez un client depuis votre serveur ou le tableau de bord, avec ce que vous savez déjà de lui. Il arrive sur une page où il n’a plus qu’à payer.
Paiements, factures et liens de paiement pour les entreprises en ligne. Votre client paie dans la crypto qu’il détient, et vous voyez le paiement confirmé, les frais détaillés et votre part envoyée sur votre propre portefeuille.
Chaque paiement reçoit sa propre adresse et un taux bloqué pour le client. Vous pouvez ensuite le suivre jusqu’à la transaction qui vous a payé, avec, à chaque étape, ce qui a été retenu et ce que la chaîne a pris.
Exemple de paiement en Bitcoin sur l’offre gratuite.
Depuis votre code, par facture ou avec un lien. Tout aboutit à la même page de paiement et au même versement.
Facturez un client depuis votre serveur ou le tableau de bord, avec ce que vous savez déjà de lui. Il arrive sur une page où il n’a plus qu’à payer.
Des factures détaillées avec une page hébergée pour les régler, une version imprimable et des rappels autour de l’échéance. Le client choisit la crypto.
Une seule page réutilisable pour un produit, un service ou une cagnotte. Un prix fixe ou un montant choisi par le client, et vous pouvez l’archiver pour arrêter aussitôt les paiements.
Des réductions en pourcentage ou en montant fixe que les clients saisissent sur la page de paiement, avec un montant minimum, une limite d’utilisations, une date d’expiration et les liens concernés.
Montant exact, réseau, adresse de dépôt et compte à rebours, sur une seule page adaptée au mobile. Elle se met à jour toute seule, affiche un paiement dès qu’il est repéré et passe à « Payé » une fois confirmé.
Créez un paiement avec ce que vous savez déjà du client et envoyez-le vers sa page de paiement. Chaque notification en retour est un POST JSON signé en HMAC-SHA256, et une notification échouée est retentée pendant environ trois jours.
La copie a échoué. Sélectionnez le code et copiez-le manuellement.
curl -X POST 'https://api.velirapay.com/v1/charges' \
--fail-with-body --silent --show-error --max-time 30 \
-H "Authorization: Bearer ${VELIRAPAY_API_KEY:?Set VELIRAPAY_API_KEY}" \
-H 'Accept: application/json' \
-H 'Idempotency-Key: order-1042' \
-H 'Content-Type: application/json' \
-d '{
"amount": "150.00",
"currency": "USD",
"asset": "BTC",
"description": "Order #1042",
"customer": {"email": "ada@example.com"},
"metadata": {"order_id": "1042"}
}'
<?php
use VeliraPay\VeliraPayClient;
require __DIR__.'/vendor/autoload.php';
$apiKey = getenv('VELIRAPAY_API_KEY') ?: throw new RuntimeException('Set VELIRAPAY_API_KEY.');
$velirapay = new VeliraPayClient($apiKey, baseUrl: 'https://api.velirapay.com');
$charge = $velirapay->charges->create([
'amount' => '150.00',
'currency' => 'USD',
'asset' => 'BTC',
'description' => 'Order #1042',
'customer' => ['email' => 'ada@example.com'],
'metadata' => ['order_id' => '1042'],
], idempotencyKey: 'order-1042');
echo json_encode($charge, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_THROW_ON_ERROR), PHP_EOL;
use VeliraPay\Laravel\Facades\VeliraPay;
$charge = VeliraPay::charges()->create([
'amount' => '150.00',
'currency' => 'USD',
'asset' => 'BTC',
'description' => 'Order #1042',
'customer' => ['email' => 'ada@example.com'],
'metadata' => ['order_id' => '1042'],
], idempotencyKey: 'order-1042');
const secretKey = process.env.VELIRAPAY_API_KEY;
if (!secretKey) throw new Error('Set VELIRAPAY_API_KEY.');
const response = await fetch('https://api.velirapay.com/v1/charges', {
method: 'POST',
headers: {
Authorization: `Bearer ${secretKey}`,
Accept: 'application/json',
'Idempotency-Key': 'order-1042',
'Content-Type': 'application/json',
},
body: JSON.stringify({
amount: '150.00',
currency: 'USD',
asset: 'BTC',
description: 'Order #1042',
customer: { email: 'ada@example.com' },
metadata: { order_id: '1042' },
}),
redirect: 'error',
signal: AbortSignal.timeout(30_000),
});
if (!response.ok) {
throw new Error(`VeliraPay ${response.status}: ${await response.text()}`);
}
const charge = response.status === 204 ? null : (await response.json()).data;
console.log(JSON.stringify(charge, null, 2));
import json
import os
import requests
api_key = os.environ["VELIRAPAY_API_KEY"]
response = requests.post(
"https://api.velirapay.com/v1/charges",
headers={
"Authorization": f"Bearer {api_key}",
"Accept": "application/json",
"Idempotency-Key": "order-1042",
},
json={
"amount": "150.00",
"currency": "USD",
"asset": "BTC",
"description": "Order #1042",
"customer": {"email": "ada@example.com"},
"metadata": {"order_id": "1042"},
},
timeout=(5, 30),
allow_redirects=False,
)
if not 200 <= response.status_code < 300:
raise RuntimeError(f"VeliraPay {response.status_code}: {response.text}")
charge = None if response.status_code == 204 else response.json()["data"]
print(json.dumps(charge, indent=2))
using System;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Text.Json;
var secretKey = Environment.GetEnvironmentVariable("VELIRAPAY_API_KEY")
?? throw new InvalidOperationException("Set VELIRAPAY_API_KEY.");
using var client = new HttpClient(new HttpClientHandler { AllowAutoRedirect = false })
{
Timeout = TimeSpan.FromSeconds(30),
};
using var request = new HttpRequestMessage(HttpMethod.Post, "https://api.velirapay.com/v1/charges");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", secretKey);
request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
request.Headers.Add("Idempotency-Key", "order-1042");
request.Content = new StringContent("""
{
"amount": "150.00",
"currency": "USD",
"asset": "BTC",
"description": "Order #1042",
"customer": {"email": "ada@example.com"},
"metadata": {"order_id": "1042"}
}
""", Encoding.UTF8, "application/json");
using var response = await client.SendAsync(request);
var responseBody = await response.Content.ReadAsStringAsync();
if (!response.IsSuccessStatusCode)
{
throw new HttpRequestException($"VeliraPay {(int)response.StatusCode}: {responseBody}");
}
JsonElement? charge = null;
if (response.StatusCode != HttpStatusCode.NoContent)
{
using var document = JsonDocument.Parse(responseBody);
charge = document.RootElement.GetProperty("data").Clone();
}
Console.WriteLine(charge?.GetRawText() ?? "null");
Un paiement ne fait que passer avant de vous parvenir. Il n’est détenu que jusqu’au départ de son versement, normalement en quelques minutes, et jamais conservé sous forme de solde à retirer.
Il manque quelque chose ? Créez un compte et essayez avec un lien de test, payé en cryptos de test qui ne valent rien.
Créez votre premier lien de paiement en quelques minutes. Sans contrat, sans intégration et sans abonnement.
Nous utilisons les cookies dont VeliraPay a besoin pour vous garder connecté et en sécurité. Avec votre accord, nous utilisons aussi Google Analytics pour voir comment le site est utilisé, et laissons Google mesurer nos publicités. Politique de confidentialité
Activez ce que vous acceptez d’autoriser. Vous pouvez modifier ce choix à tout moment depuis Paramètres des cookies.