def capture_payment(razorpay_payment_id=None,
                    is_sandbox=False,
                    sanbox_response=None):
    """
		Verifies the purchase as complete by the merchant.
		After capture, the amount is transferred to the merchant within T+3 days
		where T is the day on which payment is captured.

		Note: Attempting to capture a payment whose status is not authorized will produce an error.
	"""
    settings = get_razorpay_settings()

    filters = {"status": "Authorized"}

    if is_sandbox:
        filters.update({"razorpay_payment_id": razorpay_payment_id})

    for doc in dataent.get_all("Razorpay Payment",
                               filters=filters,
                               fields=["name", "data"]):

        try:
            if is_sandbox and sanbox_response:
                resp = sanbox_response

            else:
                resp = post_request(
                    "https://api.razorpay.com/v1/payments/{0}/capture".format(
                        doc.name),
                    data={"amount": json.loads(doc.data).get("amount")},
                    auth=dataent._dict({
                        "api_key": settings.api_key,
                        "api_secret": settings.api_secret
                    }))

            if resp.get("status") == "captured":
                dataent.db.set_value("Razorpay Payment", doc.name, "status",
                                     "Captured")

        except AuthenticationError, e:
            make_log_entry(
                e.message,
                json.dumps({
                    "api_key": settings.api_key,
                    "api_secret": settings.api_secret,
                    "doc_name": doc.name,
                    "status": doc.status
                }))

        except InvalidRequest, e:
            make_log_entry(
                e.message,
                json.dumps({
                    "api_key": settings.api_key,
                    "api_secret": settings.api_secret,
                    "doc_name": doc.name,
                    "status": doc.status
                }))
def capture_payment(razorpay_payment_id=None, is_sandbox=False, sanbox_response=None):
	"""
		Verifies the purchase as complete by the merchant.
		After capture, the amount is transferred to the merchant within T+3 days
		where T is the day on which payment is captured.

		Note: Attempting to capture a payment whose status is not authorized will produce an error.
	"""
	settings = get_razorpay_settings()

	filters = {"status": "Authorized"}

	if is_sandbox:
		filters.update({
			"razorpay_payment_id": razorpay_payment_id
		})

	for doc in frappe.get_all("Razorpay Payment", filters=filters,
		fields=["name", "data"]):

		try:
			if is_sandbox and sanbox_response:
				resp = sanbox_response

			else:
				resp = post_request("https://api.razorpay.com/v1/payments/{0}/capture".format(doc.name),
					data={"amount": json.loads(doc.data).get("amount")},
					auth=frappe._dict({"api_key": settings.api_key, "api_secret": settings.api_secret}))

			if resp.get("status") == "captured":
				frappe.db.set_value("Razorpay Payment", doc.name, "status", "Captured")

		except AuthenticationError, e:
			make_log_entry(e.message, json.dumps({"api_key": settings.api_key, "api_secret": settings.api_secret,
				"doc_name": doc.name, "status": doc.status}))

		except InvalidRequest, e:
			make_log_entry(e.message, json.dumps({"api_key": settings.api_key, "api_secret": settings.api_secret,
				"doc_name": doc.name, "status": doc.status}))
Example #3
0
def make_payment(razorpay_payment_id, options, reference_doctype,
                 reference_docname):
    try:
        razorpay_payment = frappe.get_doc({
            "doctype":
            "Razorpay Payment",
            "razorpay_payment_id":
            razorpay_payment_id,
            "data":
            options,
            "reference_doctype":
            reference_doctype,
            "reference_docname":
            reference_docname
        })

        razorpay_payment.insert(ignore_permissions=True)

        if frappe.db.get_value("Razorpay Payment", razorpay_payment.name,
                               "status") == "Authorized":
            return {
                "redirect_to": razorpay_payment.flags.redirect_to
                or "razorpay-payment-success",
                "status": 200
            }

    except AuthenticationError, e:
        make_log_entry(e.message, options)
        return {
            "redirect_to":
            frappe.redirect_to_message(
                _('Server Error'),
                _("Seems issue with server's razorpay config. Don't worry, in case of failure amount will get refunded to your account."
                  )),
            "status":
            401
        }
