Cost+Docs

Node.js / TypeScript

Oficiální Node.js SDK pro platební bránu Cost+

Oficiální Node.js/TypeScript SDK pro platební bránu Cost+. Zjednodušuje tok přesměrování HPP (Hosted Payment Page), HMAC podepisování payloadu a ověřování webhooků.

Funkce

  • Žádné závislosti — používá pouze vestavěné Node.js crypto a fetch
  • Plné TypeScript typy s mapami deklarací
  • Generování podpisů HMAC-SHA256 a ověřování s konstantním časem
  • Automatické mapování snake_case/camelCase mezi API a SDK
  • Parsování webhooků + ověřování objednávek přes API
  • Testováno na Node.js 18, 20 a 22

Požadavky

  • Node.js 18 nebo novější (používá vestavěný fetch)
  • Obchodní účet Cost+ — dashboard.costplus.io

Instalace

npm install nopayn-node-sdk

Rychlý start

1. Inicializace klienta

import { NoPaynClient } from 'nopayn-node-sdk';

const nopayn = new NoPaynClient({
  apiKey: 'your-api-key',      // From the NoPayn merchant portal
  merchantId: 'your-project',  // Your project/merchant ID
});

2. Vytvoření platby a přesměrování na HPP

const result = await nopayn.generatePaymentUrl({
  amount: 1295,            // €12.95 in cents
  currency: 'EUR',
  merchantOrderId: 'ORDER-001',
  description: 'Premium Widget',
  returnUrl: 'https://shop.example.com/success',
  failureUrl: 'https://shop.example.com/failure',
  webhookUrl: 'https://shop.example.com/webhook',
  locale: 'en-GB',
  expirationPeriod: 'PT30M',
});

// Redirect the customer
// result.orderUrl   → HPP (customer picks payment method)
// result.paymentUrl → direct link to the first transaction's payment method
// result.signature  → HMAC-SHA256 for verification
// result.orderId    → NoPayn order UUID

3. Zpracování webhooku

app.post('/webhook', async (req, res) => {
  const verified = await nopayn.verifyWebhook(JSON.stringify(req.body));

  console.log(verified.order.status); // 'completed', 'cancelled', etc.
  console.log(verified.isFinal);      // true when the order won't change

  if (verified.order.status === 'completed') {
    // Fulfil the order
  }

  res.sendStatus(200);
});

API reference

new NoPaynClient(config)

ParametrTypPovinnéVýchozí
apiKeystringAno
merchantIdstringAno
baseUrlstringNehttps://api.nopayn.co.uk

client.createOrder(params)

Vytvoří objednávku přes POST /v1/orders/.

ParametrTypPovinnéPopis
amountnumberAnoČástka v nejmenší měnové jednotce (centy)
currencystringAnoISO 4217 kód (EUR, GBP, USD, NOK, SEK)
merchantOrderIdstringNeVaše interní reference objednávky
descriptionstringNePopis objednávky
returnUrlstringNePřesměrování po úspěšné platbě
failureUrlstringNePřesměrování při zrušení/vypršení/chybě
webhookUrlstringNeAsynchronní notifikace o změně stavu
localestringNeJazyk HPP (en-GB, de-DE, nl-NL atd.)
paymentMethodsPaymentMethod[]NeFiltr metod HPP
expirationPeriodstringNeISO 8601 doba trvání (PT30M)

Dostupné platební metody: credit-card, apple-pay, google-pay, vipps-mobilepay

client.getOrder(orderId)

Načte detaily objednávky přes GET /v1/orders/{id}/.

client.createRefund(orderId, amount, description?)

Provede úplnou nebo částečnou refundaci přes POST /v1/orders/{id}/refunds/.

client.generatePaymentUrl(params)

Pohodlná metoda, která vytvoří objednávku a vrátí:

{
  orderId: string;     // NoPayn order UUID
  orderUrl: string;    // HPP URL
  paymentUrl?: string; // Direct payment URL (first transaction)
  signature: string;   // HMAC-SHA256 of amount:currency:orderId
  order: Order;        // Full order object
}

client.generateSignature(amount, currency, orderId)

Generuje HMAC-SHA256 hex podpis. Kanonická zpráva je ${amount}:${currency}:${orderId}, podepsaná API klíčem.

client.verifySignature(amount, currency, orderId, signature)

Ověření HMAC-SHA256 podpisu s konstantním časem. Vrací true, pokud je platný.

client.verifyWebhook(rawBody)

Parsuje tělo webhooku a poté zavolá GET /v1/orders/{id}/ pro ověření skutečného stavu. Vrací:

{
  orderId: string;
  order: Order;     // Verified via API
  isFinal: boolean; // true for completed/cancelled/expired/error
}

client.parseWebhookBody(rawBody)

Parsuje a validuje tělo webhooku bez volání API.

Samostatné HMAC utility

import { generateSignature, verifySignature } from 'nopayn-node-sdk';

const sig = generateSignature('your-api-key', 1295, 'EUR', 'order-uuid');
const ok  = verifySignature('your-api-key', 1295, 'EUR', 'order-uuid', sig);

Zpracování chyb

import { NoPaynApiError, NoPaynError, NoPaynWebhookError } from 'nopayn-node-sdk';

try {
  await nopayn.createOrder({ amount: 100, currency: 'EUR' });
} catch (err) {
  if (err instanceof NoPaynApiError) {
    console.error(err.statusCode); // 401, 400, etc.
    console.error(err.errorBody);  // Raw API error response
  } else if (err instanceof NoPaynError) {
    console.error(err.message);    // Network or parsing error
  }
}

Stavy objednávek

StavKonečný?Popis
newNeObjednávka vytvořena
processingNePlatba probíhá
completedAnoPlatba úspěšná — doručte zboží
cancelledAnoPlatba zrušena zákazníkem
expiredAnoPlatební odkaz vypršel
errorAnoTechnická chyba

Osvědčené postupy pro webhooky

  1. Vždy ověřte přes API — webhookový payload obsahuje pouze ID objednávky, nikdy stav. Metoda verifyWebhook() SDK to dělá automaticky.
  2. Vraťte HTTP 200 jako potvrzení přijetí. Jakýkoli jiný kód spustí až 10 opakování (po 2 minutách).
  3. Implementujte záložní polling — pro objednávky starší než 10 minut, které nedosáhly konečného stavu, dotazujte getOrder() jako záchrannou síť.
  4. Buďte idempotentní — stejný webhook můžete obdržet vícekrát.

Testovací karty

Tyto karty použijte v testovacím režimu Cost+ (sandbox web):

KartaČísloPoznámky
Visa (úspěch)4111 1111 1111 1111Libovolné CVV
Mastercard (úspěch)5544 3300 0003 7Libovolné CVV
Visa (zamítnuto)4111 1111 1111 1105Do Not Honor
Visa (nedostatek prostředků)4111 1111 1111 1151Insufficient Funds

Použijte libovolné budoucí datum platnosti a libovolný 3místný CVC.

Demo aplikace

Demo aplikace založená na Dockeru je součástí GitHub repozitáře pro testování celého platebního toku:

cd demo

cat > .env << EOF
NOPAYN_API_KEY=your-api-key
NOPAYN_MERCHANT_ID=your-merchant-id
PUBLIC_URL=http://localhost:3000
EOF

docker compose up --build

Otevřete http://localhost:3000 pro zobrazení demo checkout stránky.

Podpora

Potřebujete pomoc? Obraťte se na náš tým podpory na support@costplus.io.

On this page