Mollie API client for Crystal

Example payment

Accepting iDEAL, Bancontact, SOFORT Banking, Creditcard, SEPA Bank transfer, SEPA Direct debit, PayPal, KBC/CBC Payment Button, Belfius Direct Net, paysafecard, ING Home’Pay, Gift cards, EPS, Giropay and Apple Pay online payments without fixed monthly costs or any punishing registration procedures. Just use the Mollie API to receive payments directly on your website or easily refund transactions to your customers.

GitHub GitHub tag (latest SemVer) GitHub Workflow Status

Disclaimer

This is the unofficial Crystal shard for Mollie. It's directly ported from the Ruby version (mollie-ruby-api) but not an exact copy. Usage may vary from the Ruby version due to language differences and to make the most of Crystal's type system.

Requirements

To use the Mollie API client, the following things are required:

Installation

Add mollie as a depencency to your application's shard.yml:

dependencies:
  mollie:
    github: wout/mollie.cr

Then run shards install.

Usage

Create an initializer and add the following line:

Mollie.configure do |config|
  config.api_key = ENV["MOLLIE_API_KEY"]
end

You can also include a client instance in each request you make:

Mollie::Payment.get("pay-id", client: Mollie::Client.new("<your-api-key>"))

If you need to do multiple calls with the same API Key, use the following helper:

Mollie::Client.with_api_key("<your-api-key>") do |mollie|
  mandates = mollie.customer_mandate.all({ customer_id: "customer-id" })

  return if mandates.empty? 
  
  payment = mollie.payment.create({
    amount: {
      value:    "10.00",
      currency: "EUR",
    },
    method:       "creditcard",
    description:  "My first API payment",
    redirect_url: "https://webshop.example.org/order/12345/",
    webhook_url:  "https://webshop.example.org/mollie-webhook/",
  })
end

Creating a new payment

payment = Mollie::Payment.create({
  amount: {
    value:    "10.00",
    currency: "EUR",
  },
  method:       "creditcard",
  description:  "My first API payment",
  redirect_url: "https://shop.org/order/12345",
  webhook_url:  "https://shop.org/mollie-webhook",    
})

Note: Make sure to send the right amount of decimals and omit the thousands separator. Non-string values are not accepted.

To ensure amount values always carry the correct amount of decimals, an instance of Mollie::Amount can be passed, which accepts integers, floats and strings:

payment = Mollie::Payment.create({
  amount:       Mollie::Amount.new(10, "EUR"),
  method:       "creditcard",
  description:  "My first API payment",
})

Retrieving a payment

payment = Mollie::Payment.get("pay-id")

puts "Payment received." if payment.paid?

Refunding payments

The API also supports refunding payments. Note that there is no confirmation and that all refunds are immediate and definitive. Refunds are only supported for certain payment methods.

payment = Mollie::Payment.get("pay-id")
refund = payment.refund!({
  amount: {
    value: "10.00",
    currency: "EUR"
  }
})

Pagination

Fetching all objects of a resource can be convenient. At the same time, returning too many objects at once can be unpractical from a performance perspective. Doing so might be too much work for the Mollie API to generate, or for your website to process. The maximum number of objects returned is 250.

For this reason the Mollie API only returns a subset of the requested set of objects. In other words, the Mollie API chops the result of a certain API method call into pages you’re able to programmatically scroll through.

payments = Mollie::Payment.all
payments.next
payments.previous

Documentation

Contributing

  1. Fork it (https://github.com/your-github-user/mollie/fork)
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request

Contributors

License

BSD (Berkeley Software Distribution) License.

Support

Mollie Contact: www.mollie.com — info@mollie.com — +31 20-612 88 55