Merge pull request #4195 from expsa/ENS-3595

[FIx] payment_applepay: tx reference, form validate
This commit is contained in:
abdurrahman-saber 2025-08-13 15:21:51 +03:00 committed by GitHub
commit dee7f4d081
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 10 additions and 22 deletions

View File

@ -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")

View File

@ -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()
self._set_transaction_error(result.get('description', ''))
return self.write(res)