Cost+Docs

PHP

Opinber PHP SDK fyrir Cost+ greiðslugáttina

Opinber PHP SDK fyrir Cost+ greiðslugáttina. Einfaldar HPP (Hýst greiðslusíða) tilvísunarflæði, HMAC undirritun farms og staðfestingu á vefhook.

Eiginleikar

  • Núll ytri ósjálfstæði — notar aðeins innbyggðar PHP viðbætur (curl, json, hash)
  • PHP 8.1+ með skrifvarinn eiginleika, nafngreindum rökum og ströngum gerðum
  • HMAC-SHA256 undirskriftargerð og stöðug sannprófun með hash_equals
  • Sjálfvirk snake_case/camelCase kortlagning á milli API og SDK
  • Webhook þáttun + API byggt á pöntunarstaðfestingu
  • Prófað á PHP 8.1, 8.2 og 8.3

Kröfur

  • PHP 8.1 eða nýrri
  • Viðbætur: curl, json (bæði innifalin í venjulegu PHP)
  • Kostnaðar+ sölureikningur — dashboard.costplus.io

Uppsetning

composer require nopayn/sdk

Fljótleg byrjun

1. Frumstilla viðskiptavininn

use NoPayn\NoPaynClient;

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

2. Búðu til greiðslu og sendu til 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. Meðhöndlaðu vefkrókinn

$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 Tilvísun

new NoPaynClient(array $config)

ParameterTegundÁskiliðSjálfgefið
apiKeystring
merchantIdstring
baseUrlstringNeihttps://api.nopayn.co.uk

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

Býr til pöntun í gegnum POST /v1/orders/.

ParameterTegundÁskiliðLýsing
amountintUpphæð í ISO 4217 minnieiningu gjaldmiðilsins (til dæmis sent fyrir EUR)
currencystringISO 4217 kóði (EUR, GBP, USD, NOK, SEK)
merchantOrderIdstringNeiInnri pöntunartilvísun þín
descriptionstringNeiLýsing á pöntun
returnUrlstringNeiTilvísun eftir vel heppnaða greiðslu
failureUrlstringNeiTilvísun við hætt við/rennur út/villu
webhookUrlstringNeiÓsamstilltur tilkynningar um stöðubreytingar
localestringNeiHPP tungumál (en-GB, de-DE, nl-NL, osfrv.)
paymentMethodsstring[]NeiSía HPP aðferðir
expirationPeriodstringNeiISO 8601 tímalengd (PT30M)

Greiðsluaðferðir í boði: credit-card, apple-pay, google-pay, vipps-mobilepay

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

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

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

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

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

Þægindaaðferð sem býr til pöntun og skilar:

[
    '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

Býr til HMAC-SHA256 hex undirskrift.

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

Stöðug staðfesting á HMAC-SHA256 undirskrift.

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

Þýðir meginmál vefkróksins og hringir síðan í GET /v1/orders/{id}/ til að staðfesta raunverulega stöðu.

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

Villumeðferð

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
}

Pöntunarstöður

StaðaÚrslitaleikur?Lýsing
newNeiPöntun búin til
processingNeiGreiðsla í gangi
completedGreiðsla tókst - afhenda vörurnar
cancelledGreiðsla felld niður af viðskiptavinum
expiredGreiðslutengillinn rann út á tíma
errorTæknileg bilun

Bestu starfsvenjur Webhook

  1. Staðfestu alltaf í gegnum API — hleðslutækið inniheldur aðeins pöntunarauðkenni, aldrei stöðuna. verifyWebhook() á SDK gerir þetta sjálfkrafa.
  2. ** Skilaðu HTTP 200** til að staðfesta móttöku. Allir aðrir kóðar kalla fram allt að 10 endurtilraunir (2 mínútna millibili).
  3. Taka í notkun varakönnun — fyrir pantanir eldri en 10 mínútur sem hafa ekki náð endanlega stöðu skaltu skoða getOrder() sem öryggisnet.
  4. Vertu sjálfráða — þú gætir fengið sama vefhook margoft.

Prófakort

Notaðu þessi kort í Cost+ prófunarham (sandkassavefsíða):

KortNúmerSkýringar
Visa (árangur)4111 1111 1111 1111Hvaða CVV sem er
Mastercard (árangur)5544 3300 0003 7Hvaða CVV sem er
Visa (hafnað)4111 1111 1111 1105Heiðra ekki
Visa (ófullnægjandi fjármunir)4111 1111 1111 1151Ófullnægjandi fjármunir

Notaðu hvaða fyrningardagsetningu sem er í framtíðinni og hvaða þriggja stafa CVC sem er.

Demo app

Sýningarforrit sem byggir á Docker er innifalið í GitHub geymslunni til að prófa allt greiðsluflæðið.

Stuðningur

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

On this page