pagarme-ruby

Build Status

Pagar.me Ruby library

Documentation

Getting Started

Install

gem install pagarme

or add the following line to Gemfile:

gem 'pagarme'

and run bundle install from your shell.

Configure your API key

You can set your API key in Ruby:

PagarMe.api_key        = 'YOUR_API_KEY_HERE'
PagarMe.encryption_key = 'YOUR_ENCRYPTION_KEY_HERE' # If needed

or set the environment variable PAGARME_API_KEY (recommended) and PAGARME_ENCRYPTION_KEY (recommended if needed)

Using Pagar.me Checkout

See our demo checkout.

More about how to use it here.

Transactions

Creating a Credit Card Transaction

To create a credit card transaction, you need a card_hash.

  PagarMe::Transaction.new(
    amount:    1000,      # in cents
    card_hash: card_hash  # how to get a card hash: docs.pagar.me/capturing-card-data
  ).charge

More about Creating a Credit Card Transaction.

Creating a Customer

  customer = PagarMe::Customer.create(
    name: 'Morpheus Fishburne',
    email: '[email protected]',
    type: 'individual',
    external_id: "#3311",
    country: 'br',
    birthday: "1965-01-01",
    documents: [
      {type: "cpf", number: "86870624194"}
    ],
    phone_numbers: ["+5511999998888", "+5511888889999"]
  )

More about Creating a Customer.

Creating a Boleto Transaction

  transaction = PagarMe::Transaction.new(
    amount:         1000,    # in cents
    payment_method: 'boleto'
  )
  transaction.charge

  transaction.boleto_url     # => boleto's URL
  transaction.boleto_barcode # => boleto's barcode

More about Creating a Boleto Transaction.

Split Rules

With split rules, received amount could be splitted between more than one recipient. For example, splitting equally a transaction:

  PagarMe::Transaction.new(
    amount:    1000,      # in cents
    card_hash: card_hash, # how to get a card hash: docs.pagar.me/capturing-card-data
    split_rules: [
      { recipient_id: recipient_id_1, percentage: 50 },
      { recipient_id: recipient_id_2, percentage: 50 }
    ]
  ).charge

More about Split Rules.

Plans & Subscriptions

You can use recurring charges, learn more here.

It's important to understand the charges flow, learn more here

Creating a Plan

  PagarMe::Plan.new(
    amount: 4990,
    days:   30,
    name:   'Gold Plan'
  ).create

More about Creating a Plan.

Creating a Subscription

  PagarMe::Subscription.new(
    plan:      PagarMe::Plan.find_by_id('1234'),
    card_hash: card_hash,
    customer:  { email: '[email protected]' }
  ).create

More about Creating a Subscription.

Recipients

Creating a Recipient

To create a recipient, so it can receive payments through split rules or transfers:

  PagarMe::Recipient.create(
    bank_account: {
      bank_code:       '237',
      agencia:         '1935',
      agencia_dv:      '9',
      conta:           '23398',
      conta_dv:        '9',
      legal_name:      'Fulano da Silva',
      document_number: '00000000000000' # CPF or CNPJ
    },
    transfer_enabled: false
  )

More about Creating a Recipient.

Transfer Available Amout to Bank Account Manually

This is only needed if transfer_enabled is set to false. If set to true, transfer_interval and transfer_day will handle it automatically.

  PagarMe::Recipient.find(recipient_id).receive amount

Balance And Balance Operations

Checking Balance

  balance = PagarMe::Balance.balance
  balance.waiting_funds.amount # money to be received in your account
  balance.available.amount     # in your pagarme account
  balance.transferred.amount   # transferred to your bank account

Just that!

More about Balance

Checking Balance Operations

To access the history of balance operations:

  PagarMe::BalanceOperation.balance_operations

Paginating:

  PagarMe::BalanceOperation.balance_operations 2, 50 # second page, 50 per page

More about Balance Operations

Checking Recipient Balance

  balance = PagarMe::Recipient.find(recipient_id).balance
  balance.waiting_funds.amount # money to be received in his account
  balance.available.amount     # in his pagarme account
  balance.transferred.amount   # transferred to his bank account

Just that!

More about Recipient Balance

Checking Recipient Balance Operations

To access the history of balance operations:

  PagarMe::Recipient.find(recipient_id).balance_operations

Paginating:

  PagarMe::Recipient.find(recipient_id).balance_operations 2, 50 # second page, 50 per page

More about Recipient Balance Operations

Request Bulk Anticipation

Checking limits

  PagarMe::Recipient.default.bulk_anticipations_limits

More about Checking Bulk Anticipation Limits

Requesting Bulk Anticipation

  PagarMe::Recipient.default.bulk_anticipate(
    timeframe:        :start,
    payment_date:     Date.new(2016, 12, 25),
    requested_amount: 10000 # in cents
  )

More about Requesting Bulk Anticipation

Getting Bulk Anticipation

  PagarMe::BulkAnticipation.all page, count

More about Getting Bulk Anticipation

Payables

Getting Payable

  PagarMe::Payable.find 'payable_id'

More about Getting Payable

Querying Payables

  PagarMe::Payable.all page, count
  PagarMe::Payable.find_by status: 'paid'

More about Querying Payables

Querying Payables by Transaction

  transaction = PagarMe::Transaction.find 'transaction_id'
  transaction.payables

More about Payable Transactions

Validating Postback

You need to ensure that all received postback are sent by Pagar.me and not from anyone else, to do this, is very important to validate it.

You must do it using the raw payload received on post request, and check it signature provided in HTTP header X-Hub-Signature.

You can check it like this:

  PagarMe::Postback.valid_request_signature?(payload, signature)

Rails Example

If you are using Rails, you should do it your controller like this:


    class PostbackController < ApplicationController
      skip_before_action :verify_authenticity_token

      def postback
        if valid_postback?
          # Handle your code here
          # postback payload is in params
        else
          render_invalid_postback_response
        end
      end

      protected
      def valid_postback?
        raw_post  = request.raw_post
        signature = request.headers['HTTP_X_HUB_SIGNATURE']
        PagarMe::Postback.valid_request_signature?(raw_post, signature)
      end

      def render_invalid_postback_response
        render json: {error: 'invalid postback'}, status: 400
      end
    end


request.raw_post

Undocumented Features

This gem is stable, but in constant development.

This README is just a quick abstract of it's main features.

You can easily browse it's source code to see all supported resources.

We will document everything while adding support to all resources listed in Full API Guide.

Feel free to help us to add support to features sending pull requests.

Thanks!

TODO

Add support to ElasticSearch Query DSL, so you can search your data optimally.

And document all the source code.

Support

If you have any problem or suggestion please open an issue here.

License

Check here.