Created
April 28, 2022 14:42
-
-
Save rodrigobertin/69fa05d29ffb7456d6704fa1d16dd1c2 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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