From 3868a1673be99a57dab098ed274d01b24a968c58 Mon Sep 17 00:00:00 2001 From: Naveen Date: Tue, 11 Jan 2022 17:26:03 +0530 Subject: [PATCH 1/4] double notification issue --- catalog/controller/extension/payment/razorpay.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/catalog/controller/extension/payment/razorpay.php b/catalog/controller/extension/payment/razorpay.php index d443886..0306553 100755 --- a/catalog/controller/extension/payment/razorpay.php +++ b/catalog/controller/extension/payment/razorpay.php @@ -120,8 +120,9 @@ public function callback() ); $api->utility->verifyPaymentSignature($attributes); - - $this->model_checkout_order->addOrderHistory($merchant_order_id, $this->config->get('payment_razorpay_order_status_id'), 'Payment Successful. Razorpay Payment Id:'.$razorpay_payment_id, true); + if(!$order_info['order_status_id']){ + $this->model_checkout_order->addOrderHistory($merchant_order_id, $this->config->get('payment_razorpay_order_status_id'), 'Payment Successful. Razorpay Payment Id:'.$razorpay_payment_id, true); + } $this->response->redirect($this->url->link('checkout/success', '', true)); } catch(\Razorpay\Api\Errors\SignatureVerificationError $e) From c57f5534d9585977b01ed0189b56b73e072d31f2 Mon Sep 17 00:00:00 2001 From: Naveen Date: Tue, 25 Jan 2022 16:46:22 +0530 Subject: [PATCH 2/4] reject first webhook --- .../controller/extension/payment/razorpay.php | 19 +++++++++++++++++++ .../controller/extension/payment/razorpay.php | 10 +++++++++- catalog/model/extension/payment/razorpay.php | 16 ++++++++++++++++ 3 files changed, 44 insertions(+), 1 deletion(-) diff --git a/admin/controller/extension/payment/razorpay.php b/admin/controller/extension/payment/razorpay.php index 2f710b2..28adc51 100755 --- a/admin/controller/extension/payment/razorpay.php +++ b/admin/controller/extension/payment/razorpay.php @@ -4,6 +4,25 @@ class ControllerExtensionPaymentRazorpay extends Controller { private $error = array(); + public function install() + { + $result = $this->db->query("SHOW COLUMNS FROM " . DB_PREFIX . "order LIKE 'webhook_flag'"); + if($result->num_rows == 0){ + + $sql = "ALTER TABLE `".DB_PREFIX."order` ADD `webhook_flag` INT( 11 ) NOT NULL DEFAULT 0"; + $this->db->query($sql); + } + } + + public function uninstall() { + + $result = $this->db->query("SHOW COLUMNS FROM " . DB_PREFIX . "order LIKE 'webhook_flag'"); + if($result->num_rows > 0){ + $sql = "ALTER TABLE `".DB_PREFIX."order` DROP COLUMN `webhook_flag`"; + $this->db->query($sql); + } + } + public function index() { $this->language->load('extension/payment/razorpay'); diff --git a/catalog/controller/extension/payment/razorpay.php b/catalog/controller/extension/payment/razorpay.php index 0306553..261233f 100755 --- a/catalog/controller/extension/payment/razorpay.php +++ b/catalog/controller/extension/payment/razorpay.php @@ -213,7 +213,15 @@ protected function orderPaid(array $data) $merchant_order_id = $data['payload']['payment']['entity']['notes']['opencart_order_id']; $razorpay_payment_id = $data['payload']['payment']['entity']['id']; if(isset($merchant_order_id) === true) - { + { + $this->load->model('extension/payment/razorpay'); + $order_flag = $this->model_extension_payment_razorpay->getWebhookFlag($merchant_order_id); + if($order_flag == 0){ + $flag = 1; + $this->model_extension_payment_razorpay->setWebhookFlag($merchant_order_id,$flag); + header('Status: 400 ', true, 400); + exit; + } $order_info = $this->model_checkout_order->getOrder($merchant_order_id); if($order_info['payment_code'] === 'razorpay' and diff --git a/catalog/model/extension/payment/razorpay.php b/catalog/model/extension/payment/razorpay.php index 6f117b8..3a7db10 100755 --- a/catalog/model/extension/payment/razorpay.php +++ b/catalog/model/extension/payment/razorpay.php @@ -15,4 +15,20 @@ public function getMethod($address, $total) return $method_data; } + + public function setWebhookFlag($order_id,$flag) { + + $this->db->query("UPDATE " . DB_PREFIX . "order SET webhook_flag = '" . (int)$flag . "' WHERE order_id = '" . (int)$order_id . "'"); + + } + + public function getWebhookFlag($order_id) { + + $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order WHERE order_id = '" . (int)$order_id . "'"); + + if(isset($query->rows[0]['webhook_flag'])){ + return $query->rows[0]['webhook_flag']; + } + + } } From 2ddd96d25db9af380c0eeee59758eb80290e4de6 Mon Sep 17 00:00:00 2001 From: Naveen Date: Tue, 25 Jan 2022 16:48:48 +0530 Subject: [PATCH 3/4] removed condition --- catalog/controller/extension/payment/razorpay.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/catalog/controller/extension/payment/razorpay.php b/catalog/controller/extension/payment/razorpay.php index 261233f..4e39fa1 100755 --- a/catalog/controller/extension/payment/razorpay.php +++ b/catalog/controller/extension/payment/razorpay.php @@ -120,9 +120,7 @@ public function callback() ); $api->utility->verifyPaymentSignature($attributes); - if(!$order_info['order_status_id']){ - $this->model_checkout_order->addOrderHistory($merchant_order_id, $this->config->get('payment_razorpay_order_status_id'), 'Payment Successful. Razorpay Payment Id:'.$razorpay_payment_id, true); - } + $this->model_checkout_order->addOrderHistory($merchant_order_id, $this->config->get('payment_razorpay_order_status_id'), 'Payment Successful. Razorpay Payment Id:'.$razorpay_payment_id, true); $this->response->redirect($this->url->link('checkout/success', '', true)); } catch(\Razorpay\Api\Errors\SignatureVerificationError $e) From c3f8a1e738b44bf747f00a54a802325b8dde30e2 Mon Sep 17 00:00:00 2001 From: Naveen Date: Thu, 27 Jan 2022 13:02:38 +0530 Subject: [PATCH 4/4] comment changes --- .../controller/extension/payment/razorpay.php | 20 ++++++---------- admin/model/extension/payment/razorpay.php | 23 +++++++++++++++++++ catalog/model/extension/payment/razorpay.php | 6 ++--- 3 files changed, 33 insertions(+), 16 deletions(-) create mode 100755 admin/model/extension/payment/razorpay.php diff --git a/admin/controller/extension/payment/razorpay.php b/admin/controller/extension/payment/razorpay.php index 28adc51..abdbfd3 100755 --- a/admin/controller/extension/payment/razorpay.php +++ b/admin/controller/extension/payment/razorpay.php @@ -6,23 +6,17 @@ class ControllerExtensionPaymentRazorpay extends Controller public function install() { - $result = $this->db->query("SHOW COLUMNS FROM " . DB_PREFIX . "order LIKE 'webhook_flag'"); - if($result->num_rows == 0){ - - $sql = "ALTER TABLE `".DB_PREFIX."order` ADD `webhook_flag` INT( 11 ) NOT NULL DEFAULT 0"; - $this->db->query($sql); - } + $this->load->model('extension/payment/razorpay'); + $this->model_extension_payment_razorpay->addWebhookColumn(); } public function uninstall() { - - $result = $this->db->query("SHOW COLUMNS FROM " . DB_PREFIX . "order LIKE 'webhook_flag'"); - if($result->num_rows > 0){ - $sql = "ALTER TABLE `".DB_PREFIX."order` DROP COLUMN `webhook_flag`"; - $this->db->query($sql); - } + + $this->load->model('extension/payment/razorpay'); + $this->model_extension_payment_razorpay->removeWebhookColumn(); + } - + public function index() { $this->language->load('extension/payment/razorpay'); diff --git a/admin/model/extension/payment/razorpay.php b/admin/model/extension/payment/razorpay.php new file mode 100755 index 0000000..d4c4149 --- /dev/null +++ b/admin/model/extension/payment/razorpay.php @@ -0,0 +1,23 @@ +db->query("SHOW COLUMNS FROM " . DB_PREFIX . "order LIKE 'razorpay_webhook_count'"); + if($result->num_rows == 0){ + + $sql = "ALTER TABLE `".DB_PREFIX."order` ADD `razorpay_webhook_count` INT( 11 ) NOT NULL DEFAULT 0"; + $this->db->query($sql); + } + } + + public function removeWebhookColumn(){ + + $result = $this->db->query("SHOW COLUMNS FROM " . DB_PREFIX . "order LIKE 'razorpay_webhook_count'"); + if($result->num_rows > 0){ + $sql = "ALTER TABLE `".DB_PREFIX."order` DROP COLUMN `razorpay_webhook_count`"; + $this->db->query($sql); + } + } +} \ No newline at end of file diff --git a/catalog/model/extension/payment/razorpay.php b/catalog/model/extension/payment/razorpay.php index 3a7db10..2b19b62 100755 --- a/catalog/model/extension/payment/razorpay.php +++ b/catalog/model/extension/payment/razorpay.php @@ -18,7 +18,7 @@ public function getMethod($address, $total) public function setWebhookFlag($order_id,$flag) { - $this->db->query("UPDATE " . DB_PREFIX . "order SET webhook_flag = '" . (int)$flag . "' WHERE order_id = '" . (int)$order_id . "'"); + $this->db->query("UPDATE " . DB_PREFIX . "order SET razorpay_webhook_count = '" . (int)$flag . "' WHERE order_id = '" . (int)$order_id . "'"); } @@ -26,8 +26,8 @@ public function getWebhookFlag($order_id) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order WHERE order_id = '" . (int)$order_id . "'"); - if(isset($query->rows[0]['webhook_flag'])){ - return $query->rows[0]['webhook_flag']; + if(isset($query->rows[0]['razorpay_webhook_count'])){ + return $query->rows[0]['razorpay_webhook_count']; } }