Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

A Ruby wrapper for Klarna XML-RPC API.

branch: master

Fetching latest commit…

Octocat-spinner-32-eaf2f5

Cannot retrieve the latest commit at this time

Octocat-spinner-32 examples
Octocat-spinner-32 lib
Octocat-spinner-32 test
Octocat-spinner-32 .gitignore
Octocat-spinner-32 .travis.yml
Octocat-spinner-32 Gemfile
Octocat-spinner-32 Guardfile
Octocat-spinner-32 MIT-LICENSE
Octocat-spinner-32 README.textile
Octocat-spinner-32 Rakefile
Octocat-spinner-32 TODO
Octocat-spinner-32 klarna.gemspec
README.textile

KLARNA

A Ruby wrapper for the Klarna XML-RPC API.

What is Klarna?

Klarna is a payment solution with focus on e-commerce. Visit klarna.com for more information, or why not Wikipedia: Klarna. We might be biased, but at Merchii we currently consider Klarna the most convenient online payment solution that exists – and that’s why we lean on it.

Supported countries:

Sweden (SE), Norway (NO), Denmark (DK), Finland (FI), Germany (DE), Netherlands (NL).

Implementation/Background

This gem was developed as a semi-1:1 implementation of the corresponding API implementations provided by Klarna (with a few simple justifications and heavily refactored methods). Klarnas official implementations were not implemented using OO patterns and as their implementation was changing very often without any notice/versioning I kept it simple as possible.

Since Klarna 2.0 was released they’va refactored their implementations a lot which makes it a good idea to review this implementation as well. Like stated in the TODO I had a clean classy DSL in mind.

This is not a complete implementation, but not far from it and enough for most use cases – a few of the more advanced API methods needs a review/revisit (code disabled now).

Setup

Install the gem:

  $ gem install klarna

…or if you use Bundler:

Gemfile:

  gem 'klarna'

…and $ bundle install.

Usage

Trivial example looking up an address using – in this case – a Swedish SSN:

  require 'rubygems'
  require 'klarna'

  Klarna.configure do |c|
    c.store_id = 123
    c.store_secret = 'secret'

    c.mode = :test
    c.http_logging = false
  end

  client = Klarna::API::Client.new

  client.get_addresses("430415-8399", :SE)

See the code/docs for more information.

Testing

A couple of ways…

Specs

To run unit/integration tests, simply do:

  $ bundle exec rake test

…or if you use Guard:

  $ bundle exec guard

Dummie client

  $ cd examples
  $ ruby console.rb

Web/Sinatra app

1. Start the server…

  $ cd examples
  $ ruby web.rb
  ...
  >> Listening on 0.0.0.0:4567, CTRL+C to stop

2. Open it up!

http://localhost:4567

NOTE: The web app actions/forms are probably completely broken currently as it hasn’t been updated to reflect the current library implementation.

Debugging

HTTP-debugging in Wireshark

Ensure port 4567 (port used for Klarna API integration test/debugging) is in the list of captured ports in the HTTP/HTTPS preferences, or these requests/responses will not be captured. Note: Port 80 (port used for Klarna API integration in production) is captured by default.

XML-RPC-debugging in a XML-RPC client

Try this:

Endpoint: http://beta-test.klarna.com:4567
Method: get_addresses
Params: ["1.0","ruby/xmlrpc","430415-8399",2,"AY2qnVNi8ccTsuDw2XNovQ==",2,2]

References

Tools

  • XML-RPC Client for XML-RPC debugging on OS X.
  • Wireshark for platform-independent protocol sniffing, useful for debugging XML-RPC requests/responses.

Notes

This gem was developed for our own requirements at Merchii, so feel free to send pull-requests with enhancements of any kind (features, bug-fixes, documentation, tests, etc.) to make it better or useful for you as well.

To-do

See the TODO.

License

Released under the MIT license.
Copyright © Jonas Grimfelt, Merchii

Something went wrong with that request. Please try again.