
Utilizando o MOIP em uma aplicação Rails
Amigos developers, neste artigo veremos uma aplicação introdutória usando o método de pagamento do Moip, para comprar um ingresso para o evento OneBitConf, uma conferência da Onebitcode.
Calma! ✋ Essa conferência OneBitConf ainda não existe. Usaremos apenas como exemplo, mas futuramente teremos uma OneBitConf 😉
Introdução
Vamos criar uma aplicação de amostra, bem simples, enviando um pedido de compra de ingresso para o evento que falamos anteriormente.
Sigam o tutorial e construam a aplicação na seção “Passo a Passo da criação do APP”. Assim, os conceitos, a integração da gem moip2 com Rails e alguns outros detalhes podem ficar mais claros.
Espero que este material seja útil. Aproveitem e deixem uma mensagem. 😊
Bóra ler o post 🚀
O que é Moip?
Moip é uma empresa que oferece soluções de pagamento. Sua missão é facilitar pagamentos online, offline e mobile, viabilizando o recebimento de pagamentos em vários canais de venda.
Mas MOIP também é o nome da gem que facilita o uso das APIs disponibilizadas pela empresa Moip. A gem moip2 é um cliente em Ruby para integração server-side com APIs Moip v2.
Segundo o próprio site desta gem, usando a gem moip2, é o jeito mais simples e rápido de integrar o Moip a uma aplicação Ruby.
O que vamos criar?
A aplicação que vamos criar aqui, é apenas um exemplo. É uma amostra, porém, suficiente para enviarmos um pedido de compra de ingresso para um evento. Dessa forma, mostraremos como utilizar o básico da gem da Moip.
Vamos criar também, uma conta tipo “sandbox” no site da Moip, para termos “Chaves de Acesso” aos serviços Moip.
Uma conta “sandbox” é específica para testes de desenvolvimento como esse que estamos fazendo e não implica em custos 💰. Fique tranquilo, você terá que criar a sua conta, mas não pagará nada. 😊
A conta Moip “sandbox” é uma conta totalmente separada da conta Moip Produção, caso você tenha essa conta de produção algum dia.
Ferramentas:
- * Rails 5.2
- * MOIP
- * moip2 (gem)
Links da Moip para desenvolvedores:
- Criar conta sandbox: https://bem-vindo-sandbox.moip.com.br
- Acessar sua conta sandbox: ryan single dating site graphic designer brooklyn new york
- Comandos da API: lying about your age on dating sites
- Chaves de acesso: white women dating latino
- Suporte, caso necessário: https://suporte.moip.com.br/hc/pt-br
Passo a Passo de criação do App
I – Criar a conta Sandbox
Para criar sua conta sandbox, entre no link https://bem-vindo-sandbox.moip.com.br e forneça os dados necessários. E logo após o cadastro, você terá que confirmar seu email.
É só seguir o processo que logo em seguida, a Moip irá disponibilizar uma conta para você poder usar na aplicação que iremos criar.
Após criar sua conta, você poderá acessa-la usando este link: ryan single dating site graphic designer brooklyn new york
II – Obter as chaves de acesso
Para podermos realizar chamadas para as APIs da Moip precisamos ter as chaves de acesso ou ter as chamadas “credenciais de api”.
Então vamos acessar as credenciais da api de sua conta sandbox, e guardar a “chave” e o “token” para usa-los posteriormente.
- Entre no link a seguir: white women dating latino
- O TOKEN terá um valor parecido com: NBRBNUNUDWGBKNCTLPTH7AYMMJLXB33I
- A CHAVE terá um valor parecido com: N8TIS2TUZVLWDQADRXHXKV2M3171KBIC81IVSCNF
- Guarde o conteúdo do campo TOKEN e do campo CHAVE que aparecem na tela.
III – Instalação
1. Para nosso projeto, vamos criar uma pasta e entrar dentro dela.
1 |
mkdir moipapp |
1 |
cd moipapp |
2. Execute este passo somente se você usa o gerenciador de versões Ruby, RVM:
1 |
rvm use ruby-2.5.0@moipapp --ruby-version --create |
3. Agora vamos instalar a versão 5.2 do Rails
1 |
gem install rails -v 5.2.0 --no-ri --no-rdoc |
4. Agora vamos efetivamente criar nossa aplicação Rails.
1 |
rails _5.2.0_ new . |
5. No Gemfile, inclua a gem:
1 |
gem 'moip2' |
6. Agora instale a gem na aplicação, com o comando:
1 |
bundle install |
7. E agora o comando para criar o banco:
1 |
bundle exec rails db:create |
IV – Credenciais
Continuando, vamos atribuir no nosso sistema, as credenciais que guardamos no item “II – Obter as chaves de acesso” e para isso usaremos o recurso do Rails chamado “Credentials”.
Se você quiser saber mais, temos um ótimo artigo específico: Rails 5.2: Encrypted Credentials (O novo Secrets)
1. Abra o arquivo de credenciais com seu editor de preferência, no meu caso é o Vim.
1 |
EDITOR=vim rails credentials:edit |
2. Agora tenha suas credenciais que pegamos no item “II – Obter as chaves de acesso”. Os valores de token e key (chave) são fictícios, para nosso artigo. Informe as seguintes linhas e depois salve e saia do arquivo:
1 2 3 4 |
development: moip: token: 'NBRBNUNUDWGBKNCTLPTH7AYMMJLXB33I' key: 'N8TIS2TUZVLWDQADRXHXKV2M3171KBIC81IVSCNF' |
V – Criando a lib Moip
Vamos criar uma “lib”, uma biblioteca para nos permitir acessar as APIs da Moip e dentro dessa nossa biblioteca, ficará a inteligência que nos dará acesso as operações que a Moip disponibiliza via APIs.
1. Precisamos dizer ao Rails, que no momento da aplicação entrar no ar, queremos carregar a pasta “lib” e para isso, faça seu arquivo config/application.rb ficar parecido com esse trecho de código:
1 2 3 4 5 6 7 |
... module Moipapp class Application < Rails::Application config.load_defaults 5.2 config.autoload_paths << "#{Rails.root}/app/libs" end end |
2. Agora crie o arquivo moip.rb dentro da pasta app/libs:
1 |
mkdir -p app/libs |
1 |
touch app/libs/moip.rb |
3. Esta é a lib que iremos usar. Apenas copie e cole o trecho de código a seguir para dentro do arquivo app/libs/moip.rb:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
class Moip attr_reader :token, :key def initialize(token = nil, key = nil) @token = token || get_token @key = key || get_key end def call authentication end private def get_token credentials[:token] end def get_key credentials[:key] end def credentials Rails.application.credentials[Rails.env.to_sym][:moip] end def authentication Moip2::Api.new(moip_client) end def moip_client Moip2::Client.new(:sandbox, moip_auth) end def moip_auth auth = Moip2::Auth::Basic.new(token, key) end end |
4. Agora é o momento de saber se o Moip está funcionando 😏. Entre no console do Rails e instancie a lib:
1 |
rails console |
1 |
> api = Moip.new.call |
Se aparecer algo como o resultado seguinte, então a nossa lib Moip está funcionando e você pode prosseguir tranquilo 😎
1 |
=> #<Moip2::Api:0x00007fa78f01a2c8 @client=#<Moip2::Client:0x00007fa78f01a548 @env=:sandbox, @auth=#<Moip2::Auth::Basic:0x00007fa78f01a570 @token="NBRBNUNUDWGBKNCTLPTH7AYMMJLXB33I", @secret="N8TIS2TUZVLWDQADRXHXKV2M3171KBIC81IVSCNF">, @opts={}, @uri="https://sandbox.moip.com.br">> |
Saia do console do Rails:
1 |
> exit |
Não perca nenhum conteúdo
Receba nosso resumo semanal com os novos posts, cursos, talks e vagas o/

