From 2eec3ff3eb8c6e71239446e5e2ddbec6bdca9a4a Mon Sep 17 00:00:00 2001 From: Abdurrahman Saber Date: Wed, 13 Aug 2025 15:20:54 +0300 Subject: [PATCH] [FIx] payment_applepay: tx reference, form validate --- .../payment_applepay/controllers/main.py | 3 +- .../models/payment_transaction.py | 29 ++++++------------- 2 files changed, 10 insertions(+), 22 deletions(-) diff --git a/odex25_donation/payment_applepay/controllers/main.py b/odex25_donation/payment_applepay/controllers/main.py index 1f8731017..95d092e2d 100644 --- a/odex25_donation/payment_applepay/controllers/main.py +++ b/odex25_donation/payment_applepay/controllers/main.py @@ -87,8 +87,7 @@ class ApplepayController(http.Controller): tx_id = payment.search([('applepay_checkout_id', '=', post.get('id', ''))]) tx_id.sale_order_ids.sudo().write({'order_mobile_number': phone}) _logger.info("Tx Sudo = %s", tx_id) - tx = response.get('customParameters', {}).get('SHOPPER_tx_id') or tx_id or '' - response.update({'tx_id': tx}) + response.update({'tx_id': tx_id.id}) ids = tx_id.sale_order_ids.sudo().ids request.session['sale_last_order_id'] = ids[0] if len(ids) else None request.env['payment.transaction'].sudo().form_feedback(response, "applepay") diff --git a/odex25_donation/payment_applepay/models/payment_transaction.py b/odex25_donation/payment_applepay/models/payment_transaction.py index 53b1d910f..98b54950c 100644 --- a/odex25_donation/payment_applepay/models/payment_transaction.py +++ b/odex25_donation/payment_applepay/models/payment_transaction.py @@ -33,34 +33,23 @@ class PaymentTransaction(models.Model): return txs[0] def _applepay_form_validate(self, data): - _logger.info('Validated ApplePay payment for tx %s: set as pending' % (self.reference)) + success_re = r"^(000\.000\.|000\.100\.1|000\.[36]|000\.400\.1[12]0|000\.400\.0[^3]|000\.400\.100)" + pending_re = r"^(000\.200|800\.400\.5|100\.400\.500)" result = data.get('result') - status_code = data.get('result').get('code') + result_code = result.get('code') res = { 'acquirer_reference': data.get('id'), - 'state_message': result.get('description', '') + 'state_message': f"{result.get('description', '')}\n{','.join([str(s) for s in data.get('parameterErrors', [])])}" } - success_regex_1 = re.compile(r'000\.000\.|000\.100\.1|000\.[36]').search(status_code) - success_regex_2 = re.compile(r'000\.400\.0[^3]|000\.400\.100').search(status_code) - pending_regex_1 = re.compile(r'000\.200').search(status_code) - pending_regex_2 = re.compile(r'800\.400\.5|100\.400\.500').search(status_code) - error_regex_1 = re.compile(r'000\.100\.2').search(status_code) - - _logger.info("Apple Pay Status Code = %s",status_code) - - if success_regex_1 or success_regex_2: + if re.match(success_re, result_code): date_validate = dateutil.parser.parse(data.get('timestamp')).astimezone(pytz.utc).replace(tzinfo=None) - res.update(acquirer_reference=data.get('id'), date=date_validate) + res.update(date=date_validate) self._set_transaction_done() - elif pending_regex_1 or pending_regex_2: + elif re.match(pending_re, result_code): self._set_transaction_pending() - elif error_regex_1: - self._set_transaction_error() else: - error = 'Received unrecognized status for ApplePay payment %s: %s, set as error' % (self.reference, status_code) - _logger.info(error) - self._set_transaction_cancel() - return self.write(res) + self._set_transaction_error(result.get('description', '')) + return self.write(res)