Skip to content

Commit e5133ac

Browse files
Release Version 1.2.0
1 parent f345526 commit e5133ac

1 file changed

Lines changed: 79 additions & 41 deletions

File tree

mercadopago/mercadopago.py

Lines changed: 79 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,40 @@
1+
"""
2+
MercadoPago Integration Library
3+
Access MercadoPago for payments integration
4+
"""
5+
6+
from json.encoder import JSONEncoder
7+
import requests
8+
9+
from requests.adapters import HTTPAdapter
10+
from requests.packages.urllib3.poolmanager import PoolManager
11+
12+
import platform
13+
import ssl
14+
import sys
15+
16+
class MPSSLAdapter(HTTPAdapter):
17+
def init_poolmanager(self, connections, maxsize, block=False):
18+
self.poolmanager = PoolManager(num_pools=connections,
19+
maxsize=maxsize,
20+
block=block)
21+
22+
class MPException(Exception):
23+
def __init__(self, value):
24+
self.value = value
25+
26+
def __repr__(self):
27+
return self.value
28+
29+
class MPInvalidCredentials(MPException):
30+
pass
31+
32+
133
class MP(object):
2-
version = "1.2.0"
34+
version = "1.1.1"
335
__access_data = None
436
__ll_access_token = None
537
__sandbox = False
6-
platform_id = None
7-
integrator_id = None
8-
corporation_id = None
938

1039
def __init__(self, *args):
1140
"""
@@ -23,15 +52,7 @@ def __init__(self, *args):
2352
else:
2453
raise MPInvalidCredentials(None)
2554

26-
self.card = Card(self.__client_id, self.__client_secret, self.__ll_access_token, self.version)
27-
self.cardtoken = CardToken(self.__client_id, self.__client_secret, self.__ll_access_token, self.version)
28-
self.customer = Customer(self.__client_id, self.__client_secret, self.__ll_access_token, self.version)
29-
self.payment = Payment(self.__client_id, self.__client_secret, self.__ll_access_token, self.version)
30-
self.preference = Preference(self.__client_id, self.__client_secret, self.__ll_access_token, self.version)
31-
self.genericcall = GenericCall(self.__client_id, self.__client_secret, self.__ll_access_token, self.version)
32-
self.discountcampaign = DiscountCampaign(self.__client_id, self.__client_secret, self.__ll_access_token, self.version)
33-
self.identificationtype = IdentificationType(self.__client_id, self.__client_secret, self.__ll_access_token, self.version)
34-
self.merchantorder = MerchantOrder(self.__client_id, self.__client_secret, self.__ll_access_token, self.version)
55+
self.__rest_client = self.__RestClient(self)
3556

3657
def sandbox_mode(self, enable=None):
3758
if not enable is None:
@@ -57,15 +78,6 @@ def get_access_token(self):
5778
else:
5879
raise MPInvalidCredentials(str(access_data))
5980

60-
def set_platform_id(self, platform_id):
61-
self.platform_id = platform_id
62-
63-
def set_integrator_id(self, integrator_id):
64-
self.integrator_id = integrator_id
65-
66-
def set_corporation_id(self, corporation_id):
67-
self.corporation_id = corporation_id
68-
6981
def get_payment(self, id):
7082
"""
7183
Get information for specific payment
@@ -74,7 +86,11 @@ def get_payment(self, id):
7486
@return json
7587
"""
7688

77-
payment_info = self.__rest_client.get("/v1/payments/"+id)
89+
access_token = self.get_access_token()
90+
91+
uri_prefix = "/sandbox" if self.__sandbox else ""
92+
93+
payment_info = self.__rest_client.get("/v1/payments/"+id+"?access_token="+access_token)
7894
return payment_info
7995

8096
def get_payment_info(self, id):
@@ -87,7 +103,8 @@ def get_authorized_payment(self, id):
87103
@param id
88104
@return json
89105
"""
90-
authorized_payment_info = self.__rest_client.get("/authorized_payments/"+id)
106+
access_token = self.get_access_token()
107+
authorized_payment_info = self.__rest_client.get("/authorized_payments/"+id+"?access_token="+access_token)
91108
return authorized_payment_info
92109

93110

@@ -99,8 +116,9 @@ def refund_payment(self, id):
99116
@return json
100117
"""
101118

119+
access_token = self.get_access_token()
102120
refund_status = {}
103-
response = self.__rest_client.post("/v1/payments/"+id+"/refunds", refund_status)
121+
response = self.__rest_client.post("/v1/payments/"+id+"/refunds?access_token="+access_token, refund_status)
104122
return response
105123

106124

@@ -112,8 +130,9 @@ def cancel_payment(self, id):
112130
@return json
113131
"""
114132

