Moip v2 Ruby SDK
O jeito mais simples e rápido de integrar o Moip a sua aplicação Ruby
Índice
- Instalação
- Configurando a autenticação
- Configurando o ambiente
- Exemplos de Uso:
- Clientes
- Criação
- Consulta
- Adicionar cartão de crédito
- Deletar cartão de crédito
- Pedidos
- Criação
- Consulta
- Pagamentos
- Criação
- Consulta
- Capturar pagamento pré-autorizado
- Cancelar pagamento pré-autorizado
- Reembolsos
- Criação
- Consulta
- Multipedidos
- Criação
- Consulta
- Multipagamentos
- Criação
- Consulta
- Capturar multipagamento pré-autorizado
- Cancelar multipagamento pré-autorizado
- Conta Moip
- Criação
- Consulta
- Verifica se usuário já possui Conta Moip
- Conta Bancária
- Criação
- Consulta
- Listagem
- Atualizar conta bancária
- Deletar conta bancária
- OAuth (Moip Connect)
- Solicitar permissões de acesso ao usuário
- Gerar Token OAuth
- Atualizar Token OAuth
- Obter Chave Pública
- Preferências de Notificação
- Criação
- Consulta
- Exclusão
- Listagem
- Webhooks
- Todos Webhooks
- Com Paginação
- Evento Específico
- Recurso Específico
- Saldo Moip
- Consulta
- Tratamento de Exceções
- Documentação
- Licença
Instalação
Adicione a seguinte linha no seu Gemfile:
gem "moip2"
Configurando a autenticação
Por BasicAuth
auth = Moip2::Auth::Basic.new("TOKEN", "SECRET")
Por OAuth
auth = Moip2::Auth::OAuth.new("TOKEN_OAUTH")
Configurando o ambiente
Após definir o tipo de autenticação, é necessário gerar o client, informando em qual ambiente você quer executar suas ações:
client = Moip2::Client.new(:sandbox/:production, auth)
Após isso, é necessário instanciar um ponto de acesso a partir do qual você utilizará as funções da API:
api = Moip2::Api.new(client)
Você pode customizar o client passando um hash de opções na inicialização. Essas opções serão passadas adiante para o client HTTParty, que aceita as opções descritas na documentação.
Por exemplo, para alterar o timeout das requisições para 5 segundos:
client = Moip2::Client.new(:sandbox/:production, auth, timeout: 5)
Clientes
Criação
customer = api.customer.create({
ownId: "meu_id_de_cliente",
fullname: "Jose Silva",
email: "[email protected]",
phone: {
#...
},
birthDate: "1988-12-30",
taxDocument: {
#...
},
shippingAddress: {
#...
},
fundingInstrument: {
# Campo opcional. Consulte a documentação da API.
}
})
Consulta
customer = api.customer.show("CUS-V41BR451L")
Adicionar cartão de crédito
credit_card = api.customer.add_credit_card("CUSTOMER-ID",
{
method: "CREDIT_CARD",
creditCard: {
expirationMonth: "05",
expirationYear: "22",
number: "5555666677778884",
cvc: "123",
holder: {
fullname: "Jose Portador da Silva",
birthdate: "1988-12-30",
taxDocument: {
type: "CPF",
number: "33333333333",
},
phone: {
countryCode: "55",
areaCode: "11",
number: "66778899",
},
},
},
}
)
Deletar cartão de crédito
Retorna uma Exception do tipo
NotFoundError
caso não encontre o cartão de crédito para deletar.
api.customer.delete_credit_card!("CREDIT-CARD-ID")
Pedidos
Criação
order = api.order.create({
own_id: "ruby_sdk_1",
items: [
{
product: "Nome do produto",
quantity: 1,
detail: "Mais info...",
price: 1000
}
],
customer: {
own_id: "ruby_sdk_customer_1",
fullname: "Jose da Silva",
email: "[email protected]",
}
})
Consulta
Pedido Específico
order = api.order.show("ORD-V41BR451L")
Todos os Pedidos
Sem Filtro
orders = api.order.find_all()
Com Filtros
orders = api.order.find_all(filters: { status: { in: ["PAID", "WAITING"] }, amount: { bt: [500, 1000] } })
Com Paginação
orders = api.order.find_all(limit: 10, offset: 50)
Consulta Valor Específico
orders = api.order.find_all(q: "your_value")
Pagamentos
Criação
Cartão de Crédito
Com Hash
api.payment.create(order.id,
{
installment_count: 1,
funding_instrument: {
method: "CREDIT_CARD",
credit_card: {
hash: "valor do cartão criptografado vindo do JS",
holder: {
fullname: "Jose Portador da Silva",
birthdate: "1988-10-10",
tax_document: {
type: "CPF",
number: "22222222222"
}
}
}
}
}
)
Com Dados do Cartão
Esses método requer certificação PCI. Consulte a documentação.
api.payment.create(order.id,
{
installment_count: 1,
funding_instrument: {
method: "CREDIT_CARD",
credit_card: {
expiration_month: 04,
expiration_year: 18,
number: "4002892240028922",
cvc: "123",
holder: {
# ...
}
}
}
}
)
Com Boleto
api.payment.create(order.id,
{
# ...
funding_instrument: {
method: "BOLETO",
boleto: {
expiration_date: "2017-09-30",
instruction_lines: {
first: "Primeira linha do boleto",
second: "Segunda linha do boleto",
third: "Terceira linha do boleto"
},
logo_uri: "https://sualoja.com.br/logo.jpg"
}
}
}
)
Consulta
pagamento = api.payment.show("PAY-CRUP19YU2VE1")
Capturar pagamento pré-autorizado
api.payment.capture("PAY-KT5OSI01X8QU")
Cancelar pagamento pré-autorizado
api.payment.void("PAY-IXNGCU456GG4")
Reembolsos
Criação
Valor Total
reembolso = api.refund.create("ORD-V41BR451L")
Valor Parcial
reembolso = api.refund.create("ORD-V41BR451L", amount: 2000)
Consulta
reembolso = api.refund.show("REF-V41BR451L")
Multipedidos
Criação
multi = api.multi_order.create(
{
ownId: "meu_multiorder_id",
orders: [
{
# Objeto Order 1
},
{
# Objeto Order 2
}
]
}
)
Consulta
multi = api.multi_order.show("MOR-V41BR451L")
Nota
- Essa função depende de permissões das contas associadas ao recebimento. Consulte a documentação.
- Para reembolsos de multipedidos, é necessario reembolsar os pedidos individualmente. Consulte a documentação.
Multipagamentos
Criação
multi_pag = api.multi_payment.create("MOR-V41BR451L",
{
installmentCount: 1,
fundingInstrument: {
# ...
}
}
)
Consulta
multi_pag = api.multi_payment.show("MPY-V41BR451L")
Capturar multipagamento pré-autorizado
multi = api.multi_payment.capture("MPY-V41BR451L")
Cancelar multipagamento pré-autorizado
multi = api.multi_payment.void("MPY-V41BR451L")
Conta Moip
Criação
account = api.accounts.create(
{
email: {
address: "[email protected]",
},
person: {
name: "Joaquim José",
lastName: "Silva Silva",
taxDocument: {
type: "CPF",
number: "572.619.050-54",
},
identityDocument: {
type: "RG",
number: "35.868.057-8",
issuer: "SSP",
issueDate: "2000-12-12",
},
birthDate: "1990-01-01",
phone: {
countryCode: "55",
areaCode: "11",
number: "965213244",
},
address: {
street: "Av. Brigadeiro Faria Lima",
streetNumber: "2927",
district: "Itaim",
zipCode: "01234-000",
city: "S\u00E3o Paulo",
state: "SP",
country: "BRA",
},
},
type: "MERCHANT"
}
)
Consulta
account = api.accounts.show("MPA-12312312312")
Verifica se usuário já possui Conta Moip
api.accounts.exists?("123.456.789.10")
Conta bancária
Criação
bank_account = api.bank_accounts.create("MPA-14C9EE706C55",
bank_number: "237",
agency_number: "12345",
agency_check_number: "0",
account_number: "12345678",
account_check_number: "7",
type: "CHECKING",
holder: {
tax_document: {
type: "CPF",
number: "164.664.426-32",
},
fullname: "Sales Machine da Silva",
})
Consulta
api.bank_accounts.show("BKA-DWTSK16UQI9N")
Listagem
api.bank_accounts.find_all("MPA-14C9EE706C55")
Atualizar conta bancaria
api.bank_accounts.update("BKA-DWTSK16UQI9N",
bank_number: "237",
agency_number: "12345",
agency_check_number: "0",
account_number: "87654323",
account_check_number: "7",
type: "CHECKING",
holder: {
tax_document: {
type: "CPF",
number: "164.664.426-32",
},
fullname: "Sales Machine da Silva",
})
Deletar conta bancaria
Retorna uma Exception do tipo
NotFoundError
caso não encontre a conta bancária para deletarapi.bank_accounts.delete("BKA-DWTSK16UQI9N")
OAuth (Moip Connect)
Solicitar permissões de acesso ao usuário
api.connect.("APP-ID","http://localhost/moip/callback","RECEIVE_FUNDS,REFUND")
Gerar token OAuth
api.connect.(
client_id: "APP-YRYCCJ5P603B",
client_secret: "363cdf8ab70a4c5aa08017564c08efbe",
code: "4efde1f89d9acc3b12124ccfded146518465e423",
redirect_uri: "http://localhost/moip/callback",
grant_type: "authorization_code"
)
Atualizar token OAuth
api.connect.(
refresh_token: "1d5dc51e71674683b4ed79cd7a988fa1_v2",
grant_type: "refresh_token"
)
Obter Chave Pública
keys = api.keys.show
Preferências de notificação
Criação
api.notifications.create(
events: ["ORDER.*", "PAYMENT.AUTHORIZED", "PAYMENT.CANCELLED"],
target: "http://requestb.in/1dhjesw1",
media: "WEBHOOK"
)
Consulta
api.notifications.show("NOTIFICATION-ID")
Exclusão
Caso o notification não seja encontrado uma exceção do tipo
NotFoundError
será lançada, veja como tratar aqui.
api.notifications.delete("NOTIFICATION-ID")
Listagem
api.notifications.find_all
Webhooks
Consulta
Todos Webhooks
webhooks = api.webhooks.find_all
Com Paginação
webhooks = api.webhooks.find_all(limit: 10, offset: 50)
Consulta Evento
webhooks = api.webhooks.find_all(event: "PAYMENT.WAITING")
Consulta Valor Específico
webhooks = api.webhooks.find_all(resource_id: "PAY-REJJ9F12MF7R")
Saldo Moip
Consulta
api.balances.show()
Show all entries
api.entries.find_all
Show one entry
api.entries.show(entry_id)
Tratamento de Exceções
Caso algum recurso não seja encontrado uma exceção do tipo NotFoundError
será lançada.
begin
api.payment.create(
# ...
)
rescue NotFoundError => e
puts e.
end