From 783370fc7e75109aab06d6926880dd5aebcea554 Mon Sep 17 00:00:00 2001 From: Razorpay Date: Tue, 5 Mar 2024 18:23:57 +0530 Subject: [PATCH 1/7] PLUG-2404 cron for webhook --- admin/model/extension/payment/razorpay.php | 13 +++++++ .../controller/extension/payment/razorpay.php | 39 ++++++++----------- catalog/model/extension/payment/razorpay.php | 38 ++++++++++++++++++ 3 files changed, 68 insertions(+), 22 deletions(-) diff --git a/admin/model/extension/payment/razorpay.php b/admin/model/extension/payment/razorpay.php index d9da7a3..5b12d4b 100644 --- a/admin/model/extension/payment/razorpay.php +++ b/admin/model/extension/payment/razorpay.php @@ -60,6 +60,19 @@ public function createTables() PRIMARY KEY (`entity_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;" ); + + $this->db->query( + "CREATE TABLE IF NOT EXISTS `".DB_PREFIX."rzp_webhook_triggers` ( + `entity_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `order_id` int(11) NOT NULL, + `rzp_order_id` varchar(25) NOT NULL, + `rzp_payment_id` varchar(25), + `rzp_webhook_data` text, + `rzp_webhook_notified_at` varchar(30), + `rzp_update_order_cron_status` int(11) DEFAULT 0, + PRIMARY KEY (`entity_id`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8;" + ); } public function dropTables() diff --git a/catalog/controller/extension/payment/razorpay.php b/catalog/controller/extension/payment/razorpay.php index d39e2d1..1d43e7f 100755 --- a/catalog/controller/extension/payment/razorpay.php +++ b/catalog/controller/extension/payment/razorpay.php @@ -43,6 +43,7 @@ public function index() $data['is_recurring'] = "false"; $this->load->model('checkout/order'); + $this->load->model('extension/payment/razorpay'); $order_info = $this->model_checkout_order->getOrder($this->session->data['order_id']); @@ -58,8 +59,6 @@ public function index() if ($this->cart->hasRecurringProducts() and $this->config->get('payment_razorpay_subscription_status')) { - $this->load->model('extension/payment/razorpay'); - //validate for non-subscription product and if recurring is product for more than 1 $this->validate_non_recurring_products(); @@ -132,6 +131,7 @@ public function index() $this->session->data["razorpay_order_amount"] = $order_data["amount"]; $this->session->data["razorpay_order_id_" . $this->session->data['order_id']] = $razorpay_order['id']; $data['razorpay_order_id'] = $this->session->data["razorpay_order_id_" . $this->session->data['order_id']]; + $this->model_extension_payment_razorpay->addOrderForWebhook($this->session->data['order_id'], $razorpay_order['id'],0); $this->log->write("RZP orderID (:" . $razorpay_order['id'] . ") created for Opencart OrderID (:" . $this->session->data['order_id'] . ")"); } @@ -335,6 +335,7 @@ public function callback() $order_info['order_status_id'] === '0') { $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_extension_payment_razorpay->updateOrderForWebhook($merchant_order_id, $razorpay_order_id, $razorpay_payment_id, $this->config->get('payment_razorpay_order_status_id')); } $this->response->redirect($this->url->link('checkout/success', '', true)); } @@ -403,28 +404,22 @@ public function webhook() return; } - switch ($data['event']) - { - case self::PAYMENT_AUTHORIZED: - return $this->paymentAuthorized($data); - - case self::PAYMENT_FAILED: - return $this->paymentFailed($data); + $webhookFilteredData = [ + "id" => $data['payload']['payment']['entity']['id'] + "event" => $data['event'], + "opencart_order_id" => $data['payload']['payment']['entity']['notes']['opencart_order_id'] + ]; - case self::ORDER_PAID: - return $this->orderPaid($data); - - case self::SUBSCRIPTION_PAUSED: - case self::SUBSCRIPTION_RESUMED: - case self::SUBSCRIPTION_CANCELLED: - return $this->updateOcSubscriptionStatus($data); - - case self::SUBSCRIPTION_CHARGED: - return $this->processSubscriptionCharged($data); - - default: - return; + if ($data['event'] === self::ORDER_PAID) + { + $webhookFilteredData['invoice_id'] = ['payload']['payment']['entity']['invoice_id']; } + + $this->model_extension_payment_razorpay->addWebhookEvent( + $data['payload']['payment']['entity']['notes']['opencart_order_id'], + $data['payload']['payment']['entity']['order_id'], + $webhookFilteredData + ); } } } diff --git a/catalog/model/extension/payment/razorpay.php b/catalog/model/extension/payment/razorpay.php index 804bd60..c87aa4a 100755 --- a/catalog/model/extension/payment/razorpay.php +++ b/catalog/model/extension/payment/razorpay.php @@ -374,4 +374,42 @@ public function addOCRecurringTransaction($orderRecurringId, $subscriptionId, $a $this->rzpPdo->bindParam(':amount', (float)$amount); $this->rzpPdo->execute(); } + + public function addOrderForWebhook($orderId, $rzpOrderId, $razorpayOrderStatusCron = 0) + { + $this->rzpPdo->prepare("INSERT INTO `" . DB_PREFIX . "rzp_webhook_triggers` SET order_id=:order_id, rzp_order_id=:rzp_order_id, rzp_webhook_data=:rzp_webhook_data, rzp_update_order_cron_status=:rzp_update_order_cron_status"); + $this->rzpPdo->bindParam(':order_id', (int)$orderId); + $this->rzpPdo->bindParam(':rzp_order_id', $this->db->escape($rzpOrderId)); + $this->rzpPdo->bindParam(':rzp_webhook_data', '[]'); + $this->rzpPdo->bindParam(':rzp_update_order_cron_status', $razorpayOrderStatusCron); + $this->rzpPdo->execute(); + } + + public function updateOrderForWebhook($orderId, $rzpOrderId, $rzpPaymentId = null, $rzpUpdateOrderCronStatus) + { + $this->rzpPdo->prepare("UPDATE " . DB_PREFIX . "rzp_webhook_triggers SET rzp_payment_id=:rzp_payment_id, rzp_update_order_cron_status=:rzp_update_order_cron_status WHERE order_id=:order_id AND rzp_order_id=:rzp_order_id"); + $this->rzpPdo->bindParam(':rzp_payment_id', $rzpPaymentId); + $this->rzpPdo->bindParam(':rzp_update_order_cron_status', $rzpUpdateOrderCronStatus); + $this->rzpPdo->bindParam(':order_id', (int)$orderId); + $this->rzpPdo->bindParam(':rzp_order_id', $rzpOrderId); + $this->rzpPdo->execute(); + } + + public function addWebhookEvent($orderId, $rzpOrderId, $webhookFilteredData) + { + $this->rzpPdo->prepare("SELECT rzp_webhook_data FROM " . DB_PREFIX . "rzp_webhook_triggers WHERE order_id=:orderId AND rzp_order_id=:rzp_order_id"); + $this->rzpPdo->bindParam(':orderId', (int)$orderId); + $this->rzpPdo->bindParam(':rzp_order_id', $rzpOrderId); + $query = $this->rzpPdo->execute(); + $webhookEvents = $query->row; + + $webhookEvents = array_merge($webhookEvents, $webhookFilteredData); + + $this->rzpPdo->prepare("UPDATE " . DB_PREFIX . "rzp_webhook_triggers SET rzp_webhook_data=:rzp_webhook_data, rzp_webhook_notified_at=:rzp_webhook_notified_at WHERE order_id=:order_id AND rzp_order_id=:rzp_order_id"); + $this->rzpPdo->bindParam(':rzp_webhook_data', $webhookEvents); + $this->rzpPdo->bindParam(':rzp_webhook_notified_at', time()); + $this->rzpPdo->bindParam(':order_id', (int)$orderId); + $this->rzpPdo->bindParam(':rzp_order_id', $rzpOrderId); + $this->rzpPdo->execute(); + } } From b0dec70a6822628c41c1c54cabd0d13493cbfba6 Mon Sep 17 00:00:00 2001 From: Razorpay Date: Fri, 8 Mar 2024 18:40:05 +0530 Subject: [PATCH 2/7] added cron for payment.authorized and order.paid --- admin/model/extension/payment/razorpay.php | 1 - .../controller/extension/payment/razorpay.php | 109 ++++++++++++------ catalog/model/extension/payment/razorpay.php | 20 +++- 3 files changed, 88 insertions(+), 42 deletions(-) diff --git a/admin/model/extension/payment/razorpay.php b/admin/model/extension/payment/razorpay.php index 5b12d4b..52b018a 100644 --- a/admin/model/extension/payment/razorpay.php +++ b/admin/model/extension/payment/razorpay.php @@ -66,7 +66,6 @@ public function createTables() `entity_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, `order_id` int(11) NOT NULL, `rzp_order_id` varchar(25) NOT NULL, - `rzp_payment_id` varchar(25), `rzp_webhook_data` text, `rzp_webhook_notified_at` varchar(30), `rzp_update_order_cron_status` int(11) DEFAULT 0, diff --git a/catalog/controller/extension/payment/razorpay.php b/catalog/controller/extension/payment/razorpay.php index 1d43e7f..1eef8de 100755 --- a/catalog/controller/extension/payment/razorpay.php +++ b/catalog/controller/extension/payment/razorpay.php @@ -27,7 +27,7 @@ class ControllerExtensionPaymentRazorpay extends Controller ]; // Set RZP plugin version - private $version = '5.1.4'; + private $version = '5.1.5'; private $api; @@ -56,8 +56,8 @@ public function index() try { - if ($this->cart->hasRecurringProducts() and - $this->config->get('payment_razorpay_subscription_status')) + if ($this->cart->hasRecurringProducts() and + $this->config->get('payment_razorpay_subscription_status')) { //validate for non-subscription product and if recurring is product for more than 1 $this->validate_non_recurring_products(); @@ -105,7 +105,7 @@ public function index() ]; $this->model_extension_payment_razorpay->createOCRecurring($recurringData); - + $this->model_extension_payment_razorpay->addOrderForWebhook($this->session->data['order_id'], $subscription_order['id'], 0); $this->log->write("RZP subscriptionID (:" . $subscription_order['id'] . ") created for Opencart OrderID (:" . $this->session->data['order_id'] . ")"); } @@ -123,15 +123,15 @@ public function index() if ((isset($this->session->data["razorpay_order_id_" . $this->session->data['order_id']]) === false) or ((isset($this->session->data["razorpay_order_id_" . $this->session->data['order_id']]) === true) and - (($this->session->data["razorpay_order_amount"] === 0) or - ($this->session->data["razorpay_order_amount"] !== $order_data["amount"])))) + (($this->session->data["razorpay_order_amount"] === 0) or + ($this->session->data["razorpay_order_amount"] !== $order_data["amount"])))) { $razorpay_order = $this->api->order->create($order_data); $this->session->data["razorpay_order_amount"] = $order_data["amount"]; $this->session->data["razorpay_order_id_" . $this->session->data['order_id']] = $razorpay_order['id']; $data['razorpay_order_id'] = $this->session->data["razorpay_order_id_" . $this->session->data['order_id']]; - $this->model_extension_payment_razorpay->addOrderForWebhook($this->session->data['order_id'], $razorpay_order['id'],0); + $this->model_extension_payment_razorpay->addOrderForWebhook($this->session->data['order_id'], $razorpay_order['id'], 0); $this->log->write("RZP orderID (:" . $razorpay_order['id'] . ") created for Opencart OrderID (:" . $this->session->data['order_id'] . ")"); } @@ -329,13 +329,14 @@ public function callback() // Creating OC Recurring Transaction $ocRecurringData = $this->model_extension_payment_razorpay->getOCRecurringStatus($this->session->data['order_id']); $this->model_extension_payment_razorpay->addOCRecurringTransaction($ocRecurringData['order_recurring_id'], $razorpay_subscription_id, $planData['plan_bill_amount'], "success"); + $this->model_extension_payment_razorpay->updateOrderForWebhook($merchant_order_id, $razorpay_subscription_id, $this->config->get('payment_razorpay_order_status_id')); } if ($order_info['payment_code'] === 'razorpay' and $order_info['order_status_id'] === '0') { $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_extension_payment_razorpay->updateOrderForWebhook($merchant_order_id, $razorpay_order_id, $razorpay_payment_id, $this->config->get('payment_razorpay_order_status_id')); + $this->model_extension_payment_razorpay->updateOrderForWebhook($merchant_order_id, $razorpay_order_id, $this->config->get('payment_razorpay_order_status_id')); } $this->response->redirect($this->url->link('checkout/success', '', true)); } @@ -386,6 +387,7 @@ public function webhook() } $this->load->model('checkout/order'); + $this->load->model('extension/payment/razorpay'); $enabled = $this->config->get('payment_razorpay_webhook_status'); if (($enabled === '1') and @@ -405,22 +407,42 @@ public function webhook() } $webhookFilteredData = [ - "id" => $data['payload']['payment']['entity']['id'] + "id" => $data['payload']['payment']['entity']['id'], "event" => $data['event'], "opencart_order_id" => $data['payload']['payment']['entity']['notes']['opencart_order_id'] ]; if ($data['event'] === self::ORDER_PAID) { - $webhookFilteredData['invoice_id'] = ['payload']['payment']['entity']['invoice_id']; + $webhookFilteredData['invoice_id'] = $data['payload']['payment']['entity']['invoice_id']; + sleep(3); } + if (in_array($data['event'], [self::ORDER_PAID, self::PAYMENT_AUTHORIZED]) + { $this->model_extension_payment_razorpay->addWebhookEvent( $data['payload']['payment']['entity']['notes']['opencart_order_id'], $data['payload']['payment']['entity']['order_id'], $webhookFilteredData ); } + else + { + switch ($data['event']) + { + case self::PAYMENT_FAILED: + return $this->paymentFailed($data); + case self::SUBSCRIPTION_PAUSED: + case self::SUBSCRIPTION_RESUMED: + case self::SUBSCRIPTION_CANCELLED: + return $this->updateOcSubscriptionStatus($data); + case self::SUBSCRIPTION_CHARGED: + return $this->processSubscriptionCharged($data); + default: + return; + } + } + } } } @@ -430,18 +452,10 @@ public function webhook() */ protected function orderPaid(array $data) { - $payment_created_time = $data['payload']['payment']['entity']['created_at']; - - if (time() < ($payment_created_time + self::WEBHOOK_WAIT_TIME)) - { - header('Status: 409 Webhook conflicts due to early execution.', true, self::HTTP_CONFLICT_STATUS); - return; - } - // Do not process if order is subscription type - if (isset($post['payload']['payment']['entity']['invoice_id']) === true) + if (isset($data['invoice_id']) === true) { - $rzpInvoiceId = $post['payload']['payment']['entity']['invoice_id']; + $rzpInvoiceId = $data['invoice_id']; $invoice = $this->api->invoice->fetch($rzpInvoiceId); if (isset($invoice->subscription_id)) { @@ -450,8 +464,8 @@ protected function orderPaid(array $data) } // reference_no (opencart_order_id) should be passed in payload - $merchant_order_id = $data['payload']['payment']['entity']['notes']['opencart_order_id']; - $razorpay_payment_id = $data['payload']['payment']['entity']['id']; + $merchant_order_id = $data['opencart_order_id']; + $razorpay_payment_id = $data['id']; if (isset($merchant_order_id) === true) { @@ -484,18 +498,10 @@ protected function paymentAuthorized(array $data) { return; } - //verify if we need to consume it as late authorized - $payment_created_time = $data['payload']['payment']['entity']['created_at']; - - if (time() < ($payment_created_time + self::WEBHOOK_WAIT_TIME)) - { - header('Status: 409 Webhook conflicts due to early execution.', true, self::HTTP_CONFLICT_STATUS); - return; - } // reference_no (opencart_order_id) should be passed in payload - $merchant_order_id = $data['payload']['payment']['entity']['notes']['opencart_order_id']; - $razorpay_payment_id = $data['payload']['payment']['entity']['id']; + $merchant_order_id = $data['opencart_order_id']; + $razorpay_payment_id = $data['id']; //update the order if (isset($merchant_order_id) === true) @@ -521,7 +527,6 @@ protected function paymentAuthorized(array $data) 'currency' => $order_info['currency_code'] )); } - //update the order status in store $this->model_checkout_order->addOrderHistory($merchant_order_id, $this->config->get('payment_razorpay_order_status_id'), 'Payment Successful. Razorpay Payment Id:' . $razorpay_payment_id); $this->log->write("order:$merchant_order_id updated by razorpay payment.authorized event"); @@ -909,7 +914,7 @@ public function pause() $subscription_id = 0; } - try + try { $subscriptionData = $this->api->subscription->fetch($subscription_id)->pause(array('pause_at' => 'now')); $this->load->model('extension/payment/razorpay'); @@ -1084,7 +1089,7 @@ protected function processSubscriptionCharged($data) if ($subscription['paid_count'] == 1) { if (in_array($rzpSubscription['status'], ['created', 'authenticated']) and - $rzpSubscription['paid_count'] == 0) + $rzpSubscription['paid_count'] == 0) { $this->model_extension_payment_razorpay->updateSubscription($subscription, $subscriptionId); $this->model_extension_payment_razorpay->updateOCRecurringStatus($merchant_order_id, 1); @@ -1108,9 +1113,41 @@ protected function processSubscriptionCharged($data) $this->model_checkout_order->addOrderHistory($merchant_order_id, $this->config->get('payment_razorpay_order_status_id'), trim("Subscription charged Successfully. Razorpay Payment Id:" . $paymentId)); $this->log->write("Subscription charged webhook event finished for Opencart OrderID (:" . $merchant_order_id . ")"); - + return; } } } + + /** + * executing payment.authorized and order.paid webhook event using cron + */ + public function rzpWebhookCron() + { + $this->load->model('checkout/order'); + $this->load->model('extension/payment/razorpay'); + + $webhookEvents = $this->model_extension_payment_razorpay->getWebhookEvents(self::WEBHOOK_WAIT_TIME); + foreach ($webhookEvents as $row) + { + $events = json_decode($row['rzp_webhook_data']); + $rzpOrderId = $row['rzp_order_id']; + foreach ($events as $event) + { + $event = (array) $event; + switch ($event['event']) + { + case self::PAYMENT_AUTHORIZED: + $this->paymentAuthorized($event); + break; + case self::ORDER_PAID: + $this->orderPaid($event); + break; + default: + return; + } + $this->model_extension_payment_razorpay->updateOrderForWebhook($event['opencart_order_id'], $rzpOrderId, 2); + } + } + } } diff --git a/catalog/model/extension/payment/razorpay.php b/catalog/model/extension/payment/razorpay.php index c87aa4a..c65e1b5 100755 --- a/catalog/model/extension/payment/razorpay.php +++ b/catalog/model/extension/payment/razorpay.php @@ -385,10 +385,9 @@ public function addOrderForWebhook($orderId, $rzpOrderId, $razorpayOrderStatusCr $this->rzpPdo->execute(); } - public function updateOrderForWebhook($orderId, $rzpOrderId, $rzpPaymentId = null, $rzpUpdateOrderCronStatus) + public function updateOrderForWebhook($orderId, $rzpOrderId, $rzpUpdateOrderCronStatus) { - $this->rzpPdo->prepare("UPDATE " . DB_PREFIX . "rzp_webhook_triggers SET rzp_payment_id=:rzp_payment_id, rzp_update_order_cron_status=:rzp_update_order_cron_status WHERE order_id=:order_id AND rzp_order_id=:rzp_order_id"); - $this->rzpPdo->bindParam(':rzp_payment_id', $rzpPaymentId); + $this->rzpPdo->prepare("UPDATE " . DB_PREFIX . "rzp_webhook_triggers SET rzp_update_order_cron_status=:rzp_update_order_cron_status WHERE order_id=:order_id AND rzp_order_id=:rzp_order_id"); $this->rzpPdo->bindParam(':rzp_update_order_cron_status', $rzpUpdateOrderCronStatus); $this->rzpPdo->bindParam(':order_id', (int)$orderId); $this->rzpPdo->bindParam(':rzp_order_id', $rzpOrderId); @@ -403,13 +402,24 @@ public function addWebhookEvent($orderId, $rzpOrderId, $webhookFilteredData) $query = $this->rzpPdo->execute(); $webhookEvents = $query->row; - $webhookEvents = array_merge($webhookEvents, $webhookFilteredData); + $rzpWebhookData = (array) json_decode($webhookEvents['rzp_webhook_data']); + + $rzpWebhookData[] = $webhookFilteredData; $this->rzpPdo->prepare("UPDATE " . DB_PREFIX . "rzp_webhook_triggers SET rzp_webhook_data=:rzp_webhook_data, rzp_webhook_notified_at=:rzp_webhook_notified_at WHERE order_id=:order_id AND rzp_order_id=:rzp_order_id"); - $this->rzpPdo->bindParam(':rzp_webhook_data', $webhookEvents); + $this->rzpPdo->bindParam(':rzp_webhook_data', json_encode($rzpWebhookData)); $this->rzpPdo->bindParam(':rzp_webhook_notified_at', time()); $this->rzpPdo->bindParam(':order_id', (int)$orderId); $this->rzpPdo->bindParam(':rzp_order_id', $rzpOrderId); $this->rzpPdo->execute(); } + + public function getWebhookEvents($webhookWaitTime) + { + $this->rzpPdo->prepare("SELECT rzp_order_id, rzp_webhook_data FROM " . DB_PREFIX . "rzp_webhook_triggers WHERE rzp_webhook_notified_at<:webhook_wait_time AND rzp_update_order_cron_status=:rzp_update_order_cron_status"); + $this->rzpPdo->bindParam(':webhook_wait_time', (string)(time() - $webhookWaitTime)); + $this->rzpPdo->bindParam(':rzp_update_order_cron_status', 0); + $query = $this->rzpPdo->execute(); + return $query->rows; + } } From 78b0290b521a86586fe55166ebc5543ba896c2c3 Mon Sep 17 00:00:00 2001 From: Razorpay Date: Fri, 8 Mar 2024 18:43:26 +0530 Subject: [PATCH 3/7] code alignment --- .../controller/extension/payment/razorpay.php | 37 +++++++++---------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/catalog/controller/extension/payment/razorpay.php b/catalog/controller/extension/payment/razorpay.php index 1eef8de..c23d9f4 100755 --- a/catalog/controller/extension/payment/razorpay.php +++ b/catalog/controller/extension/payment/razorpay.php @@ -406,27 +406,26 @@ public function webhook() return; } - $webhookFilteredData = [ - "id" => $data['payload']['payment']['entity']['id'], - "event" => $data['event'], - "opencart_order_id" => $data['payload']['payment']['entity']['notes']['opencart_order_id'] - ]; - - if ($data['event'] === self::ORDER_PAID) - { - $webhookFilteredData['invoice_id'] = $data['payload']['payment']['entity']['invoice_id']; - sleep(3); - } - if (in_array($data['event'], [self::ORDER_PAID, self::PAYMENT_AUTHORIZED]) { - $this->model_extension_payment_razorpay->addWebhookEvent( - $data['payload']['payment']['entity']['notes']['opencart_order_id'], - $data['payload']['payment']['entity']['order_id'], - $webhookFilteredData - ); - } - else + $webhookFilteredData = [ + "id" => $data['payload']['payment']['entity']['id'], + "event" => $data['event'], + "opencart_order_id" => $data['payload']['payment']['entity']['notes']['opencart_order_id'] + ]; + + if ($data['event'] === self::ORDER_PAID) + { + $webhookFilteredData['invoice_id'] = $data['payload']['payment']['entity']['invoice_id']; + sleep(3); + } + $this->model_extension_payment_razorpay->addWebhookEvent( + $data['payload']['payment']['entity']['notes']['opencart_order_id'], + $data['payload']['payment']['entity']['order_id'], + $webhookFilteredData + ); + } + else { switch ($data['event']) { From 3fb6bb680a52fc1a6023fa06072f08ad3e142eb0 Mon Sep 17 00:00:00 2001 From: Razorpay Date: Mon, 11 Mar 2024 12:33:12 +0530 Subject: [PATCH 4/7] removed subscription handling in order creation and callback --- catalog/controller/extension/payment/razorpay.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/catalog/controller/extension/payment/razorpay.php b/catalog/controller/extension/payment/razorpay.php index c23d9f4..f8281e5 100755 --- a/catalog/controller/extension/payment/razorpay.php +++ b/catalog/controller/extension/payment/razorpay.php @@ -105,7 +105,6 @@ public function index() ]; $this->model_extension_payment_razorpay->createOCRecurring($recurringData); - $this->model_extension_payment_razorpay->addOrderForWebhook($this->session->data['order_id'], $subscription_order['id'], 0); $this->log->write("RZP subscriptionID (:" . $subscription_order['id'] . ") created for Opencart OrderID (:" . $this->session->data['order_id'] . ")"); } @@ -329,7 +328,6 @@ public function callback() // Creating OC Recurring Transaction $ocRecurringData = $this->model_extension_payment_razorpay->getOCRecurringStatus($this->session->data['order_id']); $this->model_extension_payment_razorpay->addOCRecurringTransaction($ocRecurringData['order_recurring_id'], $razorpay_subscription_id, $planData['plan_bill_amount'], "success"); - $this->model_extension_payment_razorpay->updateOrderForWebhook($merchant_order_id, $razorpay_subscription_id, $this->config->get('payment_razorpay_order_status_id')); } if ($order_info['payment_code'] === 'razorpay' and From 6cc84061f9521e91ef1257e914e623d1990c76bd Mon Sep 17 00:00:00 2001 From: Razorpay Date: Mon, 11 Mar 2024 12:43:35 +0530 Subject: [PATCH 5/7] fixed alignment --- catalog/controller/extension/payment/razorpay.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/catalog/controller/extension/payment/razorpay.php b/catalog/controller/extension/payment/razorpay.php index f8281e5..f0cbc08 100755 --- a/catalog/controller/extension/payment/razorpay.php +++ b/catalog/controller/extension/payment/razorpay.php @@ -122,8 +122,8 @@ public function index() if ((isset($this->session->data["razorpay_order_id_" . $this->session->data['order_id']]) === false) or ((isset($this->session->data["razorpay_order_id_" . $this->session->data['order_id']]) === true) and - (($this->session->data["razorpay_order_amount"] === 0) or - ($this->session->data["razorpay_order_amount"] !== $order_data["amount"])))) + (($this->session->data["razorpay_order_amount"] === 0) or + ($this->session->data["razorpay_order_amount"] !== $order_data["amount"])))) { $razorpay_order = $this->api->order->create($order_data); From 2e805f364a1daf77a28f104c72c809765e08fe66 Mon Sep 17 00:00:00 2001 From: Razorpay Date: Mon, 11 Mar 2024 15:06:18 +0530 Subject: [PATCH 6/7] fixed boolean --- catalog/controller/extension/payment/razorpay.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/catalog/controller/extension/payment/razorpay.php b/catalog/controller/extension/payment/razorpay.php index f0cbc08..356f122 100755 --- a/catalog/controller/extension/payment/razorpay.php +++ b/catalog/controller/extension/payment/razorpay.php @@ -404,7 +404,7 @@ public function webhook() return; } - if (in_array($data['event'], [self::ORDER_PAID, self::PAYMENT_AUTHORIZED]) + if (in_array($data['event'], [self::ORDER_PAID, self::PAYMENT_AUTHORIZED]) === true) { $webhookFilteredData = [ "id" => $data['payload']['payment']['entity']['id'], From 7dd1cdf8c6e0b7d1a5a5831609b11661821d27a5 Mon Sep 17 00:00:00 2001 From: Razorpay Date: Mon, 11 Mar 2024 16:03:15 +0530 Subject: [PATCH 7/7] changed webhook wait time --- catalog/controller/extension/payment/razorpay.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/catalog/controller/extension/payment/razorpay.php b/catalog/controller/extension/payment/razorpay.php index 356f122..89941eb 100755 --- a/catalog/controller/extension/payment/razorpay.php +++ b/catalog/controller/extension/payment/razorpay.php @@ -18,7 +18,7 @@ class ControllerExtensionPaymentRazorpay extends Controller const SUBSCRIPTION_RESUMED = 'subscription.resumed'; const SUBSCRIPTION_CANCELLED = 'subscription.cancelled'; const SUBSCRIPTION_CHARGED = 'subscription.charged'; - const WEBHOOK_WAIT_TIME = 30; + const WEBHOOK_WAIT_TIME = 120; const HTTP_CONFLICT_STATUS = 409; const CURRENCY_NOT_ALLOWED = [ 'KWD',