133+
access_token = self.get_access_token()
115134
cancel_status = {"status":"cancelled"}
116-
response = self.__rest_client.put("/v1/payments/"+id, cancel_status)
135+
response = self.__rest_client.put("/v1/payments/"+id+"?access_token="+access_token, cancel_status)
117136
return response
118137

119138

@@ -125,8 +144,9 @@ def cancel_preapproval_payment(self, id):
125144
@return json
126145
"""
127146

147+
access_token = self.get_access_token()
128148
cancel_status = {"status":"cancelled"}
129-
response = self.__rest_client.put("/preapproval/"+id, cancel_status)
149+
response = self.__rest_client.put("/preapproval/"+id+"?access_token="+access_token, cancel_status)
130150
return response
131151

132152

@@ -140,9 +160,13 @@ def search_payment(self, filters, offset=0, limit=0):
140160
@return json
141161
"""
142162

163+
access_token = self.get_access_token()
164+
filters["access_token"] = access_token
143165
filters["offset"] = offset
144166
filters["limit"] = limit
145167

168+
uri_prefix = "/sandbox" if self.__sandbox else ""
169+
146170
payment_result = self.__rest_client.get("/v1/payments/search", filters)
147171
return payment_result
148172

@@ -154,7 +178,8 @@ def create_preference(self, preference):
154178
@return json
155179
"""
156180

157-
preference_result = self.__rest_client.post("/checkout/preferences", preference)
181+
access_token = self.get_access_token()
182+
preference_result = self.__rest_client.post("/checkout/preferences?access_token="+access_token, preference)
158183
return preference_result
159184

160185

@@ -167,7 +192,8 @@ def update_preference(self, id, preference):
167192
@return json
168193
"""
169194

170-
preference_result = self.__rest_client.put("/checkout/preferences/"+id, preference)
195+
access_token = self.get_access_token()
196+
preference_result = self.__rest_client.put("/checkout/preferences/"+id+"?access_token="+access_token, preference)
171197
return preference_result
172198

173199

@@ -179,7 +205,8 @@ def get_preference(self, id):
179205
@param preference
180206
@return json
181207
"""
182-
preference_result = self.__rest_client.get("/checkout/preferences/"+id)
208+
access_token = self.get_access_token()
209+
preference_result = self.__rest_client.get("/checkout/preferences/"+id+"?access_token="+access_token)
183210
return preference_result
184211

185212

@@ -190,7 +217,8 @@ def create_preapproval_payment(self, preapproval_payment):
190217
@param preapproval_payment
191218
@return json
192219
"""
193-
preapproval_payment_result = self.__rest_client.post("/preapproval", preapproval_payment)
220+
access_token = self.get_access_token()
221+
preapproval_payment_result = self.__rest_client.post("/preapproval?access_token="+access_token, preapproval_payment)
194222
return preapproval_payment_result
195223

196224
def get_preapproval_payment(self, id):
@@ -201,7 +229,8 @@ def get_preapproval_payment(self, id):
201229
@return json
202230
203231
"""
204-
preapproval_payment_result = self.__rest_client.get("/preapproval/"+id)
232+
access_token = self.get_access_token()
233+
preapproval_payment_result = self.__rest_client.get("/preapproval/"+id+"?access_token="+access_token)
205234
return preapproval_payment_result
206235

207236
def update_preapproval_payment(self, id, preapproval_payment):
@@ -212,7 +241,8 @@ def update_preapproval_payment(self, id, preapproval_payment):
212241
@return json
213242
214243
"""
215-
preapproval_payment_result = self.__rest_client.put("/preapproval/"+id, preapproval_payment)
244+
access_token = self.get_access_token()
245+
preapproval_payment_result = self.__rest_client.put("/preapproval/"+id+"?access_token="+access_token, preapproval_payment)
216246
return preapproval_payment_result
217247

218248
def get(self, uri, params=None, authenticate=True):
@@ -226,6 +256,10 @@ def get(self, uri, params=None, authenticate=True):
226256
if params is None:
227257
params = {}
228258

259+
if authenticate:
260+
access_token = self.get_access_token()
261+
params["access_token"] = access_token
262+
229263
result = self.__rest_client.get(uri, params)
230264
return result
231265

@@ -240,6 +274,8 @@ def post(self, uri, data, params=None):
240274
if params is None:
241275
params = {}
242276

277+
access_token = self.get_access_token()
278+
params["access_token"] = access_token
243279
result = self.__rest_client.post(uri, data, params)
244280
return result
245281

@@ -254,6 +290,8 @@ def put(self, uri, data, params=None):
254290
if params is None:
255291
params = {}
256292

293+
access_token = self.get_access_token()
294+
params["access_token"] = access_token
257295
result = self.__rest_client.put(uri, data, params)
258296
return result
259297

