Cost+Docs

C# / .NET

Offisiell C#/.NET SDK for Cost+ betalingsgateway

Offisiell C#/.NET SDK for Cost+ betalingsgateway. Forenkler HPP (Hosted Payment Page) videresendingsflyten, HMAC-signering av innhold og webhook-verifisering.

Funksjoner

  • Null avhengigheter — bruker kun innebygde System.Text.Json og System.Security.Cryptography
  • Målretter .NET 8.0 med C# 12-funksjoner (records, filomfangede navnerom, mønstergjenkjenning)
  • Nullable referansetyper aktivert gjennomgående
  • HMAC-SHA256 signaturgenerering og konstanttids-verifisering
  • Automatisk snake_case/PascalCase-kartlegging mellom API og SDK
  • Webhook-parsing + API-basert ordreverifisering
  • Fullt asynkron API-overflate

Krav

Installasjon

dotnet add package NoPayn

Eller som lokal prosjektreferanse:

dotnet add reference path/to/src/NoPayn/NoPayn.csproj

Hurtigstart

1. Initialiser klienten

using NoPayn;
using NoPayn.Models;

var nopayn = new NoPaynClient(new NoPaynConfig(
    ApiKey: "your-api-key",
    MerchantId: "your-project"
));

2. Opprett en betaling og videresend til HPP

var result = await nopayn.GeneratePaymentUrlAsync(new CreateOrderParams
{
    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. Håndter webhooken

app.MapPost("/webhook", async (HttpContext ctx) =>
{
    using var reader = new StreamReader(ctx.Request.Body);
    var rawBody = await reader.ReadToEndAsync();
    var verified = await nopayn.VerifyWebhookAsync(rawBody);

    Console.WriteLine(verified.Order.Status); // "completed", "cancelled", etc.
    Console.WriteLine(verified.IsFinal);      // true when the order won't change

    if (verified.Order.Status == "completed")
    {
        // Fulfil the order
    }

    return Results.Ok();
});

API-referanse

new NoPaynClient(config, httpClient?)

ParameterTypePåkrevdStandard
ApiKeystringJa
MerchantIdstringJa
BaseUrlstringNeihttps://api.nopayn.co.uk

En valgfri HttpClient kan sendes som den andre konstruktørparameteren for tilpasset HTTP-håndtering eller testing.

client.CreateOrderAsync(params): Task<Order>

Oppretter en ordre via POST /v1/orders/.

ParameterTypePåkrevdBeskrivelse
AmountintJaBeløp i minste valutaenhet (øre/cent)
CurrencystringJaISO 4217-kode (EUR, GBP, USD, NOK, SEK)
MerchantOrderIdstring?NeiDin interne ordrereferanse
Descriptionstring?NeiOrdrebeskrivelse
ReturnUrlstring?NeiVideresending etter vellykket betaling
FailureUrlstring?NeiVideresending ved avbrudd/utløp/feil
WebhookUrlstring?NeiAsynkrone statusendringsvarsler
Localestring?NeiHPP-språk (en-GB, de-DE, nl-NL, osv.)
PaymentMethodsIReadOnlyList<string>?NeiFiltrer HPP-metoder
ExpirationPeriodstring?NeiISO 8601-varighet (PT30M)

Tilgjengelige betalingsmetoder: credit-card, apple-pay, google-pay, vipps-mobilepay

client.GetOrderAsync(orderId): Task<Order>

Henter ordredetaljer via GET /v1/orders/{id}/.

client.CreateRefundAsync(orderId, amount, description?): Task<Refund>

Utsteder en full eller delvis refusjon via POST /v1/orders/{id}/refunds/.

client.GeneratePaymentUrlAsync(params): Task<PaymentUrlResult>

Bekvemmelighetsmetode som oppretter en ordre og returnerer:

public record PaymentUrlResult(
    string OrderId,        // NoPayn order UUID
    string OrderUrl,       // HPP URL
    string? PaymentUrl,    // Direct payment URL (first transaction)
    string Signature,      // HMAC-SHA256 of amount:currency:orderId
    Order Order            // Full order object
);

client.GenerateSignature(amount, currency, orderId): string

Genererer en HMAC-SHA256 hex-signatur.

client.VerifySignature(amount, currency, orderId, signature): bool

Konstanttids-verifisering av en HMAC-SHA256-signatur.

client.VerifyWebhookAsync(rawBody): Task<VerifiedWebhook>

Parser webhook-kroppen, kaller deretter GET /v1/orders/{id}/ for å verifisere faktisk status.

Frittstående HMAC-verktøy

using NoPayn;

var sig = NoPaynSignature.Generate("your-api-key", 1295, "EUR", "order-uuid");
var ok  = NoPaynSignature.Verify("your-api-key", 1295, "EUR", "order-uuid", sig);

Feilhåndtering

using NoPayn.Exceptions;

try
{
    await nopayn.CreateOrderAsync(new CreateOrderParams { Amount = 100, Currency = "EUR" });
}
catch (ApiException ex)
{
    Console.Error.WriteLine(ex.StatusCode);  // 401, 400, etc.
    Console.Error.WriteLine(ex.ErrorBody);   // Raw API error response
}
catch (NoPaynException ex)
{
    Console.Error.WriteLine(ex.Message);     // Network or parsing error
}
UnntakBeskrivelse
NoPaynExceptionBasisunntak (nettverk, parsing)
ApiExceptionHTTP-feil fra API-et
WebhookExceptionUgyldig webhook-innhold

Ordrestatuser

StatusEndelig?Beskrivelse
newNeiOrdre opprettet
processingNeiBetaling pågår
completedJaBetaling vellykket — lever varene
cancelledJaBetaling avbrutt av kunden
expiredJaBetalingslenken utløp
errorJaTeknisk feil

Beste praksis for webhooks

  1. Verifiser alltid via API-et — webhook-innholdet inneholder kun ordre-ID-en, aldri statusen. SDK-ens VerifyWebhookAsync() gjør dette automatisk.
  2. Returner HTTP 200 for å bekrefte mottak. Enhver annen kode utløser opptil 10 nye forsøk (2 minutters mellomrom).
  3. Implementer en reservepoller — for ordrer eldre enn 10 minutter som ikke har nådd en endelig status, poll GetOrderAsync() som sikkerhetsnett.
  4. Vær idempotent — du kan motta samme webhook flere ganger.

Testkort

Bruk disse kortene i Cost+ testmodus (sandbox-nettsted):

KortNummerMerknader
Visa (vellykket)4111 1111 1111 1111Valgfritt CVV
Mastercard (vellykket)5544 3300 0003 7Valgfritt CVV
Visa (avvist)4111 1111 1111 1105Do Not Honor
Visa (utilstrekkelige midler)4111 1111 1111 1151Insufficient Funds

Bruk en hvilken som helst fremtidig utløpsdato og en hvilken som helst 3-sifret CVC.

Demoapp

En Docker-basert ASP.NET Core demoapp er inkludert i GitHub-repositoriet for testing av den fullstendige betalingsflyten.

Kundestøtte

Trenger du hjelp? Kontakt kundestøtteteamet vårt på support@costplus.io.

On this page