diff options
| author | Christophe Simonis <chs@odoo.com> | 2019-03-08 14:10:38 +0100 |
|---|---|---|
| committer | Christophe Simonis <chs@odoo.com> | 2019-03-08 14:10:38 +0100 |
| commit | fabbcf1579dd4b5653cc611e53cd8ff6c7e297b4 (patch) | |
| tree | 8b3cfa88ed4a4e85b4af8df79dc5c7197a04764b /addons/payment_authorize/models | |
| parent | 8da3750cee37532d2060bc0c4271a15bc1511dc2 (diff) | |
| parent | 21c84f1532206a9b46344cacc84bd2a39ba7bbd3 (diff) | |
[MERGE] forward port branch saas-15 up to 21c84f15322
Diffstat (limited to 'addons/payment_authorize/models')
| -rw-r--r-- | addons/payment_authorize/models/payment.py | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/addons/payment_authorize/models/payment.py b/addons/payment_authorize/models/payment.py index cd35782a506..e3251f7770a 100644 --- a/addons/payment_authorize/models/payment.py +++ b/addons/payment_authorize/models/payment.py @@ -6,6 +6,7 @@ from datetime import datetime import hashlib import hmac import logging +import string import time from odoo import _, api, fields, models @@ -53,8 +54,16 @@ class PaymentAcquirerAuthorize(models.Model): values['x_fp_sequence'], values['x_fp_timestamp'], values['x_amount'], - values['x_currency_code']]) - return hmac.new(values['x_trans_key'].encode('utf-8'), data.encode('utf-8'), hashlib.md5).hexdigest() + values['x_currency_code']]).encode('utf-8') + + # [BACKWARD COMPATIBILITY] Check that the merchant did update his transaction + # key to signature key (end of MD5 support from Authorize.net) + # The signature key is now '128-character hexadecimal format', while the + # transaction key was only 16-character. + if len(values['x_trans_key']) == 128: + return hmac.new(values['x_trans_key'].decode("hex").encode('utf-8'), data, hashlib.sha512).hexdigest().upper() + else: + return hmac.new(values['x_trans_key'].encode('utf-8'), data, hashlib.md5).hexdigest() @api.multi def authorize_form_generate_values(self, values): @@ -181,7 +190,7 @@ class TxAuthorize(models.Model): def _authorize_form_get_tx_from_data(self, data): """ Given a data dict coming from authorize, verify it and find the related transaction record. """ - reference, trans_id, fingerprint = data.get('x_invoice_num'), data.get('x_trans_id'), data.get('x_MD5_Hash') + reference, trans_id, fingerprint = data.get('x_invoice_num'), data.get('x_trans_id'), data.get('x_SHA2_Hash') or data.get('x_MD5_Hash') if not reference or not trans_id or not fingerprint: error_msg = _('Authorize: received data with missing reference (%s) or trans_id (%s) or fingerprint (%s)') % (reference, trans_id, fingerprint) _logger.info(error_msg) |
