mercadopago 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +11 -0
- data/Gemfile +4 -0
- data/README.md +196 -0
- data/Rakefile +1 -0
- data/lib/mercadopago.rb +8 -0
- data/lib/mercadopago/authentication.rb +35 -0
- data/lib/mercadopago/checkout.rb +44 -0
- data/lib/mercadopago/collection.rb +20 -0
- data/lib/mercadopago/request.rb +66 -0
- data/lib/mercadopago/version.rb +3 -0
- data/mercadopago.gemspec +24 -0
- metadata +81 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,196 @@
|
|
1
|
+
MercadoPago
|
2
|
+
===========
|
3
|
+
|
4
|
+
Esta gem para Ruby é um cliente que permite que desenvolvedores acessem os serviços do http://www.mercadopago.com (MercadoPago).
|
5
|
+
|
6
|
+
Antes de começar a usá-la, é recomendável conhecer mais sobre as APIs do MercadoPago e ler as suas documentações. Como esta gem utiliza hashes para representar requests e responses, é necessário conhecer os parâmetros das APIs do MercadoPago para fazer as chamadas corretas e processar as respostas corretamente.
|
7
|
+
|
8
|
+
Para conhecer a documentação das APIs do MercadoPago, veja este link: https://developers.mercadopago.com/integracao-checkout
|
9
|
+
|
10
|
+
Instalação
|
11
|
+
----------
|
12
|
+
|
13
|
+
Você pode instalar a última versão da gem MercadoPago com o seguinte comando:
|
14
|
+
|
15
|
+
gem install mercadopago
|
16
|
+
|
17
|
+
Você pode também adicionar a gem ao Gemfile do seu projeto:
|
18
|
+
|
19
|
+
gem 'mercadopago'
|
20
|
+
|
21
|
+
Credenciais de acesso
|
22
|
+
---------------------
|
23
|
+
|
24
|
+
Para usar esta gem, é necessário fornecer o client_id e um client_secret da sua conta do MercaodPago. Esta gem não armazena este dados sob nenhuma hipótese. Para consultar as suas credenciais no MercadoPago, acesse o link a seguir: https://www.mercadopago.com/mlb/ferramentas/aplicacoes
|
25
|
+
|
26
|
+
Exemplos
|
27
|
+
--------
|
28
|
+
|
29
|
+
### Autenticação
|
30
|
+
|
31
|
+
# Use as suas credenciais.
|
32
|
+
client_id = '1234'
|
33
|
+
client_secret = 'abcdefghijklmnopqrstuvwxyz'
|
34
|
+
|
35
|
+
access = Mercadopago::Authentication.access_token(client_id, client_secret)
|
36
|
+
|
37
|
+
A resposta desta requisição será um hash como o que segue:
|
38
|
+
|
39
|
+
{
|
40
|
+
"access_token" => "APP_USR-1234-999999-abcdefghijklmnopqrstuvwxyz-999999999",
|
41
|
+
"token_type" => "bearer",
|
42
|
+
"expires_in" => 10800,
|
43
|
+
"scope" => "mclics_advertising offline_access read write",
|
44
|
+
"refresh_token" => "TG-abcdefghijklmnopqrstuvwxyz"
|
45
|
+
}
|
46
|
+
|
47
|
+
Você deverá usar o "access_token" nas demais requisições para outros webservices.
|
48
|
+
|
49
|
+
### Criação de pagamento
|
50
|
+
|
51
|
+
data = {
|
52
|
+
"external_reference" => "OPERATION-ID-1234",
|
53
|
+
"items" => [
|
54
|
+
{
|
55
|
+
"id" => "Código 123",
|
56
|
+
"title" => "Nome produto",
|
57
|
+
"description" => "Descrição produto",
|
58
|
+
"quantity" => 1,
|
59
|
+
"unit_price" => 10.50,
|
60
|
+
"currency_id" => "BRL",
|
61
|
+
"picture_url" => "http://www.site.com.br/image/123.png"
|
62
|
+
}
|
63
|
+
],
|
64
|
+
"payer" => {
|
65
|
+
"name"=> "João",
|
66
|
+
"surname"=> "Silva",
|
67
|
+
"email"=> "comprador@email.com.br"
|
68
|
+
},
|
69
|
+
"back_urls"=> {
|
70
|
+
"pending"=> "https://www.site.com.br/pending",
|
71
|
+
"success"=> "http://www.site.com.br/success",
|
72
|
+
"failure"=> "http://www.site.com.br/failure"
|
73
|
+
}
|
74
|
+
}
|
75
|
+
|
76
|
+
payment = Mercadopago::Checkout.create_preference(access_token, data)
|
77
|
+
|
78
|
+
Como resposta, será recebido um hash como o seguinte:
|
79
|
+
|
80
|
+
{
|
81
|
+
"payment_methods" => {},
|
82
|
+
"init_point" => "https://www.mercadopago.com/mlb/checkout/pay?pref_id=abcdefgh-9999-9999-ab99-999999999999",
|
83
|
+
"collector_id" => 123456789,
|
84
|
+
"back_urls" => {
|
85
|
+
"pending"=> "https://www.site.com.br/pending",
|
86
|
+
"success"=> "http://www.site.com.br/success",
|
87
|
+
"failure"=> "http://www.site.com.br/failure"
|
88
|
+
},
|
89
|
+
"sponsor_id" => nil,
|
90
|
+
"expiration_date_from" => nil,
|
91
|
+
"additional_info" => "",
|
92
|
+
"marketplace_fee" => 0,
|
93
|
+
"date_created" => "2012-05-07T20:07:52.293-04:00",
|
94
|
+
"subscription_plan_id" => nil,
|
95
|
+
"id"=> "abcdefgh-9999-9999-ab99-999999999999",
|
96
|
+
"expiration_date_to" => nil,
|
97
|
+
"expires" => false,
|
98
|
+
"external_reference" => "OPERATION-ID-1234",
|
99
|
+
"payer" => {
|
100
|
+
"email" => "comprador@email.com.br",
|
101
|
+
"name" => "João",
|
102
|
+
"surname" => "Silva"
|
103
|
+
},
|
104
|
+
"items" => [
|
105
|
+
{
|
106
|
+
"id" => "Código 123",
|
107
|
+
"currency_id" => "BRL",
|
108
|
+
"title" => "Nome produto",
|
109
|
+
"picture_url" => "http://www.site.com.br/image/123.png",
|
110
|
+
"description" => "Descrição produto",
|
111
|
+
"quantity" => 1,
|
112
|
+
"unit_price" => 10.50
|
113
|
+
}
|
114
|
+
],
|
115
|
+
"client_id" => "963",
|
116
|
+
"marketplace" => "NONE"
|
117
|
+
}
|
118
|
+
|
119
|
+
### Verificação de status de pagamento
|
120
|
+
|
121
|
+
Para consultar o status de um pagamento é necessário ter o id associado a ele, o qual é recebido na IPN do MercadoPago.
|
122
|
+
|
123
|
+
# Use o id do pagamento recebido na IPN do MercadoPago.
|
124
|
+
payment_id = '987654321'
|
125
|
+
|
126
|
+
notification = Mercadopago::Collection.notification(access_token, payment_id)
|
127
|
+
|
128
|
+
Será retornado um hash similar ao seguinte:
|
129
|
+
|
130
|
+
{
|
131
|
+
"collection" => {
|
132
|
+
"id" => 987654321,
|
133
|
+
"site_id" => "MLB",
|
134
|
+
"operation_type" => "regular_payment",
|
135
|
+
"order_id" => nil,
|
136
|
+
"external_reference" => "OPERATION-ID-1234",
|
137
|
+
"status" => "approved",
|
138
|
+
"status_detail" => "approved",
|
139
|
+
"payment_type" => "credit_card",
|
140
|
+
"date_created" => "2012-05-05T14:22:43Z",
|
141
|
+
"last_modified" => "2012-05-05T14:35:13Z",
|
142
|
+
"date_approved" => "2012-05-05T14:22:43Z",
|
143
|
+
"money_release_date" => "2012-05-19T14:22:43Z",
|
144
|
+
"currency_id" => "BRL",
|
145
|
+
"transaction_amount" => 10.50,
|
146
|
+
"shipping_cost" => 0,
|
147
|
+
"total_paid_amount" => 10.50,
|
148
|
+
"finance_charge" => 0,
|
149
|
+
"net_received_amount" => 0,
|
150
|
+
"marketplace" => "NONE",
|
151
|
+
"marketplace_fee" => nil,
|
152
|
+
"reason" => "Nome produto",
|
153
|
+
"payer" => {
|
154
|
+
"id" => 543219876,
|
155
|
+
"first_name" => "João",
|
156
|
+
"last_name" => "Silva",
|
157
|
+
"nickname" => "JOAOSILVA",
|
158
|
+
"phone" => {
|
159
|
+
"area_code" => nil,
|
160
|
+
"number" => "551122334455",
|
161
|
+
"extension" => nil
|
162
|
+
},
|
163
|
+
"email" => "comprador@email.com.br",
|
164
|
+
"identification" => {
|
165
|
+
"type" => nil,
|
166
|
+
"number" => nil
|
167
|
+
}
|
168
|
+
},
|
169
|
+
"collector" => {
|
170
|
+
"id" => 123456789,
|
171
|
+
"first_name" => "Manoel",
|
172
|
+
"last_name" => "Recebedor",
|
173
|
+
"phone" => {
|
174
|
+
"area_code" => nil,
|
175
|
+
"number" => "1122334455",
|
176
|
+
"extension" => nil
|
177
|
+
},
|
178
|
+
"email" => "recebedor@email.com.br",
|
179
|
+
"nickname" => "MANOELRECEBEDOR"
|
180
|
+
}
|
181
|
+
}
|
182
|
+
}
|
183
|
+
|
184
|
+
|
185
|
+
### Erros
|
186
|
+
|
187
|
+
Os erros retornados por esta gem são hashes quem contém os dados recebidos dos webservices do MercadoPago.
|
188
|
+
|
189
|
+
Por exemplo, caso seja requisitado um access_token através da credenciais inválidas, um hash de erro como o seguinte será retornado:
|
190
|
+
|
191
|
+
{
|
192
|
+
"message" => "client_id[1,234] o client_secret[abcdefghijklmnopqrstuvwxyz] inválidos",
|
193
|
+
"error" => "invalid_client",
|
194
|
+
"status" => 400,
|
195
|
+
"cause" => []
|
196
|
+
}
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
data/lib/mercadopago.rb
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
module Mercadopago
|
2
|
+
|
3
|
+
module Authentication
|
4
|
+
|
5
|
+
#
|
6
|
+
# Receives the client credentials and makes a request to oAuth API.
|
7
|
+
# On success, returns a hash with the access data; on failure, returns nil.
|
8
|
+
#
|
9
|
+
# To get your client credentials, access:
|
10
|
+
# https://www.mercadopago.com/mlb/ferramentas/aplicacoes
|
11
|
+
#
|
12
|
+
# - client_id
|
13
|
+
# - client_secret
|
14
|
+
#
|
15
|
+
def self.access_token(client_id, client_secret)
|
16
|
+
|
17
|
+
payload = { :grant_type => 'client_credentials', :client_id => client_id, :client_secret => client_secret }
|
18
|
+
headers = { :content_type => 'application/x-www-form-urlencoded', :accept => 'application/json' }
|
19
|
+
|
20
|
+
Mercadopago::Request.wrap_post('/oauth/token', payload, headers)
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
#
|
25
|
+
# TODO
|
26
|
+
#
|
27
|
+
def refresh_access_token
|
28
|
+
|
29
|
+
# TODO
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Mercadopago
|
2
|
+
|
3
|
+
module Checkout
|
4
|
+
|
5
|
+
#
|
6
|
+
# Allows you to configure the checkout process.
|
7
|
+
# Receives an access_token and a prefereces hash and creates a new checkout preference.
|
8
|
+
# Once you have created the checkout preference, you can use the init_point URL
|
9
|
+
# to start the payment flow.
|
10
|
+
#
|
11
|
+
# - access_token: the MercadoPago account associated with this access_token will
|
12
|
+
# receive the money from the payment of this checkout preference.
|
13
|
+
# - data: a hash of preferences that will be trasmitted to checkout API.
|
14
|
+
#
|
15
|
+
def self.create_preference(access_token, data)
|
16
|
+
|
17
|
+
payload = JSON.generate(data)
|
18
|
+
headers = { :content_type => 'application/json', :accept => 'application/json' }
|
19
|
+
|
20
|
+
Mercadopago::Request.wrap_post("/checkout/preferences?access_token=#{access_token}", payload, headers)
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
#
|
25
|
+
# TODO
|
26
|
+
#
|
27
|
+
def self.get_preference
|
28
|
+
|
29
|
+
# TODO
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
#
|
34
|
+
# TODO
|
35
|
+
#
|
36
|
+
def self.update_preference
|
37
|
+
|
38
|
+
# TODO
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Mercadopago
|
2
|
+
|
3
|
+
module Collection
|
4
|
+
|
5
|
+
#
|
6
|
+
# Receives an access_token and a payment id and retrieves information of the payment.
|
7
|
+
# This is useful, for example, to check the status of a payment.
|
8
|
+
#
|
9
|
+
# - access_token: an access_token of the MercadoPago account associated with the payment to be checked.
|
10
|
+
# - payment_id: the id of the payment to be checked.
|
11
|
+
#
|
12
|
+
def self.notification(access_token, payment_id)
|
13
|
+
|
14
|
+
Mercadopago::Request.wrap_get("/collections/notifications/#{payment_id}?access_token=#{access_token}", { :accept => 'application/json' })
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
require 'rest-client'
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
module Mercadopago
|
5
|
+
|
6
|
+
module Request
|
7
|
+
|
8
|
+
#
|
9
|
+
# This URL is the base for all API calls.
|
10
|
+
#
|
11
|
+
MERCADOPAGO_URL = 'https://api.mercadolibre.com'
|
12
|
+
|
13
|
+
#
|
14
|
+
# Makes a POST request to a MercaPago API.
|
15
|
+
#
|
16
|
+
# - path: the path of the API to be called.
|
17
|
+
# - payload: the data to be trasmitted to the API.
|
18
|
+
# - headers: the headers to be transmitted over the HTTP request.
|
19
|
+
#
|
20
|
+
def self.wrap_post(path, payload, headers = {})
|
21
|
+
|
22
|
+
raise ClientError('No data given') if payload.nil? or payload.empty?
|
23
|
+
make_request(:post, path, payload, headers)
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
#
|
28
|
+
# Makes a GET request to a MercaPago API.
|
29
|
+
#
|
30
|
+
# - path: the path of the API to be called, including any query string parameters.
|
31
|
+
# - headers: the headers to be transmitted over the HTTP request.
|
32
|
+
#
|
33
|
+
def self.wrap_get(path, headers = {})
|
34
|
+
|
35
|
+
make_request(:get, path, nil, headers)
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
#
|
40
|
+
# Makes a HTTP request to a MercadoPago API.
|
41
|
+
#
|
42
|
+
# - type: the HTTP request type (:get, :post, :put, :delete).
|
43
|
+
# - path: the path of the API to be called.
|
44
|
+
# - payload: the data to be trasmitted to the API.
|
45
|
+
# - headers: the headers to be transmitted over the HTTP request.
|
46
|
+
#
|
47
|
+
def self.make_request(type, path, payload = nil, headers = {})
|
48
|
+
|
49
|
+
begin
|
50
|
+
args = [type, "#{MERCADOPAGO_URL}#{path}", payload, headers].compact
|
51
|
+
response = RestClient.send *args
|
52
|
+
|
53
|
+
JSON.load(response)
|
54
|
+
rescue Exception => e
|
55
|
+
JSON.load(e.response)
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
59
|
+
|
60
|
+
|
61
|
+
class ClientError < Exception
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
data/mercadopago.gemspec
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "mercadopago/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "mercadopago"
|
7
|
+
s.version = Mercadopago::VERSION
|
8
|
+
s.authors = ["Kauplus Social Commerce"]
|
9
|
+
s.email = ["suporte@kauplus.com.br"]
|
10
|
+
s.homepage = "https://github.com/kauplus/mercadopago"
|
11
|
+
s.summary = %q{Cliente para a API do MercadoPago}
|
12
|
+
s.description = %q{Esta gem é um cliente que permite que desenvolvedores acessem os serviços do http://www.mercadopago.com (MercadoPago)}
|
13
|
+
|
14
|
+
s.rubyforge_project = "mercadopago"
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
|
21
|
+
# specify any dependencies here:
|
22
|
+
s.add_dependency 'json', '1.7.1'
|
23
|
+
s.add_dependency 'rest-client', '1.6.7'
|
24
|
+
end
|
metadata
ADDED
@@ -0,0 +1,81 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: mercadopago
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Kauplus Social Commerce
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-05-07 00:00:00.000000000 -03:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: json
|
17
|
+
requirement: &2164866220 !ruby/object:Gem::Requirement
|
18
|
+
none: false
|
19
|
+
requirements:
|
20
|
+
- - =
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 1.7.1
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: *2164866220
|
26
|
+
- !ruby/object:Gem::Dependency
|
27
|
+
name: rest-client
|
28
|
+
requirement: &2164857660 !ruby/object:Gem::Requirement
|
29
|
+
none: false
|
30
|
+
requirements:
|
31
|
+
- - =
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.6.7
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: *2164857660
|
37
|
+
description: Esta gem é um cliente que permite que desenvolvedores acessem os serviços
|
38
|
+
do http://www.mercadopago.com (MercadoPago)
|
39
|
+
email:
|
40
|
+
- suporte@kauplus.com.br
|
41
|
+
executables: []
|
42
|
+
extensions: []
|
43
|
+
extra_rdoc_files: []
|
44
|
+
files:
|
45
|
+
- .gitignore
|
46
|
+
- Gemfile
|
47
|
+
- README.md
|
48
|
+
- Rakefile
|
49
|
+
- lib/mercadopago.rb
|
50
|
+
- lib/mercadopago/authentication.rb
|
51
|
+
- lib/mercadopago/checkout.rb
|
52
|
+
- lib/mercadopago/collection.rb
|
53
|
+
- lib/mercadopago/request.rb
|
54
|
+
- lib/mercadopago/version.rb
|
55
|
+
- mercadopago.gemspec
|
56
|
+
has_rdoc: true
|
57
|
+
homepage: https://github.com/kauplus/mercadopago
|
58
|
+
licenses: []
|
59
|
+
post_install_message:
|
60
|
+
rdoc_options: []
|
61
|
+
require_paths:
|
62
|
+
- lib
|
63
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
64
|
+
none: false
|
65
|
+
requirements:
|
66
|
+
- - ! '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
70
|
+
none: false
|
71
|
+
requirements:
|
72
|
+
- - ! '>='
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '0'
|
75
|
+
requirements: []
|
76
|
+
rubyforge_project: mercadopago
|
77
|
+
rubygems_version: 1.6.2
|
78
|
+
signing_key:
|
79
|
+
specification_version: 3
|
80
|
+
summary: Cliente para a API do MercadoPago
|
81
|
+
test_files: []
|