示例#1
0
    def mercadopago_get_merchant_order(self, merchant_order_id):
        print "[%s]mercadopago_get_merchant_order" % __name__
        self.ensure_one()
        acq = self
        MPago = mercadopago.MP(acq.mercadopago_client_id,
                               acq.mercadopago_secret_key)
        merchant_order = MPago.get_merchant_order(merchant_order_id)

        return merchant_order.get('response', False)
示例#2
0
    def mercadopago_get_collection(self, collection_id):
        print "[%s]mercadopago_get_collection" % __name__

        self.ensure_one()
        acq = self
        MPago = mercadopago.MP(acq.mercadopago_client_id,
                               acq.mercadopago_secret_key)
        collection_info = MPago.get_collection(collection_id)

        return collection_info.get('response', {}).get('collection', False)
示例#3
0
    def _mercadopago_s2s_get_access_token(self):
        """
        """
        print "[%s]_mercadopago_s2s_get_access_token" % __name__

        res = dict.fromkeys(self.ids, False)
        for acquirer in self:
            MPago = mercadopago.MP(acquirer.mercadopago_client_id,
                                   acquirer.mercadopago_secret_key)
            res[acquirer.id] = MPago.get_access_token()
        return res
示例#4
0
    def mercadopago_form_generate_values(self,
                                         cr,
                                         uid,
                                         id,
                                         partner_values,
                                         tx_values,
                                         context=None):
        base_url = self.pool['ir.config_parameter'].get_param(
            cr, SUPERUSER_ID, 'web.base.url')
        acquirer = self.browse(cr, uid, id, context=context)

        print "mercadopago_form_generate_values: tx_values: ", tx_values
        print "partner_values:", partner_values

        MPago = False
        MPagoPrefId = False

        if acquirer.mercadopago_client_id and acquirer.mercadopago_secret_key:
            MPago = mercadopago.MP(acquirer.mercadopago_client_id,
                                   acquirer.mercadopago_secret_key)
            print "MPago: ", MPago
        else:
            error_msg = 'YOU MUST COMPLETE acquirer.mercadopago_client_id and acquirer.mercadopago_secret_key'
            _logger.error(error_msg)
            raise ValidationError(error_msg)

        jsondump = ""

        if MPago:

            if acquirer.environment == "prod":
                MPago.sandbox_mode(False)
            else:
                MPago.sandbox_mode(True)

            MPagoToken = MPago.get_access_token()

            preference = {
                "items": [{
                    "title":
                    "Orden Ecommerce " + tx_values["reference"],
                    #"picture_url": "https://www.mercadopago.com/org-img/MP3/home/logomp3.gif",
                    "quantity":
                    1,
                    "currency_id":
                    tx_values['currency'] and tx_values['currency'].name or '',
                    "unit_price":
                    tx_values["amount"],
                    #"category_id": "Categoría",
                }],
                "payer": {
                    "name": partner_values["name"],
                    "surname": partner_values["first_name"],
                    "email": partner_values["email"],
                    #		            "date_created": "2015-01-29T11:51:49.570-04:00",
                    #		            "phone": {
                    #			            "area_code": "+5411",
                    #			            "number": partner_values["phone"]
                    #		            },
                    #		            "identification": {
                    #			            "type": "DNI",
                    #			            "number": "12345678"
                    #		            },
                    #		            "address": {
                    #			            "street_name": partner_values["address"],
                    #			            "street_number": "",
                    #			            "zip_code": partner_values["zip"]
                    #		            } contni
                },
                "back_urls": {
                    "success":
                    '%s' % urlparse.urljoin(base_url,
                                            MercadoPagoController._return_url),
                    "failure":
                    '%s' % urlparse.urljoin(base_url,
                                            MercadoPagoController._cancel_url),
                    "pending":
                    '%s' % urlparse.urljoin(base_url,
                                            MercadoPagoController._return_url)
                },
                "auto_return":
                "approved",
                #	            "payment_methods": {
                #		            "excluded_payment_methods": [
                #			            {
                #				            "id": "amex"
                #			            }
                #		            ],
                #		            "excluded_payment_types": [
                #			            {
                #				            "id": "ticket"
                #			            }
                #		            ],
                #		            "installments": 24,
                #		            "default_payment_method_id": '',
                #		            "default_installments": '',
                #	            },
                #	            "shipments": {
                #		            "receiver_address":
                #		             {
                #			            "zip_code": "1430",
                #			            "street_number": 123,
                #			            "street_name": "Calle Trece",
                #			            "floor": 4,
                #			            "apartment": "C"
                #		            }
                #	            },
                "notification_url":
                '%s' %
                urlparse.urljoin(base_url, MercadoPagoController._notify_url),
                "external_reference":
                tx_values["reference"],
                "expires":
                True,
                "expiration_date_from":
                self.mercadopago_dateformat(datetime.datetime.now(tzlocal())),
                "expiration_date_to":
                self.mercadopago_dateformat(
                    datetime.datetime.now(tzlocal()) +
                    datetime.timedelta(days=31))
            }

            print "preference:", preference

            preferenceResult = MPago.create_preference(preference)

            print "preferenceResult: ", preferenceResult
            if 'response' in preferenceResult:
                if 'id' in preferenceResult['response']:
                    MPagoPrefId = preferenceResult['response']['id']
            else:
                error_msg = 'Returning response is:'
                error_msg += json.dumps(preferenceResult, indent=2)
                _logger.error(error_msg)
                raise ValidationError(error_msg)

            if acquirer.environment == "prod":
                linkpay = preferenceResult['response']['init_point']
            else:
                linkpay = preferenceResult['response']['sandbox_init_point']

            jsondump = json.dumps(preferenceResult, indent=2)

            print "linkpay:", linkpay
            print "jsondump:", jsondump
            print "MPagoPrefId: ", MPagoPrefId
            print "MPagoToken: ", MPagoToken

        mercadopago_tx_values = dict(tx_values)
        if MPagoPrefId:
            mercadopago_tx_values.update({
                'pref_id': MPagoPrefId,
                #            'cmd': '_xclick',
                #            'business': acquirer.mercadopago_email_account,
                #            'item_name': tx_values['reference'],
                #            'item_number': tx_values['reference'],
                #            'amount': tx_values['amount'],
                #            'currency_code': tx_values['currency'] and tx_values['currency'].name or '',
                #            'address1': partner_values['address'],
                #            'city': partner_values['city'],
                #            'country': partner_values['country'] and partner_values['country'].name or '',
                #            'state': partner_values['state'] and partner_values['state'].name or '',
                #            'email': partner_values['email'],
                #            'zip': partner_values['zip'],
                #            'first_name': partner_values['first_name'],
                #            'last_name': partner_values['last_name'],
                #            'return': '%s' % urlparse.urljoin(base_url, MercadoPagoController._return_url),
                #            'notify_url': '%s' % urlparse.urljoin(base_url, MercadoPagoController._notify_url),
                #            'cancel_return': '%s' % urlparse.urljoin(base_url, MercadoPagoController._cancel_url),
            })