@@ -267,6 +305,8 @@ def delete(self, uri, params=None):
267305
if params is None:
268306
params = {}
269307

308+
access_token = self.get_access_token()
309+
params["access_token"] = access_token
270310
result = self.__rest_client.delete(uri, params)
271311
return result
272312

@@ -275,7 +315,7 @@ class __RestClient(object):
275315
__API_BASE_URL = "https://api.mercadopago.com"
276316
MIME_JSON = "application/json"
277317
MIME_FORM = "application/x-www-form-urlencoded"
278-
AUTH_HEADER = "Authorization"
318+
279319
def __init__(self, outer):
280320
self.__outer = outer
281321
self.USER_AGENT = "MercadoPago Python SDK v"+self.__outer.version
@@ -295,12 +335,9 @@ def get_session(self):
295335
self.get_mercadopago_transport_adapter())
296336
return session
297337

298-
def getAuthorizationHeader(self):
299-
return 'Bearer ' + self.__outer.get_access_token()
300-
301338
def get(self, uri, params=None):
302339
s = self.get_session()
303-
api_result = s.get(self.__API_BASE_URL+uri, params=params, headers={'x-product-id': self.PRODUCT_ID, 'x-tracking-id': self.TRACKING_ID, 'User-Agent':self.USER_AGENT, 'Accept':self.MIME_JSON, self.AUTH_HEADER: self.getAuthorizationHeader()})
340+
api_result = s.get(self.__API_BASE_URL+uri, params=params, headers={'x-product-id': self.PRODUCT_ID, 'x-tracking-id': self.TRACKING_ID, 'User-Agent':self.USER_AGENT, 'Accept':self.MIME_JSON})
304341

305342
response = {
306343
"status": api_result.status_code,
@@ -314,7 +351,7 @@ def post(self, uri, data=None, params=None, content_type=MIME_JSON):
314351
data = JSONEncoder().encode(data)
315352

316353
s = self.get_session()
317-
api_result = s.post(self.__API_BASE_URL+uri, params=params, data=data, headers={'x-product-id': self.PRODUCT_ID, 'x-tracking-id': self.TRACKING_ID, 'User-Agent':self.USER_AGENT, 'Content-type':content_type, 'Accept':self.MIME_JSON, 'x-platform-id':self.__outer.platform_id, 'x-integrator-id':self.__outer.integrator_id, 'x-corporation-id':self.__outer.corporation_id, self.AUTH_HEADER: self.getAuthorizationHeader()})
354+
api_result = s.post(self.__API_BASE_URL+uri, params=params, data=data, headers={'x-product-id': self.PRODUCT_ID, 'x-tracking-id': self.TRACKING_ID, 'User-Agent':self.USER_AGENT, 'Content-type':content_type, 'Accept':self.MIME_JSON})
318355

319356
response = {
320357
"status": api_result.status_code,
@@ -328,7 +365,7 @@ def put(self, uri, data=None, params=None, content_type=MIME_JSON):
328365
data = JSONEncoder().encode(data)
329366

330367
s = self.get_session()
331-
api_result = s.put(self.__API_BASE_URL+uri, params=params, data=data, headers={'x-product-id': self.PRODUCT_ID, 'x-tracking-id': self.TRACKING_ID, 'User-Agent':self.USER_AGENT, 'Content-type':content_type, 'Accept':self.MIME_JSON, self.AUTH_HEADER: self.getAuthorizationHeader()})
368+
api_result = s.put(self.__API_BASE_URL+uri, params=params, data=data, headers={'x-product-id': self.PRODUCT_ID, 'x-tracking-id': self.TRACKING_ID, 'User-Agent':self.USER_AGENT, 'Content-type':content_type, 'Accept':self.MIME_JSON})
332369

333370
response = {
334371
"status": api_result.status_code,
@@ -339,11 +376,12 @@ def put(self, uri, data=None, params=None, content_type=MIME_JSON):
339376

340377
def delete(self, uri, params=None):
341378
s = self.get_session()
342-
api_result = s.delete(self.__API_BASE_URL+uri, params=params, headers={'x-product-id': self.PRODUCT_ID, 'x-tracking-id': self.TRACKING_ID, 'User-Agent':self.USER_AGENT, 'Accept':self.MIME_JSON, self.AUTH_HEADER: self.getAuthorizationHeader()})
379+
api_result = s.delete(self.__API_BASE_URL+uri, params=params, headers={'x-product-id': self.PRODUCT_ID, 'x-tracking-id': self.TRACKING_ID, 'User-Agent':self.USER_AGENT, 'Accept':self.MIME_JSON})
343380

344381
response = {
345382
"status": api_result.status_code,
346383
"response": api_result.json()
347384
}
348385

349386
return response
387+

0 commit comments

Comments
 (0)