Cost+Docs

Ruby

Officiele Ruby SDK voor de Cost+ betaalgateway

Officiele Ruby SDK voor de Cost+ betaalgateway. Vereenvoudigt de HPP (Hosted Payment Page) doorverwijzingsflow, HMAC-payloadondertekening en webhookverificatie.

Kenmerken

  • HMAC-SHA256-handtekeninggeneratie en constant-time verificatie
  • Automatische snake_case-mapping van de API naar Ruby-vriendelijke OpenStruct-objecten
  • Webhook-parsing + API-gebaseerde bestellingsverificatie
  • Getest op Ruby 3.1, 3.2 en 3.3
  • Op Sinatra gebaseerde demo-app voor handelaren inbegrepen

Vereisten

Installatie

Voeg toe aan uw Gemfile:

gem "nopayn"

Voer dan uit:

bundle install

Of installeer direct:

gem install nopayn

Snelstart

1. De client initialiseren

require "nopayn"

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

2. Een betaling aanmaken en doorverwijzen naar de 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. De webhook afhandelen

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-referentie

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

ParameterTypeVereistStandaard
api_keyStringJa
merchant_idStringJa
base_urlStringNeehttps://api.nopayn.co.uk

client.create_order(params) -> OpenStruct

Maakt een bestelling aan via POST /v1/orders/.

ParameterTypeVereistBeschrijving
:amountIntegerJaBedrag in kleinste valuta-eenheid (centen)
:currencyStringJaISO 4217-code (EUR, GBP, USD, NOK, SEK)
:merchant_order_idStringNeeUw interne bestellingsreferentie
:descriptionStringNeeBestellingsbeschrijving
:return_urlStringNeeDoorverwijzing na geslaagde betaling
:failure_urlStringNeeDoorverwijzing bij annulering/verloop/fout
:webhook_urlStringNeeAsynchrone statuswijzigingsmeldingen
:localeStringNeeHPP-taal (en-GB, de-DE, nl-NL, enz.)
:payment_methodsArray<String>NeeHPP-methoden filteren
:expiration_periodStringNeeISO 8601-duur (PT30M)

Beschikbare betaalmethoden: credit-card, apple-pay, google-pay, vipps-mobilepay

client.get_order(order_id) -> OpenStruct

Haalt bestellingsdetails op via GET /v1/orders/{id}/.

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

Voert een volledige of gedeeltelijke terugbetaling uit via POST /v1/orders/{id}/refunds/.

client.generate_payment_url(params) -> OpenStruct

Hulpmethode die een bestelling aanmaakt en retourneert:

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

Genereert een HMAC-SHA256 hex-handtekening.

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

Constant-time verificatie van een HMAC-SHA256-handtekening.

client.verify_webhook(raw_body) -> OpenStruct

Parst de webhook-body en roept vervolgens GET /v1/orders/{id}/ aan om de werkelijke status te verifieren.

Standalone HMAC-hulpmiddelen

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)

Foutafhandeling

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
UitzonderingBovenliggende klasseBeschrijving
NoPayn::ErrorStandardErrorBasisfout voor alle SDK-fouten
NoPayn::ApiErrorNoPayn::ErrorHTTP-fout van de API
NoPayn::WebhookErrorNoPayn::ErrorOngeldige webhook-payload

Bestellingsstatussen

StatusDefinitief?Beschrijving
newNeeBestelling aangemaakt
processingNeeBetaling wordt verwerkt
completedJaBetaling geslaagd — lever de goederen
cancelledJaBetaling geannuleerd door klant
expiredJaBetaallink verlopen
errorJaTechnische storing

Best practices voor webhooks

  1. Verifieer altijd via de API — de webhook-payload bevat alleen het bestelling-ID, nooit de status. De verify_webhook van de SDK doet dit automatisch.
  2. Retourneer HTTP 200 om de ontvangst te bevestigen. Elke andere code triggert tot 10 herhaalpogingen (2 minuten tussenpozen).
  3. Implementeer een backup-poller — voor bestellingen ouder dan 10 minuten die nog geen definitieve status hebben bereikt, poll get_order als vangnet.
  4. Wees idempotent — u kunt dezelfde webhook meerdere keren ontvangen.

Testkaarten

Gebruik deze kaarten in Cost+ testmodus (sandbox-website):

KaartNummerOpmerkingen
Visa (geslaagd)4111 1111 1111 1111Willekeurige CVV
Mastercard (geslaagd)5544 3300 0003 7Willekeurige CVV
Visa (geweigerd)4111 1111 1111 1105Do Not Honor
Visa (onvoldoende saldo)4111 1111 1111 1151Insufficient Funds

Gebruik een willekeurige toekomstige vervaldatum en een willekeurige 3-cijferige CVC.

Demo-app

Een op Sinatra gebaseerde demo-app is opgenomen in de GitHub-repository om de volledige betalingsflow te testen.

Ondersteuning

Hulp nodig? Neem contact op met ons supportteam via support@costplus.io.

On this page