From 1fa973633506cf968ad491b069c50b12c664bf31 Mon Sep 17 00:00:00 2001 From: Saurabh Date: Tue, 21 May 2019 16:27:07 +0530 Subject: [PATCH 1/2] fix: check payment status before capturing the payment --- .../doctype/razorpay_settings/razorpay_settings.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/payments/payment_gateways/doctype/razorpay_settings/razorpay_settings.py b/payments/payment_gateways/doctype/razorpay_settings/razorpay_settings.py index cb66ed7..98b6a0b 100644 --- a/payments/payment_gateways/doctype/razorpay_settings/razorpay_settings.py +++ b/payments/payment_gateways/doctype/razorpay_settings/razorpay_settings.py @@ -312,9 +312,13 @@ def capture_payment(is_sandbox=False, sanbox_response=None): data = json.loads(doc.data) settings = controller.get_settings(data) - resp = make_post_request("https://api.razorpay.com/v1/payments/{0}/capture".format(data.get("razorpay_payment_id")), + resp = make_get_request("https://api.razorpay.com/v1/payments/{0}".format(data.get("razorpay_payment_id")), auth=(settings.api_key, settings.api_secret), data={"amount": data.get("amount")}) + if resp.get('status') == "authorized": + resp = make_post_request("https://api.razorpay.com/v1/payments/{0}/capture".format(data.get("razorpay_payment_id")), + auth=(settings.api_key, settings.api_secret), data={"amount": data.get("amount")}) + if resp.get("status") == "captured": frappe.db.set_value("Integration Request", doc.name, "status", "Completed") From d982d1305dc1de7f256ad5bbef6d3704f93f7042 Mon Sep 17 00:00:00 2001 From: Saurabh Date: Mon, 3 Jun 2019 12:11:17 +0530 Subject: [PATCH 2/2] fix(paypal): Ignore if profile is already cancelled (#7622) * fix: ignore if profile already in cancelled state * Update frappe/integrations/doctype/paypal_settings/paypal_settings.py grammar fixes Co-Authored-By: Suraj Shetty --- .../doctype/paypal_settings/paypal_settings.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/payments/payment_gateways/doctype/paypal_settings/paypal_settings.py b/payments/payment_gateways/doctype/paypal_settings/paypal_settings.py index 62e0555..a102a63 100644 --- a/payments/payment_gateways/doctype/paypal_settings/paypal_settings.py +++ b/payments/payment_gateways/doctype/paypal_settings/paypal_settings.py @@ -351,7 +351,7 @@ def update_integration_request_status(token, data, status, error=False, doc=None def get_redirect_uri(doc, token, payerid): data = json.loads(doc.data) - + if data.get("subscription_details") or data.get("subscription_id"): return get_url("{0}.create_recurring_profile?token={1}&payerid={2}".format(api_path, token, payerid)) else: @@ -366,7 +366,11 @@ def manage_recurring_payment_profile_status(profile_id, action, args, url): response = make_post_request(url, data=args) - if response.get("ACK")[0] != "Success": + # error code 11556 indicates profile is not in active state(or already cancelled) + # thus could not cancel the subscription. + # thus raise an exception only if the error code is not equal to 11556 + + if response.get("ACK")[0] != "Success" and response.get("L_ERRORCODE0", [])[0] != '11556': frappe.throw(_("Failed while amending subscription")) @frappe.whitelist(allow_guest=True)