Cost+Docs

Node.js / TypeScript

Oficialus Node.js SDK Cost+ mokėjimų šliuzui

Oficialus Node.js/TypeScript SDK Cost+ mokėjimų šliuzui. Supaprastina HPP (mokėjimo puslapio) nukreipimo procesą, HMAC turinio pasirašymą ir webhook patvirtinimą.

Savybės

  • Jokių priklausomybių — naudoja tik integruotus Node.js crypto ir fetch
  • Pilni TypeScript tipai su deklaracijų žemėlapiais
  • HMAC-SHA256 parašo generavimas ir pastovaus laiko patikrinimas
  • Automatinis snake_case/camelCase atitikimas tarp API ir SDK
  • Webhook analizė + API pagrįstas užsakymo patikrinimas
  • Testuota Node.js 18, 20 ir 22 versijose

Reikalavimai

  • Node.js 18 arba naujesnė (naudoja integruotą fetch)
  • Cost+ prekybininko paskyra — dashboard.costplus.io

Diegimas

npm install nopayn-node-sdk

Greitas startas

1. Inicializuokite klientą

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. Sukurkite mokėjimą ir nukreipkite į 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. Apdorokite Webhook

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 nuoroda

new NoPaynClient(config)

ParametrasTipasPrivalomasNumatytasis
apiKeystringTaip
merchantIdstringTaip
baseUrlstringNehttps://api.nopayn.co.uk

client.createOrder(params)

Sukuria užsakymą per POST /v1/orders/.

ParametrasTipasPrivalomasAprašymas
amountnumberTaipSuma mažiausiu valiutos vienetu (centais)
currencystringTaipISO 4217 kodas (EUR, GBP, USD, NOK, SEK)
merchantOrderIdstringNeJūsų vidinis užsakymo nuorodos ID
descriptionstringNeUžsakymo aprašymas
returnUrlstringNeNukreipimas po sėkmingo mokėjimo
failureUrlstringNeNukreipimas atšaukimo/galiojimo pabaigos/klaidos atveju
webhookUrlstringNeAsinchroniniai būsenos pakeitimo pranešimai
localestringNeHPP kalba (en-GB, de-DE, nl-NL ir kt.)
paymentMethodsPaymentMethod[]NeFiltruoti HPP mokėjimo būdus
expirationPeriodstringNeISO 8601 trukmė (PT30M)

Prieinami mokėjimo būdai: credit-card, apple-pay, google-pay, vipps-mobilepay

client.getOrder(orderId)

Gauna užsakymo detales per GET /v1/orders/{id}/.

client.createRefund(orderId, amount, description?)

Atlieka pilną arba dalinį grąžinimą per POST /v1/orders/{id}/refunds/.

client.generatePaymentUrl(params)

Patogus metodas, kuris sukuria užsakymą ir grąžina:

{
  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)

Generuoja HMAC-SHA256 hex parašą. Kanoninė žinutė yra ${amount}:${currency}:${orderId}, pasirašyta API raktu.

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

Pastovaus laiko HMAC-SHA256 parašo patikrinimas. Grąžina true, jei galiojantis.

client.verifyWebhook(rawBody)

Analizuoja webhook turinį, tada iškviečia GET /v1/orders/{id}/, kad patikrintų tikrąją būseną. Grąžina:

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

client.parseWebhookBody(rawBody)

Analizuoja ir patvirtina webhook turinį nekviečiant API.

Atskiros HMAC priemonės

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);

Klaidų tvarkymas

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
  }
}

Užsakymo būsenos

BūsenaGalutinė?Aprašymas
newNeUžsakymas sukurtas
processingNeMokėjimas vykdomas
completedTaipMokėjimas sėkmingas — pristatykite prekes
cancelledTaipMokėjimas atšauktas kliento
expiredTaipMokėjimo nuorodos laikas baigėsi
errorTaipTechninė klaida

Webhook geriausios praktikos

  1. Visada patikrinkite per API — webhook turinys pateikia tik užsakymo ID, niekada būsenos. SDK verifyWebhook() tai atlieka automatiškai.
  2. Grąžinkite HTTP 200, kad patvirtintumėte gavimą. Bet koks kitas kodas suaktyvina iki 10 pakartotinių bandymų (kas 2 minutes).
  3. Įgyvendinkite atsarginį tikrintuvą — užsakymams, senesniems nei 10 minučių, kurie nepasiekė galutinės būsenos, naudokite getOrder() kaip saugos tinklą.
  4. Būkite idempotentiški — galite gauti tą patį webhook kelis kartus.

Testinės kortelės

Naudokite šias korteles Cost+ testavimo režimu (testavimo svetainė):

KortelėNumerisPastabos
Visa (sėkminga)4111 1111 1111 1111Bet koks CVV
Mastercard (sėkminga)5544 3300 0003 7Bet koks CVV
Visa (atmesta)4111 1111 1111 1105Do Not Honor
Visa (nepakankamos lėšos)4111 1111 1111 1151Insufficient Funds

Naudokite bet kurią ateities galiojimo datą ir bet kokį 3 skaitmenų CVC.

Demonstracinė programa

Docker pagrįsta demonstracinė programa įtraukta į GitHub saugyklą pilnam mokėjimo proceso testavimui:

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

Atidarykite http://localhost:3000, kad pamatytumėte demonstracinį atsiskaitymo puslapį.

Palaikymas

Reikia pagalbos? Kreipkitės į mūsų palaikymo komandą adresu support@costplus.io.

On this page