Cost+Docs

PHP

Oficiální PHP SDK pro platební bránu Cost+

Oficiální PHP 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é externí závislosti — používá pouze vestavěná PHP rozšíření (curl, json, hash)
  • PHP 8.1+ s readonly properties, pojmenovanými argumenty a striktními typy
  • Generování podpisů HMAC-SHA256 a ověřování s konstantním časem přes hash_equals
  • Automatické mapování snake_case/camelCase mezi API a SDK
  • Parsování webhooků + ověřování objednávek přes API
  • Testováno na PHP 8.1, 8.2 a 8.3

Požadavky

  • PHP 8.1 nebo novější
  • Rozšíření: curl, json (obě součástí standardního PHP)
  • Obchodní účet Cost+ — dashboard.costplus.io

Instalace

composer require nopayn/sdk

Rychlý start

1. Inicializace klienta

use NoPayn\NoPaynClient;

$nopayn = new NoPaynClient([
    'apiKey'     => 'your-api-key',
    'merchantId' => 'your-project',
]);

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

$result = $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
header('Location: ' . ($result['paymentUrl'] ?? $result['orderUrl']));

3. Zpracování webhooku

$rawBody  = file_get_contents('php://input');
$verified = $nopayn->verifyWebhook($rawBody);

echo $verified['order']['status']; // 'completed', 'cancelled', etc.
echo $verified['isFinal'];        // true when the order won't change

if ($verified['order']['status'] === 'completed') {
    // Fulfil the order
}

http_response_code(200);

API reference

new NoPaynClient(array $config)

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

$client->createOrder(array $params): array

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

ParametrTypPovinnéPopis
amountintAnoČá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.)
paymentMethodsstring[]NeFiltr metod HPP
expirationPeriodstringNeISO 8601 doba trvání (PT30M)

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

$client->getOrder(string $orderId): array

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

$client->createRefund(string $orderId, int $amount, ?string $description = null): array

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

$client->generatePaymentUrl(array $params): array

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'      => array,    // Full order object
]

$client->generateSignature(int $amount, string $currency, string $orderId): string

Generuje HMAC-SHA256 hex podpis.

$client->verifySignature(int $amount, string $currency, string $orderId, string $signature): bool

Ověření HMAC-SHA256 podpisu s konstantním časem.

$client->verifyWebhook(string $rawBody): array

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

Samostatné HMAC utility

use NoPayn\Signature;

$sig = Signature::generate('your-api-key', 1295, 'EUR', 'order-uuid');
$ok  = Signature::verify('your-api-key', 1295, 'EUR', 'order-uuid', $sig);

Zpracování chyb

use NoPayn\Exceptions\ApiException;
use NoPayn\Exceptions\NoPaynException;
use NoPayn\Exceptions\WebhookException;

try {
    $nopayn->createOrder(['amount' => 100, 'currency' => 'EUR']);
} catch (ApiException $e) {
    echo $e->getStatusCode(); // 401, 400, etc.
    print_r($e->getErrorBody()); // Raw API error response
} catch (NoPaynException $e) {
    echo $e->getMessage(); // 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.

Podpora

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

On this page