Cost+Docs

Ruby

Officiellt Ruby SDK för Cost+ betalningsgateway

Officiellt Ruby SDK för Cost+ betalningsgateway. Förenklar HPP-omdirigeringsflödet (Hosted Payment Page), HMAC payload-signering och webhook-verifiering.

Funktioner

  • HMAC-SHA256 signaturgenerering och verifiering med konstant tid
  • Automatisk snake_case-mappning från API:et till Ruby-vänliga OpenStruct-objekt
  • Webhook-tolkning + API-baserad orderverifiering
  • Testad med Ruby 3.1, 3.2 och 3.3
  • Sinatra-baserad demohandlarapplikation inkluderad

Krav

Installation

Lägg till i din Gemfile:

gem "nopayn"

Kör sedan:

bundle install

Eller installera direkt:

gem install nopayn

Snabbstart

1. Initiera klienten

require "nopayn"

nopayn = NoPayn::Client.new(
  api_key:     "your-api-key",
  merchant_id: "your-project"
)

2. Skapa en betalning och omdirigera till HPP

result = nopayn.generate_payment_url(
  amount:            1295,           # €12.95 in cents
  currency:          "EUR",
  merchant_order_id: "ORDER-001",
  description:       "Premium Widget",
  return_url:        "https://shop.example.com/success",
  failure_url:       "https://shop.example.com/failure",
  webhook_url:       "https://shop.example.com/webhook",
  locale:            "en-GB",
  expiration_period: "PT30M"
)

# Redirect the customer
# result.order_url   → HPP (customer picks payment method)
# result.payment_url → direct link to the first transaction's payment method
# result.signature   → HMAC-SHA256 for verification
# result.order_id    → NoPayn order UUID

3. Hantera webhooken

post "/webhook" do
  request.body.rewind
  raw_body = request.body.read

  verified = nopayn.verify_webhook(raw_body)

  puts verified.order.status  # "completed", "cancelled", etc.
  puts verified.is_final      # true when the order won't change

  if verified.order.status == "completed"
    # Fulfil the order
  end

  status 200
end

API-referens

NoPayn::Client.new(api_key:, merchant_id:, base_url:)

ParameterTypObligatoriskStandard
api_keyStringJa
merchant_idStringJa
base_urlStringNejhttps://api.nopayn.co.uk

client.create_order(params) -> OpenStruct

Skapar en order via POST /v1/orders/.

ParameterTypObligatoriskBeskrivning
:amountIntegerJaBelopp i minsta valutaenhet (cent)
:currencyStringJaISO 4217-kod (EUR, GBP, USD, NOK, SEK)
:merchant_order_idStringNejDin interna orderreferens
:descriptionStringNejOrderbeskrivning
:return_urlStringNejOmdirigering efter lyckad betalning
:failure_urlStringNejOmdirigering vid avbrytning/utgång/fel
:webhook_urlStringNejAsynkrona statusändringsnotifieringar
:localeStringNejHPP-språk (en-GB, de-DE, nl-NL, etc.)
:payment_methodsArray<String>NejFiltrera HPP-metoder
:expiration_periodStringNejISO 8601-duration (PT30M)

Tillgängliga betalningsmetoder: credit-card, apple-pay, google-pay, vipps-mobilepay

client.get_order(order_id) -> OpenStruct

Hämtar orderdetaljer via GET /v1/orders/{id}/.

client.create_refund(order_id, amount, description: nil) -> OpenStruct

Utfärdar en fullständig eller partiell återbetalning via POST /v1/orders/{id}/refunds/.

client.generate_payment_url(params) -> OpenStruct

Bekvämlighetsmetod som skapar en order och returnerar:

result.order_id     # NoPayn order UUID
result.order_url    # HPP URL
result.payment_url  # Direct payment URL (first transaction)
result.signature    # HMAC-SHA256 of amount:currency:order_id
result.order        # Full order OpenStruct

client.generate_signature(amount, currency, order_id) -> String

Genererar en HMAC-SHA256 hex-signatur.

client.verify_signature(amount, currency, order_id, signature) -> Boolean

Verifiering med konstant tid av en HMAC-SHA256-signatur.

client.verify_webhook(raw_body) -> OpenStruct

Tolkar webhook-kroppen och anropar sedan GET /v1/orders/{id}/ för att verifiera faktisk status.

Fristående HMAC-verktyg

require "nopayn"

sig = NoPayn::Signature.generate("your-api-key", 1295, "EUR", "order-uuid")
ok  = NoPayn::Signature.verify("your-api-key", 1295, "EUR", "order-uuid", sig)

Felhantering

begin
  nopayn.create_order(amount: 100, currency: "EUR")
rescue NoPayn::ApiError => e
  puts e.status_code  # 401, 400, etc.
  puts e.error_body   # Raw API error response
rescue NoPayn::Error => e
  puts e.message      # Network or parsing error
end
UndantagFörälderBeskrivning
NoPayn::ErrorStandardErrorBasfel för alla SDK-fel
NoPayn::ApiErrorNoPayn::ErrorHTTP-fel från API:et
NoPayn::WebhookErrorNoPayn::ErrorOgiltig webhook-payload

Orderstatusar

StatusSlutgiltig?Beskrivning
newNejOrder skapad
processingNejBetalning pågår
completedJaBetalning lyckades — leverera varorna
cancelledJaBetalning avbruten av kunden
expiredJaBetalningslänken löpte ut
errorJaTekniskt fel

Bästa praxis för webhooks

  1. Verifiera alltid via API:et — webhook-payloaden innehåller bara order-ID:t, aldrig statusen. SDK:ts verify_webhook gör detta automatiskt.
  2. Returnera HTTP 200 för att bekräfta mottagandet. Annan kod utlöser upp till 10 omförsök (2 minuter emellan).
  3. Implementera en reservpoller — för ordrar äldre än 10 minuter som inte har nått slutgiltig status, polla get_order som säkerhetsnät.
  4. Var idempotent — du kan ta emot samma webhook flera gånger.

Testkort

Använd dessa kort i Cost+ testläge (sandbox-webbplats):

KortNummerNoteringar
Visa (lyckad)4111 1111 1111 1111Valfritt CVV
Mastercard (lyckad)5544 3300 0003 7Valfritt CVV
Visa (nekad)4111 1111 1111 1105Do Not Honor
Visa (otillräckligt saldo)4111 1111 1111 1151Insufficient Funds

Använd valfritt framtida utgångsdatum och valfri 3-siffrig CVC.

Demoapplikation

En Sinatra-baserad demoapplikation ingår i GitHub-repositoryt för att testa det fullständiga betalningsflödet.

Support

Behöver du hjälp? Kontakta vårt supportteam på support@costplus.io.

On this page