Skip to content

Commit

Permalink
[FW] payment_mercadopago:Add split tests and production mercadopago c…
Browse files Browse the repository at this point in the history
…redentials fields

closes #68

Signed-off-by: Bruno Zanotti <bz@adhoc.com.ar>
  • Loading branch information
ALopez-Adhoc committed Oct 2, 2023
1 parent 3d0a09b commit 9941ba2
Show file tree
Hide file tree
Showing 6 changed files with 37 additions and 28 deletions.
2 changes: 1 addition & 1 deletion payment_mercadopago/__manifest__.py
Expand Up @@ -2,7 +2,7 @@
'name': 'Mercado Pago Payment Acquirer',
'category': 'Accounting/Payment Acquirers',
'summary': 'Payment Acquirer: MercadoPago',
'version': "16.0.3.1.0",
'version': "16.0.3.2.0",
'description': """
Mercado pago Payment
===================
Expand Down
2 changes: 1 addition & 1 deletion payment_mercadopago/controllers/main.py
Expand Up @@ -43,7 +43,7 @@ def mercadopago_get_provider_info(self, rec_id, flow):
else:
provider_sudo = request.env['payment.provider'].sudo().browse(rec_id).exists()
return {
'publishable_key': provider_sudo.mercadopago_publishable_key,
'publishable_key': provider_sudo._get_mercadopago_publishable_key(),
'bin': bin,
'provider_ref': provider_ref,
}
Expand Down
4 changes: 3 additions & 1 deletion payment_mercadopago/demo/payment_acquirer_demo.xml
Expand Up @@ -3,10 +3,12 @@
<record id="payment_provider_mercadopago" model="payment.provider">
<field name="mercadopago_publishable_key">TEST-4f5a24d1-b016-4d3f-b9ad-c989c3e371e7</field>
<field name="mercadopago_access_token">TEST-4811719641145832-020115-c5caffc149634e3e9d72fde2b74544d8__LD_LA__-172837665</field>
<field name="mercadopago_test_publishable_key">TEST-4f5a24d1-b016-4d3f-b9ad-c989c3e371e7</field>
<field name="mercadopago_test_access_token">TEST-4811719641145832-020115-c5caffc149634e3e9d72fde2b74544d8__LD_LA__-172837665</field>
<field name="mercadopago_item_id">001</field>
<field name="mercadopago_item_title">Test Item</field>
<field name="mercadopago_item_description">Item Description</field>
<field name="mercadopago_item_category">others</field>
<field name="mercadopago_item_category">others</field>
</record>
<!--function model="payment.provider" name="write">
<value eval="ref('payment_mercadopago.payment_provider_mercadopago')"/>
Expand Down
10 changes: 5 additions & 5 deletions payment_mercadopago/models/mercadopago_request.py
Expand Up @@ -24,10 +24,10 @@ class MercadoPagoAPI():
"""

def __init__(self, provider):
request_options = RequestOptions(provider.mercadopago_access_token, platform_id="BVH38T5N7QOK0PPDGC2G")
self.mp = mercadopago.SDK(provider.mercadopago_access_token, request_options=request_options)
request_options = RequestOptions(provider._get_mercadopago_access_token(), platform_id="BVH38T5N7QOK0PPDGC2G")
self.mp = mercadopago.SDK(provider._get_mercadopago_access_token(), request_options=request_options)
self.sandbox = not provider.state == "enabled"
self.mercadopago_access_token = provider.mercadopago_access_token
self.mercadopago_access_token = provider._get_mercadopago_access_token()

def check_response(self, resp):
if resp['status'] in [200, 201]:
Expand Down Expand Up @@ -72,13 +72,13 @@ def check_api_response(self, resp):
def unlink_card_token(self, customer_id, card_id):

api_url = MP_URL + "v1/customers/%s/cards/%s" % (customer_id, card_id)
headers = {"Authorization": "Bearer %s" % self.mercadopago_access_token}
headers = {"Authorization": "Bearer %s" % self._get_mercadopago_access_token()}
response = requests.delete(api_url, headers=headers)

#create Test User
def create_test_user(self):
api_url = MP_URL + "users/test_user"
headers = {"Authorization": "Bearer %s" % self.mercadopago_access_token}
headers = {"Authorization": "Bearer %s" % self._get_mercadopago_access_token()}
request_data = {"site_id":"MLA"}
response = requests.post(api_url, headers=headers, json=request_data)
resp = self.check_api_response(response)
Expand Down
21 changes: 19 additions & 2 deletions payment_mercadopago/models/payment_provider.py
Expand Up @@ -19,8 +19,11 @@ class PaymentProvider(models.Model):

code = fields.Selection(
selection_add=[('mercadopago', 'MercadoPago')], ondelete={'mercadopago': 'set default'})
mercadopago_publishable_key = fields.Char('MercadoPago Public Key', required_if_provider='mercadopago')
mercadopago_access_token = fields.Char('MercadoPago Access Token', required_if_provider='mercadopago')

