Skip to content

Instantly share code, notes, and snippets.

@rodrigobertin
Created April 28, 2022 14:42
Show Gist options
  • Select an option

  • Save rodrigobertin/69fa05d29ffb7456d6704fa1d16dd1c2 to your computer and use it in GitHub Desktop.

Select an option

Save rodrigobertin/69fa05d29ffb7456d6704fa1d16dd1c2 to your computer and use it in GitHub Desktop.
import os
import sys
import hashlib
from pprint import pprint
import requests as rq
from django.urls import reverse_lazy
class MercadopagoCheckOut:
url_checkout = None
url_checkout_sandbox = None
url_pay = None
preference_id = None
def __init__(self, token_mp):
self.token_mp = token_mp
self.preference_result = None
self.payer = None
self.url_pay = None
self.get_headers = {
'Authorization': 'Bearer {}'.format(token_mp),
'Content-Type': 'application/json'
}
def payer_info(self, **kwargs):
info_payer = {
"name": kwargs.get('nombre', None),
"surname": kwargs.get('apellido', None),
"email": kwargs.get('email', None),
"phone": {
"area_code": kwargs.get('codigo_de_area', None),
"number": kwargs.get('telefono', None)
},
"identification": {
"type": "DNI",
"number": kwargs.get('dni', None)
},
"address": {
"street_name": kwargs.get('calle', None),
"street_number": kwargs.get('numero', None),
"zip_code": kwargs.get('codigo_postal', None)
}
}
self.payer = info_payer
return info_payer
def create_preferences(self, url_tienda, items, url_return_success, url_return_pending, exclude_ticket=False, costo_envio=None, **kwargs):
try:
preference = {
"items": items,
"payer": self.payer,
"total_amount": kwargs.get('total',0),
"back_urls": {
"success": f'{url_tienda}{url_return_success}',
"pending": f'{url_tienda}{url_return_pending}',
},
"additional_info": {
"items": items,
"payer": self.payer
},
"auto_return": "approved",
"binary_mode": True,
"notification_url": kwargs.get('notification_url', None),
"external_reference": kwargs.get('external_reference', None),
"expires": False,
}
if exclude_ticket is not False:
preference["payment_methods"] = {
"excluded_payment_types": [
{
"id": "ticket"
},
]
}
if costo_envio is not None:
preference["shipments"] = {
"mode": "not_specified",
"cost": costo_envio,
"receiver_address": {
"zip_code": self.payer['address']['zip_code'],
"street_name": self.payer['address']['street_name'],
"street_number": self.payer['address']['street_number']
}
}
url_send = 'https://api.mercadopago.com/checkout/preferences'
preferences = rq.post(url=url_send, headers=self.get_headers, json=preference)
pprint(preferences.json())
if 'status' in preferences.json():
if preferences.json()['status'] != 200:
self.preference_result = str(preferences.json()['message'])
return self.preference_result
else:
self.preference_result = preferences.json()
self.url_checkout = self.preference_result["init_point"]
self.preference_id = self.preference_result["id"]
self.url_checkout_sandbox = self.preference_result["sandbox_init_point"]
self.url_pay = self.url_checkout
if os.environ.get('DEV'):
self.url_pay = self.url_checkout_sandbox
return self.preference_result
except:
error = str(sys.exc_info())
pprint(f'Error class MP: {error}')
self.preference_result = error
def create_button(self, label='Pagar tu compra', color='#c0392b'):
try:
if self.url_checkout is None:
return u'Error no se creo el pago: {}'.format(self.preference_result)
url = self.url_checkout
html = u"""
<a href="{url}"
data-model-name="MP-Checkout"
data-button-label="{label}"
data-header-color="{color}"
data-mp-mode="redirect"
class="btn btn-primary btn-block"
data-elements-color="#8e44ad">{label}</a>
<!-- <script
src="https://www.mercadopago.com.ar/integrations/v1/web-payment-checkout.js"
data-preference-id="{_id}">
</script> -->
<!-- <script type="text/javascript" src="//resources.mlstatic.com/mptools/render.js"></script> -->
""".format(url=url, label=label, color=color, _id=self.preference_id)
return html
except:
return u'Error button: {}'.format(sys.exc_info())
@staticmethod
def get_promos_mercadopago():
try:
rend = u"""
<div style="clear: both" id="promos-merc">
<div class="clearfix"></div>
<iframe src="https://www.mercadopago.com/mla/credit_card_promos.htm" frameborder="0" scrolling="no" style="width: 100%;height: 1110px;display: block;margin: 0 auto !important;"></iframe>
</div>
"""
return rend
except:
return u'Error promos'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment