nexuspay
v0.1.0
Published
SDK serveur Node.js pour l'API NexusPay — sessions de paiement, produits, clients, factures, webhooks.
Maintainers
Readme
nexuspay
SDK serveur Node.js (≥ 18) pour l'API NexusPay — sessions de paiement, produits, clients, factures et webhooks. Zéro dépendance.
La clé secrète
sk_…ne doit jamais être exposée côté navigateur. Pour le bouton de paiement front, voir le SDK navigateur (https://nexuspay.fr/sdk/nexus.js).
Installation
npm install nexuspay(Node ≥ 18 — fetch et crypto natifs, zéro dépendance.)
Démarrage
import { Nexus } from 'nexuspay';
const nexus = new Nexus({ apiKey: process.env.NEXUS_SECRET_KEY });
// Créer et émettre une facture (idempotent)
const invoice = await nexus.invoices.create({
customer: { name: 'Acme SAS', email: '[email protected]', externalId: 'CRM-1042' },
lines: [{ designation: 'Développement — sprint 12', quantity: 5, unitPriceCents: 60000, vatRate: 20, unit: 'j' }],
dueDate: '2026-07-12',
finalize: true,
}, { idempotencyKey: 'fac-sprint-12' });
console.log(invoice.number, invoice.paymentUrl);
// L'envoyer par email (PDF Factur-X joint + bouton de paiement)
await nexus.invoices.send(invoice.id, { message: 'Merci pour votre confiance !' });
// Session de checkout (params snake_case, comme l'API)
const session = await nexus.checkoutSessions.create({
amount: 4900,
currency: 'EUR',
description: 'Abonnement Pro — juin',
success_url: 'https://votre-site.fr/merci',
}, { idempotencyKey: 'commande-1042' });
// → redirigez votre client vers session.urlVérifier un webhook
Nexus signe le corps brut en HMAC-SHA256 (X-Nexus-Signature: t=<unix>,v1=<hex>). Passez le corps brut, jamais l'objet re-sérialisé :
import { verifyWebhookSignature } from 'nexuspay';
app.post('/nexus/webhooks', express.raw({ type: 'application/json' }), (req, res) => {
const ok = verifyWebhookSignature({
payload: req.body, // Buffer brut
header: req.get('X-Nexus-Signature'),
secret: process.env.NEXUS_WEBHOOK_SECRET, // affiché une fois à la création de l'endpoint
});
if (!ok) return res.status(400).end();
const { event, data } = JSON.parse(req.body);
if (event === 'invoice.paid' && data.livemode) {
// … livrer / réconcilier
}
res.status(200).end();
});Mode test
Créez une clé avec {"mode":"test"} (préfixe sk_test_) : clients et factures vivent dans un bac à sable étanche (numéros TEST-*, pas de comptabilité, pas de page de paiement, livemode: false partout). Détails : https://nexuspay.fr/docs#authentification
Erreurs
Toute réponse non-2xx lève une NexusError avec status, body (JSON renvoyé par l'API) et message (body.error).
Tests
npm testRéférence complète
Documentation : https://nexuspay.fr/docs · Spec OpenAPI : https://nexuspay.fr/openapi.yaml