Não perca nenhum conteúdo
Receba nosso resumo semanal com os novos posts, cursos, talks e vagas o/
VI – Criando controller e views para realizar um pedido de compra
Chegou o momento onde vamos criar a tela ao usuário e para este app faremos somente a parde de pedido de compra com uma tela bem simples, contendo apenas alguns campos. Isso dará uma noção básica e você poderá acrescentar campos necessários quando construir sua aplicação usando o método de pagamento Moip.
1. Gerando o controller com as actions new e create.
1 |
rails generate controller orders new create |
2. Corrigindo as rotas agora. Faça ficar dessa forma o config/routes.rb:
1 2 3 4 |
Rails.application.routes.draw do resources :orders, only: [:new, :create] root to: 'orders#new' end |
3. Abra a view new criada junto com o controller, que é o formulário que irá colher os dados do cliente e do pedido, e a deixe como seguinte conteúdo (app/views/orders/new.html.erb):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
<h1>Preencha seu pedido</h1> <h2>Evento: OneBitConf</h2> <%= form_tag orders_path do %> <article> <% if flash[:error].present? %> <div id="error_explanation"> <p><%= flash[:error] %></p> </div> <% end %> <h3> <%= tag.label 'Identificador do Pedido' %><br> <%= tag.input type: 'text', name: 'order[ownId]', value: 'pedido-0001', autofocus: true, id: :ownId %> </h3> <h3> <%= tag.label 'Identificador do Produto' %><br> <%= tag.input type: 'text', name: 'order[product]', value: 'Ingresso para a OneBitConf', size: 40, id: :product %> </h3> <h3> <%= tag.label 'Identificador do Cliente' %><br> <%= tag.input type: 'text', name: 'order[customerOwnId]', value: 'customer-001', size: 20, id: :customerOwnId %> </h3> <h3> <%= tag.label 'Nome Completo do Cliente' %><br> <%= tag.input type: 'text', name: 'order[customerFullName]', value: 'Jose da Silva', size: 40, id: :customerFullName %> </h3> <h3> <%= tag.label 'Email do Cliente' %><br> <%= tag.input type: 'text', name: 'order[customerEmail]', value: 'jose_da_silva@gmail.com', size: 40, id: :customerEmail %> </h3> <p> <%= tag.button type: :submit do %> Confirma <% end %> </p> </article> <% end %> |
4. A view create é a tela de confirmação do pedido. Deixe com o seguinte conteúdo (app/views/orders/create.html.erb).
1 2 |
<h1>Obrigado. Pedido enviado!</h1> <h3>Pedido número: <%= @order.id %> </h3> |
5. No controller, acrescentaremos alguns dados estão fixos. Quando você criar sua própria aplicação, esses campos fixos, ficarão na view para captar os dados que o usuário informar ou dados do pedido. Deixe o controller OrdersController com o seguinte conteúdo (app/controllers/orders_controller.rb):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
class OrdersController < ApplicationController def new end def create @api ||= Moip.new.call @order = @api.order.create(order_json) end private def order_json { ownId: params[:order][:ownId], amount: { currency: 'BRL', subtotals: { shipping: 1500 } }, items: [ { product: params[:order][:product], category: 'OTHER_CATEGORIES', quantity: 1, detail: 'Evento, 2018', price: 10000 } ], customer: { ownId: params[:order][:customerOwnId], fullname: params[:order][:customerFullName], email: params[:order][:customerEmail], taxDocument: { type: 'CPF', number: '11122233344' }, phone: { countryCode: '55', areaCode: '11', number: '55555555' }, shippingAddress: { street: 'Avenida 23 de Maio', streetNumber: 654, city: 'Sao Paulo', district: 'Centro', state: 'SP', country: 'BRA', zipCode: '01244500' } } } end end |
5. Inicie o servidor do Rails digitando no terminal:
1 |
rails server |
6. Visite no seu browser: http://localhost:3000/
Esta é a tela do pedido. Estão sendo apresentados dados do pedido e do cliente. Dê um click no botão “confirma” para confirmar o pedido e ir para a próxima tela.
Esta tela a seguir é a que aparece após dar click no botão confirma. O número do pedido que aparece, pode ser usado para fazer uma consulta na tela da Moip.
Agora entre na tela da Moip e consulte o pedido que foi gerado para você. É claro que não será o mesmo número gerado neste exemplo.
Para ir diretamente na tela de consulta de pedidos da Moip, acesse este endereço e informe o número do pedido no campo indicado na imagem: https://conta-sandbox.moip.com.br/orders/list
VII – Utilizando a solução
Confira no vídeo, como ficou a utilização da nossa aplicação criada nesse artigo e também a consulta do pedido criado, no site da Moip.
Conclusão
Neste artigo, criamos uma aplicação com uma tela para o cliente fazer um pedido de compra, usando o método de pagamento da Moip em Ruby on Rails com a gem moip2 e acompanhamos na prática a criação da solução, aplicando alguns recursos que a API da empresa Moip disponibiliza.
Na parte teórica do artigo, ficamos sabendo que é necessário ter uma conta na Moip para que essas operações possam ser realizadas. A conta tipo “sandbox” é uma conta para desenvolvedores e usamos esse tipo de conta para este artigo. A conta da Moip para produção, caso você venha a ter, será uma conta separada da conta “sandbox”.
Espero que o artigo seja útil em algum momento, e espero que tenham gostado! 👍

