Cost+Docs

Ruby

Επίσημο Ruby SDK για την πύλη πληρωμών Cost+

Επίσημο Ruby SDK για την πύλη πληρωμών Cost+. Απλοποιεί τη ροή ανακατεύθυνσης HPP (Φιλοξενούμενη Σελίδα Πληρωμής), την υπογραφή HMAC payload και την επαλήθευση webhook.

Χαρακτηριστικά

  • HMAC-SHA256 signature generation and constant-time verification
  • Automatic snake_case mapping from the API to Ruby-friendly OpenStruct objects
  • Webhook parsing + API-based order verification
  • Tested across Ruby 3.1, 3.2, and 3.3
  • Sinatra-based demo merchant app included

Απαιτήσεις

Εγκατάσταση

Προσθέστε στο Gemfile σας:

gem "nopayn"

Στη συνέχεια εκτελέστε:

bundle install

Ή εγκαταστήστε απευθείας:

gem install nopayn

Γρήγορη Εκκίνηση

1. Αρχικοποίηση του Client

require "nopayn"

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

2. Δημιουργία Πληρωμής και Ανακατεύθυνση στο 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. Διαχείριση του 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

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

ΠαράμετροςΤύποςΑπαιτούμενηΠροεπιλογή
api_keyStringΝαι
merchant_idStringΝαι
base_urlStringΌχιhttps://api.nopayn.co.uk

client.create_order(params) → OpenStruct

Δημιουργεί παραγγελία μέσω POST /v1/orders/.

ΠαράμετροςΤύποςΑπαιτούμενηΠεριγραφή
:amountIntegerΝαιΠοσό στη μικρότερη μονάδα νομίσματος (λεπτά)
:currencyStringΝαιISO 4217 code (EUR, GBP, USD, NOK, SEK)
:merchant_order_idStringΌχιΗ εσωτερική αναφορά παραγγελίας σας
:descriptionStringΌχιΠεριγραφή παραγγελίας
:return_urlStringΌχιΑνακατεύθυνση μετά από επιτυχή πληρωμή
:failure_urlStringΌχιΑνακατεύθυνση σε ακύρωση/λήξη/σφάλμα
:webhook_urlStringΌχιΑσύγχρονες ειδοποιήσεις αλλαγής κατάστασης
:localeStringΌχιHPP language (en-GB, de-DE, nl-NL, etc.)
:payment_methodsArray<String>ΌχιΦιλτράρισμα μεθόδων HPP
:expiration_periodStringΌχιISO 8601 duration (PT30M)

Διαθέσιμες μέθοδοι πληρωμής: credit-card, apple-pay, google-pay, vipps-mobilepay

client.get_order(order_id) → OpenStruct

Ανακτά λεπτομέρειες παραγγελίας μέσω GET /v1/orders/{id}/.

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

Εκδίδει πλήρη ή μερική επιστροφή χρημάτων μέσω POST /v1/orders/{id}/refunds/.

client.generate_payment_url(params) → OpenStruct

Μέθοδος ευκολίας που δημιουργεί παραγγελία και επιστρέφει:

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

Δημιουργεί υπογραφή HMAC-SHA256 σε hex.

client.verify_signature(amount, currency, order_id, signature) → Boolean

Επαλήθευση σταθερού χρόνου υπογραφής HMAC-SHA256.

client.verify_webhook(raw_body) → OpenStruct

Αναλύει το σώμα webhook, στη συνέχεια καλεί GET /v1/orders/{id}/ για επαλήθευση πραγματικής κατάστασης.

Αυτόνομα Εργαλεία HMAC

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)

Διαχείριση Σφαλμάτων

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
ΕξαίρεσηΓονικήΠεριγραφή
NoPayn::ErrorStandardErrorΒασικό σφάλμα για όλα τα σφάλματα SDK
NoPayn::ApiErrorNoPayn::ErrorΣφάλμα HTTP από το API
NoPayn::WebhookErrorNoPayn::ErrorΜη έγκυρο payload webhook

Καταστάσεις Παραγγελίας

ΚατάστασηΤελική;Περιγραφή
newΌχιΗ παραγγελία δημιουργήθηκε
processingΌχιΠληρωμή σε εξέλιξη
completedΝαιΗ πληρωμή ήταν επιτυχής — παραδώστε τα αγαθά
cancelledΝαιΗ πληρωμή ακυρώθηκε από τον πελάτη
expiredΝαιΟ σύνδεσμος πληρωμής έληξε
errorΝαιΤεχνική αποτυχία

Βέλτιστες Πρακτικές Webhook

  1. Πάντα επαληθεύετε μέσω API — το payload webhook περιέχει μόνο το αναγνωριστικό παραγγελίας, ποτέ την κατάσταση. Η μέθοδος verify_webhook του SDK το κάνει αυτόματα.
  2. Επιστρέψτε HTTP 200 για επιβεβαίωση λήψης. Οποιοσδήποτε άλλος κωδικός ενεργοποιεί έως 10 επαναπροσπάθειες (2 λεπτά μεταξύ τους).
  3. Υλοποιήστε εφεδρικό poller — για παραγγελίες παλαιότερες από 10 λεπτά που δεν έχουν φτάσει σε τελική κατάσταση, κάντε polling get_order ως δίχτυ ασφαλείας.
  4. Να είστε idempotent — μπορεί να λάβετε το ίδιο webhook πολλές φορές.

Δοκιμαστικές Κάρτες

Χρησιμοποιήστε αυτές τις κάρτες στη δοκιμαστική λειτουργία Cost+ (ιστοσελίδα sandbox):

ΚάρταΑριθμόςΣημειώσεις
Visa (επιτυχία)4111 1111 1111 1111Οποιοδήποτε CVV
Mastercard (επιτυχία)5544 3300 0003 7Οποιοδήποτε CVV
Visa (απόρριψη)4111 1111 1111 1105Do Not Honor
Visa (ανεπαρκές υπόλοιπο)4111 1111 1111 1151Insufficient Funds

Χρησιμοποιήστε οποιαδήποτε μελλοντική ημερομηνία λήξης και οποιοδήποτε 3ψήφιο CVC.

Εφαρμογή Επίδειξης

Μια εφαρμογή επίδειξης βασισμένη σε Sinatra περιλαμβάνεται στο GitHub repository για δοκιμή πλήρους ροής πληρωμής.

Υποστήριξη

Χρειάζεστε βοήθεια; Επικοινωνήστε με την ομάδα υποστήριξης στο support@costplus.io.

On this page