Pagar.me Ruby library
gem install pagarmeor add the following line to Gemfile:
gem 'pagarme'and run bundle install from your shell.
You can set your API key in Ruby:
PagarMe.api_key = 'YOUR_API_KEY_HERE'
PagarMe.encryption_key = 'YOUR_ENCRYPTION_KEY_HERE' # If neededor set the environment variable PAGARME_API_KEY (recommended) and PAGARME_ENCRYPTION_KEY (recommended if needed)
See our demo checkout.
More about how to use it here.
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
).chargeMore about Creating a Credit Card Transaction.
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.
transaction = PagarMe::Transaction.new(
amount: 1000, # in cents
payment_method: 'boleto'
)
transaction.charge
transaction.boleto_url # => boleto's URL
transaction.boleto_barcode # => boleto's barcodeMore about Creating a Boleto Transaction.
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 }
]
).chargeMore about Split Rules.
You can use recurring charges, learn more here.
It's important to understand the charges flow, learn more here
PagarMe::Plan.new(
amount: 4990,
days: 30,
name: 'Gold Plan'
).createMore about Creating a Plan.
PagarMe::Subscription.new(
plan: PagarMe::Plan.find_by_id('1234'),
card_hash: card_hash,
customer: { email: '[email protected]' }
).createMore about Creating a Subscription.
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.
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 = 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 accountJust that!
More about Balance
To access the history of balance operations:
PagarMe::BalanceOperation.balance_operationsPaginating:
PagarMe::BalanceOperation.balance_operations 2, 50 # second page, 50 per pageMore about Balance Operations
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 accountJust that!
More about Recipient Balance
To access the history of balance operations:
PagarMe::Recipient.find(recipient_id).balance_operationsPaginating:
PagarMe::Recipient.find(recipient_id).balance_operations 2, 50 # second page, 50 per pageMore about Recipient Balance Operations
PagarMe::Recipient.default.bulk_anticipations_limitsMore about Checking Bulk Anticipation Limits
PagarMe::Recipient.default.bulk_anticipate(
timeframe: :start,
payment_date: Date.new(2016, 12, 25),
requested_amount: 10000 # in cents
)More about Requesting Bulk Anticipation
PagarMe::BulkAnticipation.all page, countMore about Getting Bulk Anticipation
PagarMe::Payable.find 'payable_id'More about Getting Payable
PagarMe::Payable.all page, count PagarMe::Payable.find_by status: 'paid'More about Querying Payables
transaction = PagarMe::Transaction.find 'transaction_id'
transaction.payablesMore about Payable Transactions
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)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
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!
Add support to ElasticSearch Query DSL, so you can search your data optimally.
And document all the source code.
If you have any problem or suggestion please open an issue here.
Check here.
