diff --git a/payments/payment_gateways/doctype/razorpay_settings/razorpay_settings.py b/payments/payment_gateways/doctype/razorpay_settings/razorpay_settings.py index 9a79ef9..a7da7c4 100644 --- a/payments/payment_gateways/doctype/razorpay_settings/razorpay_settings.py +++ b/payments/payment_gateways/doctype/razorpay_settings/razorpay_settings.py @@ -83,13 +83,15 @@ class RazorpaySettings(Document): frappe.throw(_("Please select another payment method. Razorpay does not support transactions in currency '{0}'").format(currency)) def get_payment_url(self, **kwargs): - return get_url("./integrations/razorpay_checkout?{0}".format(urlencode(kwargs))) + integration_request = create_request_log(kwargs, "Host", "Razorpay") + return get_url("./integrations/razorpay_checkout?token={0}".format(integration_request.name)) def create_request(self, data): self.data = frappe._dict(data) try: - self.integration_request = create_request_log(self.data, "Host", "Razorpay") + self.integration_request = frappe.get_doc("Integration Request", self.data.token) + self.integration_request.update_status(self.data, 'Queued') return self.authorize_payment() except Exception: diff --git a/payments/templates/includes/razorpay_checkout.js b/payments/templates/includes/razorpay_checkout.js index 6ab5501..07bdcd9 100644 --- a/payments/templates/includes/razorpay_checkout.js +++ b/payments/templates/includes/razorpay_checkout.js @@ -6,7 +6,7 @@ $(document).ready(function(){ "name": "{{ title }}", "description": "{{ description }}", "handler": function (response){ - razorpay.make_payment_log(response, options, "{{ reference_doctype }}", "{{ reference_docname }}"); + razorpay.make_payment_log(response, options, "{{ reference_doctype }}", "{{ reference_docname }}", "{{ token }}"); }, "prefill": { "name": "{{ payer_name }}", @@ -24,7 +24,7 @@ $(document).ready(function(){ frappe.provide('razorpay'); -razorpay.make_payment_log = function(response, options, doctype, docname){ +razorpay.make_payment_log = function(response, options, doctype, docname, token){ $('.razorpay-loading').addClass('hidden'); $('.razorpay-confirming').removeClass('hidden'); @@ -36,7 +36,8 @@ razorpay.make_payment_log = function(response, options, doctype, docname){ "razorpay_payment_id": response.razorpay_payment_id, "options": options, "reference_doctype": doctype, - "reference_docname": docname + "reference_docname": docname, + "token": token }, callback: function(r){ if (r.message && r.message.status == 200) { diff --git a/payments/templates/pages/razorpay_checkout.py b/payments/templates/pages/razorpay_checkout.py index 3af552d..1d988e9 100644 --- a/payments/templates/pages/razorpay_checkout.py +++ b/payments/templates/pages/razorpay_checkout.py @@ -17,15 +17,21 @@ def get_context(context): context.no_cache = 1 context.api_key = get_api_key() - # all these keys exist in form_dict - if not (set(expected_keys) - set(frappe.form_dict.keys())): + try: + doc = frappe.get_doc("Integration Request", frappe.form_dict['token']) + payment_details = json.loads(doc.data) + for key in expected_keys: - context[key] = frappe.form_dict[key] + context[key] = payment_details[key] + context['token'] = frappe.form_dict['token'] context['amount'] = flt(context['amount']) - else: - frappe.redirect_to_message(_('Some information is missing'), _('Looks like someone sent you to an incomplete URL. Please ask them to look into it.')) + except Exception: + frappe.redirect_to_message(_('Invalid Token'), + _('Seems token you are using is invalid!'), + http_status_code=400, indicator_color='red') + frappe.local.flags.redirect_location = frappe.local.response.location raise frappe.Redirect @@ -37,7 +43,7 @@ def get_api_key(): return api_key @frappe.whitelist(allow_guest=True) -def make_payment(razorpay_payment_id, options, reference_doctype, reference_docname): +def make_payment(razorpay_payment_id, options, reference_doctype, reference_docname, token): data = {} if isinstance(options, string_types): @@ -46,7 +52,8 @@ def make_payment(razorpay_payment_id, options, reference_doctype, reference_docn data.update({ "razorpay_payment_id": razorpay_payment_id, "reference_docname": reference_docname, - "reference_doctype": reference_doctype + "reference_doctype": reference_doctype, + "token": token }) data = frappe.get_doc("Razorpay Settings").create_request(data)