#        if acquirer.fees_active:
#            mercadopago_tx_values['handling'] = '%.2f' % mercadopago_tx_values.pop('fees', 0.0)
#        if mercadopago_tx_values.get('return_url'):
#            mercadopago_tx_values['custom'] = json.dumps({'return_url': '%s' % mercadopago_tx_values.pop('return_url')})
        return partner_values, mercadopago_tx_values
示例#5
0
    def mercadopago_create_preference(self, values):
        """
        Create a MercadoPago preference and related pending transaction.
        """
        self.ensure_one()
        acquirer = self

        # Setup MercadoPago.
        MPago = mercadopago.MP(acquirer.mercadopago_client_id,
                               acquirer.mercadopago_secret_key)

        if not MPago:
            error_msg = 'Can\'t create mercadopago instance.'
            _logger.error(error_msg)
            raise ValidationError(error_msg)

        MPago.sandbox_mode(acquirer.environment != "prod")

        # Requiered data to setup preferences.
        base_url = self.env['ir.config_parameter'].sudo().get_param(
            'web.base.url')
        date_from = fields.Datetime \
            .context_timestamp(self, datetime.now())

        # Setup Preference.
        preference = {
            "items": [{
                "title":
                "Orden Ecommerce " + values["reference"],
                "quantity":
                1,
                "currency_id":
                values['currency'] and values['currency'].name or '',
                "unit_price":
                values["amount"]
            }],
            "payer": {
                "name": values["billing_partner_first_name"],
                "surname": values["billing_partner_last_name"],
                "email": values["billing_partner_email"]
            },
            "back_urls": {
                "success":
                '%s' %
                urlparse.urljoin(base_url, MercadoPagoController._return_url),
                "failure":
                '%s' %
                urlparse.urljoin(base_url, MercadoPagoController._cancel_url),
                "pending":
                '%s' %
                urlparse.urljoin(base_url, MercadoPagoController._return_url)
            },
            "auto_return":
            "approved",
            "notification_url":
            '%s' %
            urlparse.urljoin(base_url, MercadoPagoController._notify_url),
            "external_reference":
            values["reference"],
            "expires":
            True,
            "expiration_date_from":
            date_from.strftime(MLDATETIME),
            "expiration_date_to":
            (date_from + timedelta(days=2)).strftime(MLDATETIME)
        }

        # Generate Preference.
        res = MPago.create_preference(preference)

        print "Pref:", res

        if 'response' not in res or 'id' not in res['response']:
            error_msg = 'Returning response is:'
            error_msg += json.dumps(res, indent=2)
            _logger.error(error_msg)
            raise ValidationError(error_msg)

        pref_id = res['response']['id']
        form_url = res['response']['init_point'] \
            if acquirer.environment == "prod" \
            else res['response']['sandbox_init_point']

        return pref_id, form_url