def make_payment(razorpay_payment_id, options, reference_doctype, reference_docname):
	try:
		razorpay_payment = frappe.get_doc({
			"doctype": "Razorpay Payment",
			"razorpay_payment_id": razorpay_payment_id,
			"data": options,
			"reference_doctype": reference_doctype,
			"reference_docname": reference_docname
		})

		razorpay_payment.insert(ignore_permissions=True)

		if frappe.db.get_value("Razorpay Payment", razorpay_payment.name, "status") == "Authorized":
			return {
				"redirect_to": razorpay_payment.flags.redirect_to or "razorpay-payment-success",
				"status": 200
			}

	except AuthenticationError, e:
		make_log_entry(e.message, options)
		return{
			"redirect_to": frappe.redirect_to_message(_('Server Error'), _("Seems issue with server's razorpay config. Don't worry, in case of failure amount will get refunded to your account.")),
			"status": 401
		}
		})

		razorpay_payment.insert(ignore_permissions=True)

		if frappe.db.get_value("Razorpay Payment", razorpay_payment.name, "status") == "Authorized":
			return {
				"redirect_to": razorpay_payment.flags.redirect_to or "razorpay-payment-success",
				"status": 200
			}

	except AuthenticationError, e:
		make_log_entry(e.message, options)
		return{
			"redirect_to": frappe.redirect_to_message(_('Server Error'), _("Seems issue with server's razorpay config. Don't worry, in case of failure amount will get refunded to your account.")),
			"status": 401
		}

	except InvalidRequest, e:
		make_log_entry(e.message, options)
		return {
			"redirect_to": frappe.redirect_to_message(_('Server Error'), _("Seems issue with server's razorpay config. Don't worry, in case of failure amount will get refunded to your account.")),
			"status": 400
		}

	except GatewayError, e:
		make_log_entry(e.message, options)
		return {
			"redirect_to": frappe.redirect_to_message(_('Server Error'), _("Seems issue with server's razorpay config. Don't worry, in case of failure amount will get refunded to your account.")),
			"status": 500
		}
        except InvalidRequest, e:
            make_log_entry(
                e.message,
                json.dumps({
                    "api_key": settings.api_key,
                    "api_secret": settings.api_secret,
                    "doc_name": doc.name,
                    "status": doc.status
                }))

        except GatewayError, e:
            make_log_entry(
                e.message,
                json.dumps({
                    "api_key": settings.api_key,
                    "api_secret": settings.api_secret,
                    "doc_name": doc.name,
                    "status": doc.status
                }))


def capture_missing_payments():
    settings = get_razorpay_settings()

    resp = get_request("https://api.razorpay.com/v1/payments",
                       auth=dataent._dict({
                           "api_key": settings.api_key,
                           "api_secret": settings.api_secret
                       }))

    for payment in resp.get("items"):
		})

		razorpay_payment.insert(ignore_permissions=True)

		if dataent.db.get_value("Razorpay Payment", razorpay_payment.name, "status") == "Authorized":
			return {
				"redirect_to": razorpay_payment.flags.redirect_to or "razorpay-payment-success",
				"status": 200
			}

	except AuthenticationError, e:
		make_log_entry(e.message, options)
		return{
			"redirect_to": dataent.redirect_to_message(_('Server Error'), _("Seems issue with server's razorpay config. Don't worry, in case of failure amount will get refunded to your account.")),
			"status": 401
		}

	except InvalidRequest, e:
		make_log_entry(e.message, options)
		return {
			"redirect_to": dataent.redirect_to_message(_('Server Error'), _("Seems issue with server's razorpay config. Don't worry, in case of failure amount will get refunded to your account.")),
			"status": 400
		}

	except GatewayError, e:
		make_log_entry(e.message, options)
		return {
			"redirect_to": dataent.redirect_to_message(_('Server Error'), _("Seems issue with server's razorpay config. Don't worry, in case of failure amount will get refunded to your account.")),
			"status": 500
		}
					data={"amount": json.loads(doc.data).get("amount")},
					auth=frappe._dict({"api_key": settings.api_key, "api_secret": settings.api_secret}))

			if resp.get("status") == "captured":
				frappe.db.set_value("Razorpay Payment", doc.name, "status", "Captured")

		except AuthenticationError, e:
			make_log_entry(e.message, json.dumps({"api_key": settings.api_key, "api_secret": settings.api_secret,
				"doc_name": doc.name, "status": doc.status}))

		except InvalidRequest, e:
			make_log_entry(e.message, json.dumps({"api_key": settings.api_key, "api_secret": settings.api_secret,
				"doc_name": doc.name, "status": doc.status}))

		except GatewayError, e:
			make_log_entry(e.message, json.dumps({"api_key": settings.api_key, "api_secret": settings.api_secret,
				"doc_name": doc.name, "status": doc.status}))

def capture_missing_payments():
	settings = get_razorpay_settings()

	resp = get_request("https://api.razorpay.com/v1/payments",
		auth=frappe._dict({"api_key": settings.api_key, "api_secret": settings.api_secret}))

	for payment in resp.get("items"):
		if payment.get("status") == "authorized" and not frappe.db.exists("Razorpay Payment", payment.get("id")):
			razorpay_payment = frappe.get_doc({
				"doctype": "Razorpay Payment",
				"razorpay_payment_id": payment.get("id"),
				"data": {
					"amount": payment["amount"],
					"description": payment["description"],