Cost+Docs

PHP

Opinbert PHP SDK fyrir greiðslugátt Cost+

Opinbert PHP SDK fyrir greiðslugátt Cost+. Poenostavlja tok preusmeritve HPP (gostovane greiðslune strani), HMAC podpisovanje koristnih podatkov og staðfesting webhook-ov.

Eiginleikar

  • Engin ytri dependency — uporablja le vgrajene PHP razširitve (curl, json, hash)
  • PHP 8.1+ með readonly lastnostmi, imenovanimi argumenti og strogimi tipi
  • HMAC-SHA256 býr tilnje podpisov og staðfesting með konstantnim časom gegnum hash_equals
  • Samodejno preslikavanje snake_case/camelCase med API-jem og SDK-jem
  • Razčlenjevanje webhook-ov + staðfesting pantana á osnovi API-ja
  • Prófað á PHP 8.1, 8.2 og 8.3

Kröfur

  • PHP 8.1 eða nýrri
  • Razširitve: curl, json (obe vključeni í standardni PHP)
  • Söluaðilareikningur Cost+ — dashboard.costplus.io

Uppsetning

composer require nopayn/sdk

Flýtiræsing

1. Frumstilltu biðlarann

use NoPayn\NoPaynClient;

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

2. Ustvarite greiðsla og preusmerite á HPP

$result = $nopayn->generatePaymentUrl([
    'amount'           => 1295,            // €12.95 og 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',
]);

// Preusmerite viðskiptavin
// $result['orderUrl']   → HPP (viðskiptavinur izbere greiðslumáta)
// $result['paymentUrl'] → neposredna povezava do greiðslumátar prve transakcije
// $result['signature']  → HMAC-SHA256 til staðfesting
// $result['orderId']    → NoPayn UUID pantanir
header('Location: ' . ($result['paymentUrl'] ?? $result['orderUrl']));

3. Meðhöndlaðu 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') {
    // Uppfylldu pöntunina
}

http_response_code(200);

API tilvísun

new NoPaynClient(array $config)

ParameterTipObveznoPrivzeto
apiKeystringDa
merchantIdstringDa
baseUrlstringNehttps://api.nopayn.co.uk

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

Stofnar pöntun gegnum POST /v1/orders/.

ParameterTipObveznoOpis
amountintDaZnesek í najmanjši valutni enoti (centi)
currencystringDaKoda ISO 4217 (EUR, GBP, USD, NOK, SEK)
merchantOrderIdstringNeVaša interna referenca pantanir
descriptionstringNeOpis pantanir
returnUrlstringNePreusmeritev eftir uspešnem greiðsluu
failureUrlstringNePreusmeritev ob preklicu/poteku/napaki
webhookUrlstringNeAsinhrona obvestila o spremembi statusa
localestringNeJezik HPP (en-GB, de-DE, nl-NL itd.)
paymentMethodsstring[]NeFiltriraj metode HPP
expirationPeriodstringNeTrajanje ISO 8601 (PT30M)

Tiltækir greiðslumátar: credit-card, apple-pay, google-pay, vipps-mobilepay

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

Sækir upplýsingar pöntunar gegnum GET /v1/orders/{id}/.

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

Gefðu út fulla eða hluta endurgreiðslu gegnum POST /v1/orders/{id}/refunds/.

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

Þægileg aðferð, ki ustvari pöntun og vrne:

[
    'orderId'    => string,   // NoPayn UUID pantanir
    'orderUrl'   => string,   // HPP URL
    'paymentUrl' => ?string,  // Neposredni greiðsluni URL (prva transakcija)
    'signature'  => string,   // HMAC-SHA256 od amount:currency:orderId
    'order'      => array,    // Celoten objekt pantanir
]

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

Býr til HMAC-SHA256 šestnajstiški podpis.

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

Staðfesting HMAC-SHA256 podpisa með konstantnim časom.

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

Greinir telo webhook-a, nato poklief GET /v1/orders/{id}/ til staðfesting dejanskega statusa.

Sjálfstæð HMAC tól

use NoPayn\Signature;

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

Villum meðhöndlun

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
}

Statusi pantana

StatusKončni?Opis
newNePöntun ustvarjeno
processingNeGreiðsla í teku
completedDaGreiðsla uspešno — dostavite blago
cancelledDaGreiðsla preklicano með strani viðskiptavinar
expiredDaPlačilna povezava er potekla
errorDaTehnična napaka

Bestu venjur fyrir webhook-a

  1. Vedno preverite gegnum API-ja — koristni podatki webhook-a vsebujejo aðeins ID pantanir, nikoli statusa. SDK-jev verifyWebhook() to naredi samodejno.
  2. Vrnite HTTP 200 til potrditev prejema. Katerakoli druga koda sproži do 10 ponovnih poskusov (2 minuti narazen).
  3. Implementirajte rezervno poizvedovanje — til pantanir, starejša od 10 minut, ki še niso dosegla končnega statusa, poizvedujte getOrder() kot varnostno mrežo.
  4. Vertu idempotent — isti webhook lahþegar prejmete večkrat.

Prófunarkort

Uporabite te kartice í testnem načinu Cost+ (vefsíðu sandboxa):

KarticaŠtevilkaOpombe
Visa (uspeh)4111 1111 1111 1111Katerikoli CVV
Mastercard (uspeh)5544 3300 0003 7Katerikoli CVV
Visa (zavrnjena)4111 1111 1111 1105Zavrnitev
Visa (nezadostna sredstva)4111 1111 1111 1151Nezadostna sredstva

Uporabite katerikoli prihodnji datum veljavnosti og katerokoli 3-mestno CVC kodo.

Sýnisforrit

Sýnisforrit á osnovi Docker er vključena í GitHub repozitorij til testiranje celotnega greiðslunega toka.

Aðstoð

Þarftu aðstoð? Hafðu samband við þjónustudeild okkar á support@costplus.io.

On this page