def mercadopago_create_preference(self, **post): _logger.info('Mercadopago: create preference with post data %s', pprint.pformat(post)) # TODO podriamos pasar cada elemento por separado para no necesitar # el literal eval mercadopago_data = literal_eval(post.get('mercadopago_data', {})) if not mercadopago_data: return werkzeug.utils.redirect("/") environment = mercadopago_data.get('environment') mercadopago_preference = mercadopago_data.get('mercadopago_preference') mercadopago_client_id = mercadopago_data.get('mercadopago_client_id') mercadopago_secret_key = mercadopago_data.get('mercadopago_secret_key') if (not environment or not mercadopago_preference or not mercadopago_secret_key or not mercadopago_client_id): _logger.warning('Missing parameters!') return werkzeug.utils.redirect("/") MPago = mercadopago.MP(mercadopago_client_id, mercadopago_secret_key) if environment == "prod": MPago.sandbox_mode(False) else: MPago.sandbox_mode(True) preferenceResult = MPago.create_preference(mercadopago_preference) _logger.info('Preference Result: %s' % preferenceResult) # # TODO validate preferenceResult response if environment == "prod": linkpay = preferenceResult['response']['init_point'] else: linkpay = preferenceResult['response']['sandbox_init_point'] return werkzeug.utils.redirect(linkpay)
def mercadopago_create_preference(self, **post): # TODO podriamos pasar cada elemento por separado para no necesitar # el literal eval mercadopago_data = safe_eval(post.get('mercadopago_data', {})) acquirer = request.env['payment.acquirer'].browse( mercadopago_data.get('acquirer_id')).sudo() if not acquirer: return werkzeug.utils.redirect("/") environment = mercadopago_data.get('environment') mercadopago_preference = mercadopago_data.get('mercadopago_preference') mercadopago_client_id = acquirer.mercadopago_client_id mercadopago_secret_key = acquirer.mercadopago_secret_key if (not environment or not mercadopago_preference or not mercadopago_secret_key or not mercadopago_client_id): _logger.warning('Missing parameters!') return werkzeug.utils.redirect("/") MPago = mercadopago.MP(mercadopago_client_id, mercadopago_secret_key) if environment == "prod": MPago.sandbox_mode(False) else: MPago.sandbox_mode(True) preferenceResult = MPago.create_preference(mercadopago_preference) if environment != "prod": _logger.info('Preference Result: %s' % preferenceResult) # # TODO validate preferenceResult response if environment == "prod": linkpay = preferenceResult['response']['init_point'] else: linkpay = preferenceResult['response']['sandbox_init_point'] return werkzeug.utils.redirect(linkpay)
def mercadopago_search_payment(self): mercadopago_client = self.env['ir.config_parameter'].get_param( 'mercadopago_client', default=False) mercadopago_key = self.env['ir.config_parameter'].get_param( 'mercadopago_key', default=False) if mercadopago_client and mercadopago_key: mp = mercadopago.MP(mercadopago_client, mercadopago_key) filters = { "range": "date_created", "begin_date": "NOW-1MONTH", "end_date": "NOW", "status": "approved", } journal_id = int(self.env['ir.config_parameter'].get_param( 'mercadopago_journal_id', default=False)) searchResult = mp.search_payment(filters, 0, 100) for result in searchResult["response"]["results"]: #_logger.info(result) #model, res_id =result['external_reference'].split('-') res_id = '11' model = 'res.partner' if model == 'res.partner': partner_id = self.env['res.partner'].browse(int(res_id)) else: partner_id = self.env[model].browse(res_id)[ self.env[model]._mercadopago_partner_field] exist = self.search([('mercadopago_id', '=', result['authorization_code'])]) if not len(exist): payment = { 'communication': result['authorization_code'], 'mercadopago_id': result['authorization_code'], 'partner_type': 'customer', 'payment_type': 'inbound', 'partner_id': partner_id.id, 'journal_id': journal_id, 'payment_date': result['money_release_date'][:10], 'amount': result['transaction_amount'], 'payment_method_id': self.env.ref( 'payment.account_payment_method_electronic_in').id } payment_id = self.create(payment) payment_id.post() if model != 'res.partner': self.env[model].search([ ('id', '=', int(res_id)) ]).mercadopago_payment_receipt(payment_id, result)
def mercadopago_create_preference(self): # preference api description # https://www.mercadopago.com.ar/developers/es/reference/preferences/_checkout_preferences/post/ # to-do: add suport to back_urls expires mercadopago_client = self.env['ir.config_parameter'].get_param( 'mercadopago_client', default=False) mercadopago_key = self.env['ir.config_parameter'].get_param( 'mercadopago_key', default=False) if self.env['ir.config_parameter'].sudo().get_param( 'mercadopago_external_reference', default='obj') == 'obj': external_reference = self._name else: external_reference = 'res.partner' if self.env['ir.config_parameter'].sudo().get_param( 'mercadopago_sandbox', default=False): init_point = 'sandbox_init_point' else: init_point = 'init_point' if mercadopago_client and mercadopago_key: mp = mercadopago.MP(mercadopago_client, mercadopago_key) for obj in self: if external_reference == 'res.partner': ref_id = self[self._mercadopago_partner_field].id else: ref_id = obj.id preference = { 'external_reference': '%s-%s' % (external_reference, ref_id), 'payer': obj.mercadopago_payer_dict(), 'shipments': obj.mercadopago_shipments_dict(), 'payment_methods': obj.mercadopago_payment_methods_dict(), 'notification_url': obj.mercadopago_notification_url(), 'items': obj.mercadopago_items(), } preference.update(obj.mercadopago_expires_dict()) _logger.info("preference %r" % preference) preferenceResult = mp.create_preference(preference) if 'status' in preferenceResult and preferenceResult[ 'status'] == 201: self.mercadopago_url = preferenceResult['response'][ init_point] self.mercadopago_id = preferenceResult['response']['id'] return True # for xmlrcp
def get_context_data(self, *, object_list=None, **kwargs): context = super(SalesInMonth, self).get_context_data() total = 0 usage = 0 for order in self.object_list: total += order.total # TODO: Separate the usage formula in a separate function order.usage = apply_usage(order.total) usage += order.usage context['total'] = total context['usage'] = usage # TODO: Check if this is not necessary in the future, this is only for security payment = PaymentService.objects.get(pk=self.kwargs['pk']) context['warning'] = False if payment.mount != context['usage']: context['warning'] = True mp = mercadopago.MP(settings.MELI_TOKEN) preference = { "items": [{ "title": "Servicio de Delivery Lavalle de {} por {}".format( get_company(self.request.user), usage), "quantity": 1, "unit_price": usage }], "payment_methods": { "excluded_payment_types": [{ "id": "ticket" }, { "id": "bank_transfer" }], }, "binary_mode": True, } context_preference = mp.create_preference(preference) context['preference'] = context_preference['response']['id'] context['payment'] = payment context['payment_id'] = payment.id return context