Cost+Docs

Ruby

Virallinen Ruby SDK Cost+-maksuportille

Virallinen Ruby SDK Cost+-maksuportille. Yksinkertaistaa HPP (isännöidyn maksusivun) uudelleenohjausta, HMAC-allekirjoitusta ja webhook-vahvistusta.

Ominaisuudet

  • HMAC-SHA256-allekirjoituksen luonti ja vakioaikainen vahvistus
  • Automaattinen snake_case-muunnos API:sta Ruby-ystävällisiin OpenStruct-objekteihin
  • Webhook-jäsennys + API-pohjainen tilauksen vahvistus
  • Testattu Ruby 3.1-, 3.2- ja 3.3-versioilla
  • Sinatra-pohjainen demokauppiassovellus sisältyy

Vaatimukset

Asennus

Lisää Gemfileesi:

gem "nopayn"

Suorita sitten:

bundle install

Tai asenna suoraan:

gem install nopayn

Pikaopas

1. Alusta asiakas

require "nopayn"

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

2. Luo maksu ja ohjaa HPP:hen

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. Käsittele webhook

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

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

ParametriTyyppiPakollinenOletus
api_keyStringKyllä
merchant_idStringKyllä
base_urlStringEihttps://api.nopayn.co.uk

client.create_order(params) -> OpenStruct

Luo tilauksen kutsulla POST /v1/orders/.

ParametriTyyppiPakollinenKuvaus
:amountIntegerKylläSumma pienimmässä valuuttayksikössä (senteissä)
:currencyStringKylläISO 4217 -koodi (EUR, GBP, USD, NOK, SEK)
:merchant_order_idStringEiOma sisäinen tilausviitteesi
:descriptionStringEiTilauksen kuvaus
:return_urlStringEiUudelleenohjaus onnistuneen maksun jälkeen
:failure_urlStringEiUudelleenohjaus peruutuksen/vanhenemisen/virheen yhteydessä
:webhook_urlStringEiAsynkroniset tilanmuutosilmoitukset
:localeStringEiHPP:n kieli (en-GB, de-DE, nl-NL jne.)
:payment_methodsArray<String>EiSuodata HPP:n maksutapoja
:expiration_periodStringEiISO 8601 -kesto (PT30M)

Käytettävissä olevat maksutavat: credit-card, apple-pay, google-pay, vipps-mobilepay

client.get_order(order_id) -> OpenStruct

Hakee tilauksen tiedot kutsulla GET /v1/orders/{id}/.

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

Tekee täyden tai osittaisen palautuksen kutsulla POST /v1/orders/{id}/refunds/.

client.generate_payment_url(params) -> OpenStruct

Apumetodi, joka luo tilauksen ja palauttaa:

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

Luo HMAC-SHA256 hex-allekirjoituksen.

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

Vakioaikainen HMAC-SHA256-allekirjoituksen vahvistus.

client.verify_webhook(raw_body) -> OpenStruct

Jäsentää webhook-rungon ja kutsuu sitten GET /v1/orders/{id}/ varmistaakseen todellisen tilan.

Erilliset HMAC-apufunktiot

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)

Virheenkäsittely

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
PoikkeusYlätasoKuvaus
NoPayn::ErrorStandardErrorPerusvirhe kaikille SDK-virheille
NoPayn::ApiErrorNoPayn::ErrorHTTP-virhe API:sta
NoPayn::WebhookErrorNoPayn::ErrorVirheellinen webhook-data

Tilausten tilat

TilaLopullinen?Kuvaus
newEiTilaus luotu
processingEiMaksu käynnissä
completedKylläMaksu onnistui — toimita tavarat
cancelledKylläAsiakas peruutti maksun
expiredKylläMaksulinkki vanheni
errorKylläTekninen virhe

Webhook-parhaat käytännöt

  1. Vahvista aina API:n kautta — webhook-data sisältää vain tilauksen tunnisteen, ei koskaan tilaa. SDK:n verify_webhook tekee tämän automaattisesti.
  2. Palauta HTTP 200 kuittauksena. Mikä tahansa muu koodi käynnistää enintään 10 uudelleenyritystä (2 minuutin välein).
  3. Toteuta varapolleri — yli 10 minuuttia vanhoille tilauksille, jotka eivät ole saavuttaneet lopullista tilaa, pollaa get_order turvavarana.
  4. Ole idempotentti — saatat vastaanottaa saman webhookin useita kertoja.

Testikortit

Käytä näitä kortteja Cost+:n testitilassa (sandbox-verkkosivusto):

KorttiNumeroHuomautukset
Visa (onnistunut)4111 1111 1111 1111Mikä tahansa CVV
Mastercard (onnistunut)5544 3300 0003 7Mikä tahansa CVV
Visa (hylätty)4111 1111 1111 1105Do Not Honor
Visa (riittämätön kate)4111 1111 1111 1151Insufficient Funds

Käytä mitä tahansa tulevaa voimassaolopäivää ja mitä tahansa 3-numeroista CVC:tä.

Demosovellus

Sinatra-pohjainen demosovellus sisältyy GitHub-tietovarastoon täyden maksukulun testaamiseksi.

Tuki

Tarvitsetko apua? Ota yhteyttä tukitiimiimme osoitteessa support@costplus.io.

On this page