fix: update shopify api version (#22284)

Co-authored-by: Saurabh <saurabh@erpnext.com>
diff --git a/erpnext/erpnext_integrations/doctype/shopify_settings/shopify_settings.py b/erpnext/erpnext_integrations/doctype/shopify_settings/shopify_settings.py
index 64c3b2d..25ffd28 100644
--- a/erpnext/erpnext_integrations/doctype/shopify_settings/shopify_settings.py
+++ b/erpnext/erpnext_integrations/doctype/shopify_settings/shopify_settings.py
@@ -8,6 +8,7 @@
 from frappe import _
 from frappe.model.document import Document
 from frappe.utils import get_request_session
+from requests.exceptions import HTTPError
 from frappe.custom.doctype.custom_field.custom_field import create_custom_fields
 from erpnext.erpnext_integrations.utils import get_webhook_address
 from erpnext.erpnext_integrations.doctype.shopify_log.shopify_log import make_shopify_log
@@ -29,19 +30,24 @@
 		webhooks = ["orders/create", "orders/paid", "orders/fulfilled"]
 		# url = get_shopify_url('admin/webhooks.json', self)
 		created_webhooks = [d.method for d in self.webhooks]
-		url = get_shopify_url('admin/api/2019-04/webhooks.json', self)
+		url = get_shopify_url('admin/api/2020-04/webhooks.json', self)
 		for method in webhooks:
 			session = get_request_session()
 			try:
-				d = session.post(url, data=json.dumps({
+				res = session.post(url, data=json.dumps({
 					"webhook": {
 						"topic": method,
 						"address": get_webhook_address(connector_name='shopify_connection', method='store_request_data'),
 						"format": "json"
 						}
 					}), headers=get_header(self))
-				d.raise_for_status()
-				self.update_webhook_table(method, d.json())
+				res.raise_for_status()
+				self.update_webhook_table(method, res.json())
+
+			except HTTPError as e:
+				error_message = res.json().get('errors', e)
+				make_shopify_log(status="Warning", exception=error_message, rollback=True)
+
 			except Exception as e:
 				make_shopify_log(status="Warning", exception=e, rollback=True)
 
@@ -50,13 +56,18 @@
 		deleted_webhooks = []
 
 		for d in self.webhooks:
-			url = get_shopify_url('admin/api/2019-04/webhooks/{0}.json'.format(d.webhook_id), self)
+			url = get_shopify_url('admin/api/2020-04/webhooks/{0}.json'.format(d.webhook_id), self)
 			try:
 				res = session.delete(url, headers=get_header(self))
 				res.raise_for_status()
 				deleted_webhooks.append(d)
+
+			except HTTPError as e:
+				error_message = res.json().get('errors', e)
+				make_shopify_log(status="Warning", exception=error_message, rollback=True)
+
 			except Exception as e:
-				frappe.log_error(message=frappe.get_traceback(), title=e)
+				frappe.log_error(message=e, title='Shopify Webhooks Issue')
 
 		for d in deleted_webhooks:
 			self.remove(d)
@@ -125,4 +136,3 @@
 	}
 
 	create_custom_fields(custom_fields)
-
diff --git a/erpnext/erpnext_integrations/doctype/shopify_settings/sync_product.py b/erpnext/erpnext_integrations/doctype/shopify_settings/sync_product.py
index bde1011..f9f0bb3 100644
--- a/erpnext/erpnext_integrations/doctype/shopify_settings/sync_product.py
+++ b/erpnext/erpnext_integrations/doctype/shopify_settings/sync_product.py
@@ -8,7 +8,7 @@
 shopify_variants_attr_list = ["option1", "option2", "option3"]
 
 def sync_item_from_shopify(shopify_settings, item):
-	url = get_shopify_url("admin/api/2019-04/products/{0}.json".format(item.get("product_id")), shopify_settings)
+	url = get_shopify_url("admin/api/2020-04/products/{0}.json".format(item.get("product_id")), shopify_settings)
 	session = get_request_session()
 
 	try: