O jeito mais simples e rápido de integrar o Moip a sua aplicação Ruby
Índice
Adicione a seguinte linha no seu Gemfile:
gem "moip2"
auth = Moip2::Auth::Basic.new("TOKEN", "SECRET")
auth = Moip2::Auth::OAuth.new("TOKEN_OAUTH")
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)
customer = api.customer.create({
ownId: "meu_id_de_cliente",
fullname: "Jose Silva",
email: "josedasilva@email.com",
phone: {
#...
},
birthDate: "1988-12-30",
taxDocument: {
#...
},
shippingAddress: {
#...
},
fundingInstrument: {
# Campo opcional. Consulte a documentação da API.
}
})
customer = api.customer.show("CUS-V41BR451L")
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",
},
},
},
}
)
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")
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: "sandbox_v2_1401147277@email.com",
}
})
order = api.order.show("ORD-V41BR451L")
orders = api.order.find_all()
orders = api.order.find_all(filters: { status: { in: ["PAID", "WAITING"] }, amount: { bt: [500, 1000] } })
orders = api.order.find_all(limit: 10, offset: 50)
orders = api.order.find_all(q: "your_value")
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"
}
}
}
}
}
)
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: {
# ...
}
}
}
}
)
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"
}
}
}
)
pagamento = api.payment.show("PAY-CRUP19YU2VE1")
api.payment.capture("PAY-KT5OSI01X8QU")
api.payment.void("PAY-IXNGCU456GG4")
reembolso = api.refund.create("ORD-V41BR451L")
reembolso = api.refund.create("ORD-V41BR451L", amount: 2000)
reembolso = api.refund.show("REF-V41BR451L")
multi = api.multi_order.create(
{
ownId: "meu_multiorder_id",
orders: [
{
# Objeto Order 1
},
{
# Objeto Order 2
}
]
}
)
multi = api.multi_order.show("MOR-V41BR451L")
- 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.
multi_pag = api.multi_payment.create("MOR-V41BR451L",
{
installmentCount: 1,
fundingInstrument: {
# ...
}
}
)
multi_pag = api.multi_payment.show("MPY-V41BR451L")
multi = api.multi_payment.capture("MPY-V41BR451L")
multi = api.multi_payment.void("MPY-V41BR451L")
account = api.accounts.create(
{
email: {
address: "dev.moip@labs.moip.com.br",
},
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"
}
)
account = api.accounts.show("MPA-12312312312")
api.accounts.exists?({tax_document: "123.456.789.10"})
api.accounts.exists?({email: "dev.moip@labs.moip.com.br"})
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",
})
api.bank_accounts.show("BKA-DWTSK16UQI9N")
api.bank_accounts.find_all("MPA-14C9EE706C55")
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",
})
Retorna uma Exception do tipo
NotFoundError
caso não encontre a conta bancária para deletarapi.bank_accounts.delete("BKA-DWTSK16UQI9N")
transfer = api.transfer.create(
amount: 500,
transferInstrument: {
method: "BANK_ACCOUNT",
bankAccount: {
type: "CHECKING",
bankNumber: "001",
agencyNumber: "1111",
agencyCheckNumber: "2",
accountNumber: "9999",
accountCheckNumber: "8",
holder: {
fullname: "Nome do Portador",
taxDocument: {
type: "CPF",
number: "22222222222",
},
},
},
},
)
transfer = api.transfer.create(
amount: 500,
transferInstrument: {
method: "MOIP_ACCOUNT",
moipAccount: {
id: "MPA-B0D880F21EF1",
},
},
)
transfer = api.transfer.show("TRA-28HRLYNLMUFH")
transfers = api.transfer.find_all()
transfer = api.transfer.reverse("TRA-B0W5FD5FCADG")
payment = api.payment.create(order.id,
{
installment_count: 1,
escrow: {
description: 'Custódia de pagamento'
},
funding_instrument: {
method: "CREDIT_CARD",
credit_card: {
expiration_month: 04,
expiration_year: 18,
number: "4002892240028922",
cvc: "123",
holder: {
# ...
}
}
}
}
)
escrow = api.payment.release("ECW-JO3U4WIXD0CK")
api.connect.authorize_url("APP-ID","http://localhost/moip/callback","RECEIVE_FUNDS,REFUND")
api.connect.authorize(
client_id: "APP-YRYCCJ5P603B",
client_secret: "363cdf8ab70a4c5aa08017564c08efbe",
code: "4efde1f89d9acc3b12124ccfded146518465e423",
redirect_uri: "http://localhost/moip/callback",
grant_type: "authorization_code"
)
api.connect.authorize(
refresh_token: "1d5dc51e71674683b4ed79cd7a988fa1_v2",
grant_type: "refresh_token"
)
keys = api.keys.show
api.notifications.create(
events: ["ORDER.*", "PAYMENT.AUTHORIZED", "PAYMENT.CANCELLED"],
target: "http://requestb.in/1dhjesw1",
media: "WEBHOOK"
)
api.notifications.show("NOTIFICATION-ID")
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")
api.notifications.find_all
webhooks = api.webhooks.find_all
webhooks = api.webhooks.find_all(limit: 10, offset: 50)
webhooks = api.webhooks.find_all(event: "PAYMENT.WAITING")
webhooks = api.webhooks.find_all(resource_id: "PAY-REJJ9F12MF7R")
api.balances.show()
api.entries.find_all
api.entries.show(entry_id)
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.message
end
Tem dúvidas? Fale com a gente no Slack!