README.md in moip2-0.1.4 vs README.md in moip2-1.0.0
- old
+ new
@@ -1,115 +1,229 @@
+<img src="https://gist.githubusercontent.com/joaolucasl/00f53024cecf16410d5c3212aae92c17/raw/1789a2131ee389aeb44e3a9d5333f59cfeebc089/moip-icon.png" align="right" />
+
# Moip v2 Ruby SDK
+> O jeito mais simples e rápido de integrar o Moip a sua aplicação Ruby
[![Build Status](https://travis-ci.org/moip/moip-sdk-ruby.svg?branch=master)](https://travis-ci.org/moip/moip-sdk-ruby)
[![Code Climate](https://codeclimate.com/github/moip/moip-sdk-ruby/badges/gpa.svg)](https://codeclimate.com/github/moip/moip-sdk-ruby)
[![Test Coverage](https://codeclimate.com/github/moip/moip-sdk-ruby/badges/coverage.svg)](https://codeclimate.com/github/moip/moip-sdk-ruby/coverage)
-O jeito mais simples e rápido de integrar o Moip a sua aplicação Ruby
+**Índice**
+- [Instalação](#instalação)
+- [Configurando a autenticação](#configurando-a-autenticação)
+ - [Por BasicAuth](#por-basicauth)
+ - [Por OAuth](#por-oauth)
+- [Configurando o ambiente](#configurando-o-ambiente)
+- [Exemplos de Uso](#clientes):
+ - [Clientes](#clientes)
+ - [Criação](#criação)
+ - [Consulta](#consulta)
+ - [Adicionar cartão de crédito](#adicionar-cartão-de-crédito)
+ - [Deletar cartão de crédito](#deletar-cartão-de-crédito)
+ - [Pedidos](#pedidos)
+ - [Criação](#criação-1)
+ - [Consulta](#consulta-1)
+ - [Pedido Específico](#pedido-específico)
+ - [Todos os Pedidos](#todos-os-pedidos)
+ - [Sem Filtro](#sem-filtro)
+ - [Com Filtros](#com-filtros)
+ - [Com Paginação](#com-paginação)
+ - [Pagamentos](#pagamentos)
+ - [Criação](#criação-2)
+ - [Cartão de Crédito](#cartão-de-crédito)
+ - [Com Hash](#com-hash)
+ - [Com Dados do Cartão](#com-dados-do-cartão)
+ - [Com Boleto](#com-boleto)
+ - [Consulta](#consulta-2)
+ - [Capturar pagamento pré-autorizado](#capturar-pagamento-pré-autorizado)
+ - [Cancelar pagamento pré-autorizado](#cancelar-pagamento-pré-autorizado)
+ - [Reembolsos](#reembolsos)
+ - [Criação](#criação-3)
+ - [Valor Total](#valor-total)
+ - [Valor Parcial](#valor-parcial)
+ - [Consulta](#consulta-3)
+ - [Multipedidos](#multipedidos)
+ - [Criação](#criação-4)
+ - [Consulta](#consulta-4)
+ - [Multipagamentos](#multipagamentos)
+ - [Criação](#criação-5)
+ - [Consulta](#consulta-5)
+ - [Conta Moip](#conta-moip)
+ - [Criação](#criação-6)
+ - [Consulta](#consulta-6)
+ - [Verifica se usuário já possui Conta Moip](#verifica-se-usuário-já-possui-conta-moip)
+ - [OAuth (Moip Connect)](#oauth-(moip-connect))
+ - [Solicitar permissões de acesso ao usuário](#solicitar-permissões-de-acesso-ao-usuário)
+ - [Gerar Token OAuth](#gerar-token-oauth)
+ - [Atualizar Token OAuth](#atualizar-token-oauth)
+ - [Preferências de Notificação](#preferências-de-notificação)
+ - [Criação](#criação-7)
+ - [Consulta](#consulta-7)
+ - [Exclusão](#exclusão)
+ - [Listagem](#listagem)
+- [Tratamento de Exceções](#tratamento-de-exceções)
+- [Documentação](#documentação)
+- [Licença](#licença)
+
+
## Instalação
Adicione a seguinte linha no seu Gemfile:
```ruby
gem "moip2"
```
-## Configurando sua autenticação
-- Autenticando por BasicAuth
+## Configurando a autenticação
+### Por BasicAuth
```ruby
auth = Moip2::Auth::Basic.new("TOKEN", "SECRET")
```
-- Autenticando por OAuth
+### Por OAuth
```ruby
auth = Moip2::Auth::OAuth.new("TOKEN_OAUTH")
```
-Após deifinir o tipo de autenticação, é necessário gerar o client, informando em qual environment você quer executar suas ações:
+## 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:
```ruby
client = Moip2::Client.new(:sandbox/:production, auth)
```
-Agora você pode instanciar a Api:
+Após isso, é necessário instanciar um ponto de acesso a partir do qual você utilizará as funções da API:
+
```ruby
api = Moip2::Api.new(client)
```
-## Criando um Pedido
+## Clientes
+### Criação
+```ruby
+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.
+ }
+})
+```
+### Consulta
+```ruby
+customer = api.customer.show("CUS-V41BR451L")
+```
+### Adicionar cartão de crédito
```ruby
-order = api.order.create(
+credit_card = api.customer.add_credit_card("CUSTOMER-ID",
{
- 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",
- }
+ 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",
+ },
+ },
+ },
}
)
```
-### Pedido com dados completos do Comprador
+### Deletar cartão de crédito
-Agora basta criar o pedido:
+> Retorna uma Exception do tipo `NotFoundError` caso não encontre o cartão de crédito para deletar
```ruby
-order = api.order.create(
+api.customer.delete_credit_card!("CREDIT-CARD-ID")
+```
+
+> Retorna `false` caso não encontre o cartão de crédito para deletar
+
+```ruby
+api.customer.delete_credit_card("CREDIT-CARD-ID")
+```
+
+## Pedidos
+### Criação
+
+```ruby
+order = api.order.create({
+ own_id: "ruby_sdk_1",
+ items: [
{
- 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",
- birthdate: "1988-12-30",
- tax_document: { number: "33333333333", type: "CPF" },
- phone: { country_code: "55", area_code: "11", number: "66778899" },
- shipping_address:
- {
- street: "Avenida Faria Lima",
- street_number: 2927,
- complement: 8,
- district: "Itaim",
- city: "Sao Paulo",
- state: "SP",
- country: "BRA",
- zip_code: "01234000"
- }
- }
+ 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",
+ }
+})
```
+### Consulta
+#### Pedido Específico
+```ruby
+order = api.order.show("ORD-V41BR451L")
+```
-## Criando um pagamento
+#### Todos os Pedidos
+##### Sem Filtro
+```ruby
+orders = api.order.find_all()
+```
-### Cartão de crédito com hash
+##### Com Filtros
+```ruby
+orders = api.order.find_all(filters: { status: { in: ["PAID", "WAITING"] }, amount: { bt: [500, 1000] } })
+```
+##### Com Paginação
```ruby
+orders = api.order.find_all(limit: 10, offset: 50)
+```
+
+## Pagamentos
+
+### Criação
+#### Cartão de Crédito
+##### Com Hash
+
+```ruby
api.payment.create(order.id,
{
installment_count: 1,
funding_instrument: {
method: "CREDIT_CARD",
credit_card: {
- hash: "valor do cartã criptografado vindo do JS",
+ hash: "valor do cartão criptografado vindo do JS",
holder: {
fullname: "Jose Portador da Silva",
birthdate: "1988-10-10",
tax_document: {
type: "CPF",
@@ -120,61 +234,246 @@
}
}
)
```
-### Cartão de crédito
+##### Com Dados do Cartão
+> Esses método requer certificação PCI. [Consulte a documentação.](https://documentao-moip.readme.io/v2.0/reference#criar-pagamento)
```ruby
api.payment.create(order.id,
{
installment_count: 1,
funding_instrument: {
method: "CREDIT_CARD",
credit_card: {
expiration_month: 04,
expiration_year: 18,
- number: "4012001038443335",
+ number: "4002892240028922",
cvc: "123",
holder: {
- fullname: "Jose Portador da Silva",
- birthdate: "1988-10-10",
- tax_document: {
- type: "CPF",
- number: "22222222222"
- },
- phone: {
- country_code: "55",
- area_code: "11",
- number: "55667788"
- }
+ # ...
}
}
}
}
)
```
-### Boleto
+#### Com Boleto
```ruby
-api.payment.create(
+api.payment.create(order.id,
{
+ # ...
funding_instrument: {
method: "BOLETO",
boleto: {
- expiration_date: "2015-09-30",
+ 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://"
+ logo_uri: "https://sualoja.com.br/logo.jpg"
}
}
}
)
```
+
+### Consulta
+```ruby
+pagamento = api.payment.show("PAY-CRUP19YU2VE1")
+```
+
+### Capturar pagamento pré-autorizado
+```ruby
+api.payment.capture("PAY-KT5OSI01X8QU")
+```
+
+### Cancelar pagamento pré-autorizado
+```ruby
+api.payment.void("PAY-IXNGCU456GG4")
+```
+
+## Reembolsos
+### Criação
+#### Valor Total
+```ruby
+reembolso = api.refund.create("ORD-V41BR451L")
+```
+#### Valor Parcial
+```ruby
+reembolso = api.refund.create("ORD-V41BR451L", amount: 2000)
+```
+
+### Consulta
+```ruby
+reembolso = api.refund.show("REF-V41BR451L")
+```
+
+## Multipedidos
+### Criação
+```ruby
+multi = api.multi_order.create(
+ {
+ ownId: "meu_multiorder_id",
+ orders: [
+ {
+ # Objeto Order 1
+ },
+ {
+ # Objeto Order 2
+ }
+ ]
+ }
+)
+```
+### Consulta
+```ruby
+multi = api.multi_order.show("MOR-V41BR451L")
+```
+### Nota
+> 1. Essa função depende de permissões das contas associadas ao recebimento. [Consulte a documentação.](https://documentao-moip.readme.io/v2.0/reference#multipedidos)
+> 2. Para reembolsos de multipedidos, é necessario reembolsar os pedidos individualmente. [Consulte a documentação.](https://documentao-moip.readme.io/v2.0/reference#multipedidos)
+
+## Multipagamentos
+### Criação
+```ruby
+multi_pag = api.multi_payment.create("MOR-V41BR451L",
+ {
+ installmentCount: 1,
+ fundingInstrument: {
+ # ...
+ }
+ }
+)
+```
+### Consulta
+```ruby
+multi_pag = api.multi_payment.show("MPY-V41BR451L")
+```
+
+## Conta Moip
+### Criação
+```ruby
+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"
+ }
+)
+```
+
+### Consulta
+```ruby
+account = api.accounts.show("MPA-12312312312")
+```
+
+### Verifica se usuário já possui Conta Moip
+```ruby
+api.accounts.exists?("123.456.789.10")
+```
+
+## OAuth (Moip Connect)
+### Solicitar permissões de acesso ao usuário
+```ruby
+api.connect.authorize_url("APP-ID","http://localhost/moip/callback","RECEIVE_FUNDS,REFUND")
+```
+
+### Gerar token OAuth
+```ruby
+api.connect.authorize(
+ client_id: "APP-YRYCCJ5P603B",
+ client_secret: "363cdf8ab70a4c5aa08017564c08efbe",
+ code: "4efde1f89d9acc3b12124ccfded146518465e423",
+ redirect_uri: "http://localhost/moip/callback",
+ grant_type: "authorization_code"
+)
+```
+
+### Atualizar token OAuth
+```ruby
+api.connect.authorize(
+ refresh_token: "1d5dc51e71674683b4ed79cd7a988fa1_v2",
+ grant_type: "refresh_token"
+)
+```
+
+## Preferências de notificação
+
+### Criação
+```ruby
+api.notifications.create(
+ events: ["ORDER.*", "PAYMENT.AUTHORIZED", "PAYMENT.CANCELLED"],
+ target: "http://requestb.in/1dhjesw1",
+ media: "WEBHOOK"
+)
+```
+
+### Consulta
+```ruby
+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](#tratamento-de-exceções).
+
+```ruby
+api.notifications.delete("NOTIFICATION-ID")
+```
+
+### Listagem
+```ruby
+api.notifications.find_all
+```
+
+## Tratamento de Exceções
+
+Caso algum recurso não seja encontrado uma exceção do tipo `NotFoundError` será lançada.
+
+```ruby
+begin
+ api.payment.create(
+ # ...
+ )
+rescue NotFoundError => e
+ puts e.message
+end
+```
+
## Documentação
[Documentação oficial](https://moip.com.br/referencia-api/)
## Licença