mercadopago_publishable_key = fields.Char('MercadoPago Public Key')
mercadopago_access_token = fields.Char('MercadoPago Access Token')
mercadopago_test_publishable_key = fields.Char('MercadoPago test Public Key')
mercadopago_test_access_token = fields.Char('MercadoPago test Access Token')
is_validation = fields.Boolean()

# MercadoPago general item fields
Expand Down Expand Up @@ -69,6 +72,20 @@ class PaymentProvider(models.Model):
def _get_mercadopago_request(self):
return MercadoPagoAPI(self)

def _get_mercadopago_publishable_key(self):
self.ensure_one()
if self.state == 'test':
return self.mercadopago_test_publishable_key
elif self.state == 'enabled':
return self.mercadopago_publishable_key

def _get_mercadopago_access_token(self):
self.ensure_one()
if self.state == 'test':
return self.mercadopago_test_access_token
elif self.state == 'enabled':
return self.mercadopago_access_token

@api.onchange('code')
def _onchange_code(self):
if self.code == 'mercadopago':
Expand Down
26 changes: 8 additions & 18 deletions payment_mercadopago/views/payment_views.xml
Expand Up @@ -7,32 +7,22 @@
<field name="arch" type="xml">
<xpath expr='//group[@name="provider_credentials"]' position='inside'>
<group attrs="{'invisible': [('code', '!=', 'mercadopago')]}">
<field name="mercadopago_publishable_key" attrs="{'required': [('code', '=', 'mercadopago'), ('state', '!=', 'disabled')]}"/>
<field name="mercadopago_access_token" password="True" attrs="{'required': [('code', '=', 'mercadopago'), ('state', '!=', 'disabled')]}"/>
<field name="mercadopago_capture_method"/>
<field name="mercadopago_binary"/>
<field name="mercadopago_publishable_key" attrs="{'invisible': [('state', '!=', 'enabled')], 'required': [('code', '=', 'mercadopago'), ('state', '==', 'enabled')]}"/>
<field name="mercadopago_access_token" password="True" attrs="{'invisible': [('state', '!=', 'enabled')], 'required': [('code', '=', 'mercadopago'), ('state', '=', 'enabled')]}"/>
<field name="mercadopago_test_publishable_key" attrs="{'invisible': [('state', '!=', 'test')], 'required': [('code', '=', 'mercadopago'), ('state', '==', 'test')]}"/>
<field name="mercadopago_test_access_token" password="True" attrs="{'invisible': [('state', '!=', 'test')], 'required': [('code', '=', 'mercadopago'), ('state', '=', 'test')]}"/>
</group>
</xpath>
<xpath expr='//group[@name="provider_credentials"]' position='after'>
<p class="alert alert-info" role="alert" style="margin-bottom:0px;" attrs="{'invisible': [('code', '!=', 'mercadopago')]}">
Para más información ver documentación de MercadoPago: <a colspan="2" href="https://www.adhoc.com.ar/doc/2853/7082" target="_blank">Configuración</a>.<br/>
Podés obtener las credenciales de MercadoPago
<a colspan="2" href="https://www.mercadopago.com/mla/account/credentials" target="_blank">Aquí</a>.
<br/>
Para más información ver documentación de MercadoPago:
<a colspan="2" href="https://www.mercadopago.com.ar/developers/es/support/20151" target="_blank">Aplicaciones y credenciales</a>.
<br/>
<a colspan="2" href="https://www.mercadopago.com.ar/settings/account/credentials" target="_blank">Aquí</a>. (recordá que para realizar pruebas es necesario configurar tanto las credenciales productivas como de test, en cada entorno respectivo).
<br/>
Algunas observaciones sobre las credenciales y los estados "Habilitado" (producción) y "Modo de prueba" (test):
<ul>
<li>Las credenciales de producción sirven para ambos estados.</li>
<li>Las credenciales de test sirven solo para estado de test.</li>
<li>Puede realizar pruebas en estado de test utilizando las tarjetas que figuran
<a colspan="2" href="https://www.mercadopago.com.ar/developers/es/docs/checkout-api/integration-test/test-cards" target="_blank">
Puede realizar pruebas en estado de test utilizando las tarjetas que figuran
<a colspan="2" href="https://www.mercadopago.com.ar/developers/es/docs/checkout-api/additional-content/your-integrations/test/cards" target="_blank">
aquí
</a>
con cualquier código de seguridad y una fecha de vencimiento futura.
</li>
</ul>
</p>

<!--<div class="alert alert-warning" role="alert" style="margin-bottom:0px;" attrs="{'invisible': ['|',('code', '!=', 'mercadopago'), ('state','!=', 'test')]}">
Expand Down

0 comments on commit 9941ba2

Please sign in to comment.