Project

scanpay

0.0
No release in over 3 years
Low commit activity in last 3 years
Accept payments with the Scanpay payment gateway. See https://scanpay.dk for more details.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Runtime

 Project Readme

Scanpay ruby client

The official Ruby client library for the Scanpay API (docs). You can always e-mail us at help@scanpay.dk, or chat with us on IRC at libera.chat #scanpay

Installation

You need Ruby version >= 2.0 with httpclient. The code is published at rubygems and you can install it with:

gem install scanpay

And include it in your project:

require 'scanpay'
client = Scanpay::Client.new('API key')

Manual installation

Download the latest release and include in into your project:

require_relative 'lib/scanpay'
scanpay = Scanpay::Client.new('API key')

Usage

The API documentation is available here. Most methods accept an optional per-request object with options, here referred to as options.

Create a Scanpay client to start using this library:

scanpay = Scanpay::Client.new(' APIKEY ')

Payment Link

newURL(Object, options)

Create a link to our hosted payment window (docs | example).

order = {
    'items' => [{ 'total' => '199.99 DKK' }]
];
puts "Payment url: #{scanpay.newURL(order, options)}"

Synchronization

To know when transactions, charges, subscribers and subscriber renewal succeeds, you need to use the synchronization API. It consists of pings which notify you of changes, and the seq request which allows you to pull changes.

handlePing(String, String)

Handle and validate synchronization pings. The method accepts two arguments, the body of the received ping and the X-Signature HTTP header. The method returns a hash (docs | example).

json = scanpay.handlePing(body, signature)

seq(Integer, options)

Make a sequence request to pull changes after a specified sequence number (docs | example).

localSeq = 921;
seqobj = scanpay.seq(localSeq, options)

Transactions

capture(Integer, Object, options)

Use Capture to capture a transaction. (docs | example).

transactionId = 5;
data = {
    'total' => '123 DKK',
    'index' => 0,
];
scanpay.capture(transactionId, data, options)

refund(Integer, Object, options)

Use Refund to refund a captured transaction (docs | example).

transactionId = 5;
data = {
    'total' => '123 DKK',
    'index' => 0,
];
scanpay.refund(transactionId, data, options)

void(Integer, Object, options)

Use Void to void the amount authorized by the transaction (docs | example).

transactionId = 5;
data = {
    'index' => 0,
];
scanpay.void(transactionId, data, options)

Subscriber

Create a subscriber by using newURL with a Subscriber parameter (docs | example).

order = {
    'subscriber' => { 'ref' => 'sub123' },
];
puts "Payment url: #{scanpay.newURL(order, options)}"

charge(Integer, Object, options)

Use charge to charge a subscriber. The subscriber id is obtained with seq (docs | example).

subscriberId = 11;
data = {
    'items' => [{ 'total' => '199.99 DKK' }],
];
scanpay.charge(subscriberId, data, options)

renew(Integer, Object, options)

Use renew to renew a subscriber, i.e. to attach a new card, if it has expired docs | example).

subscriberId = 11;
data = {
    'successurl' => 'https://scanpay.dk',
];
scanpay.renew(subscriberId, data, options)

Options

All methods, except handlePing, accept an optional per-request options hash. You can use this to:

  • Set the API key for this request (example)
  • Set HTTP headers, e.g. the highly recommended X-Cardholder-IP (example)
  • Change the hostname to use our test environment api.test.scanpay.dk (example)
  • Enable debugging mode (example)

License

Everything in this repository is licensed under the MIT license.