Cost+Docs

PHP

Oficialus PHP SDK Cost+ mokėjimų šliuzui

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

Savybės

  • Jokių išorinių priklausomybių — naudoja tik integruotus PHP plėtinius (curl, json, hash)
  • PHP 8.1+ su readonly savybėmis, pavadintais argumentais ir griežtais tipais
  • HMAC-SHA256 parašo generavimas ir pastovaus laiko patikrinimas per hash_equals
  • Automatinis snake_case/camelCase atitikimas tarp API ir SDK
  • Webhook analizė + API pagrįstas užsakymo patikrinimas
  • Testuota PHP 8.1, 8.2 ir 8.3 versijose

Reikalavimai

  • PHP 8.1 arba naujesnė
  • Plėtiniai: curl, json (abu įtraukti standartiniame PHP)
  • Cost+ prekybininko paskyra — dashboard.costplus.io

Diegimas

composer require nopayn/sdk

Greitas startas

1. Inicializuokite klientą

use NoPayn\NoPaynClient;

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

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

$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 nuoroda

new NoPaynClient(array $config)

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

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

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

ParametrasTipasPrivalomasAprašymas
amountintTaipSuma 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.)
paymentMethodsstring[]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(string $orderId): array

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

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

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

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

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

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

Generuoja HMAC-SHA256 hex parašą.

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

Pastovaus laiko HMAC-SHA256 parašo patikrinimas.

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

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

Atskiros HMAC priemonės

use NoPayn\Signature;

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

Klaidų tvarkymas

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
}

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.

Palaikymas

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

On this page