[FIX] payment_razorpay: sanitize the partner phone numbers in RazorPay

Currently, when the partner phone has space, Razorpay throws an invalid phone exception error.
 In this commit we sanitize the partner phone.

Case 1:
 If partner phone is empty then validation error will be arrived. 'Phone number is required'.

Case 2:
     If partner phone is not sanitized then validation error will be arrived. 'Incorrect phone number'.

 EX: (+91 96385 44240) -> (+919638544240)

task-3113199

closes odoo/odoo#108969

X-original-commit: 38af5ee6a4feba802d50305fab8c001494f4e538
Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
This commit is contained in:
Prakash Prajapati
2023-01-03 12:19:20 +01:00
parent b6f2beb943
commit 9f2d9c3143
2 changed files with 36 additions and 1 deletions
@@ -0,0 +1,21 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * payment_razorpay
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-01-02 10:49+0000\n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: payment_razorpay
#: code:addons/payment_razorpay/models/payment_transaction.py:0
#, python-format
msgid "The phone number is missing."
msgstr ""
@@ -11,6 +11,7 @@ from odoo.exceptions import UserError, ValidationError
from odoo.addons.payment import utils as payment_utils
from odoo.addons.payment_razorpay.const import PAYMENT_STATUS_MAPPING
from odoo.addons.payment_razorpay.controllers.main import RazorpayController
from odoo.addons.phone_validation.tools.phone_validation import phone_sanitize_numbers
_logger = logging.getLogger(__name__)
@@ -49,6 +50,19 @@ class PaymentTransaction(models.Model):
converted_amount = payment_utils.to_minor_currency_units(self.amount, self.currency_id)
base_url = self.provider_id.get_base_url()
return_url_params = {'reference': self.reference}
phone = self.partner_phone
error_message = _("The phone number is missing.")
if phone:
# sanitize partner phone
country_code = self.partner_country_id.code
country_phone_code = self.partner_country_id.phone_code
phone_info = phone_sanitize_numbers([phone], country_code, country_phone_code)
phone = phone_info[self.partner_phone]['sanitized']
error_message = phone_info[self.partner_phone]['msg']
if not phone:
raise ValidationError("Razorpay: " + error_message)
rendering_values = {
'key_id': self.provider_id.razorpay_key_id,
'name': self.company_id.name,
@@ -59,7 +73,7 @@ class PaymentTransaction(models.Model):
'currency': self.currency_id.name,
'partner_name': self.partner_name,
'partner_email': self.partner_email,
'partner_phone': self.partner_phone,
'partner_phone': phone,
'return_url': url_join(
base_url, f'{RazorpayController._return_url}?{url_encode(return_url_params)}'
),