Não perca nenhum conteúdo
Receba nosso resumo semanal com os novos posts, cursos, talks e vagas o/
Primeira vez no OneBitCode? Curtiu esse conteúdo?
O OneBitCode tem muito mais para você!
O OneBitCode traz conteúdos de qualidade, e em português, sobre programação com foco em Ruby on Rails e também JavaScript.
Além disso, aqui sempre levamos à você conteúdos valiosos sobre a carreira de programação, dicas sobre currículos, portfólios, perfil profissional, soft skills, enfim, tudo o que você precisa saber para continuar evoluindo como Programador(a)!
Fique por dentro de todos os conteúdos o/
Nossas redes sociais:
📹 • https://youtube.com/Onebitcode [Live todas as terças-feiras às 19h)
💻 • https://linkedin.com/company/onebitcode
🙂 • https://facebook.com/onebitcode
📱 • https://instagram.com/one_bit_code
🐦 • https://twitter.com/onebitcode
Nossos cursos:
🥇 • Programador Full Stack Javascript em 8 Semanas
💎 • Curso Completo de Ruby
⚙ • Minicurso: API Rails 5 Completo
🐞 • Minicurso de Testes para Ruby on Rails com RSpec
Espero que curta nossos conteúdos e sempre que precisar de ajuda, fala com a gente!
Estamos aqui para você 🙂
Bem-vindo à família OneBitCode o/
Olá, Sérgio. Primeiro, obrigada pelo texto. Eu fiz todo o processo conforme indicado e após a submissão obtive meu próprio número de pedido. Mas ao buscar pelo filtro pelo pedido já no painel da Moip/Wirecard, ele me retorna um erro 404. Também não vejo em nenhum lugar o pedido. O que diferiu do seu tutorial é que estou usando rails 6. Você acredita que possa ter algo a ver com isso. (Obs: aquele passo intermediário de verificação no rails console eu fiz e estava ok!) Eis o que obtenho ao submeter o pedido: Started GET “/orders/new” for ::1 at 2020-02-06… Read more »
UPDATE:
após a 2ª tentativa de submeter o form, a view create mostrou esse erro associado (e não gerou novo pedido):
Started GET “/manifest.json” for ::1 at 2020-02-06 18:23:17 -0300
Started POST “/orders” for ::1 at 2020-02-06 18:23:23 -0300
Processing by OrdersController#create as HTML
Parameters: {“authenticity_token”=>”iYLlVs/eZVvwgTK5WYr/XMA3dc3vft94O2FoMPl32h+MSGTOa3Toupeqih0Bop1fGAjIM6qM+AxeVrmKvQloBQ==”, “order”=>{“ownId”=>”pedido-0001”, “product”=>”Ingresso para a OneBitConf”, “customerOwnId”=>”customer-001”, “customerFullName”=>”Jose da Jac”, “customerEmail”=>”jose_da_silva@gmail.com”}}
Completed 500 Internal Server Error in 810ms (ActiveRecord: 0.0ms | Allocations: 2522)
Moip2::NotFoundError (Resource not found):
app/controllers/orders_controller.rb:7:in `create’