def capture_missing_payments():
    settings = get_iyzipay_settings()

    resp = get_request("https://api.iyzipay.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(
                "Iyzipay Payment", payment.get("id")):
            iyzipay_payment = frappe.get_doc({
                "doctype":
                "Iyzipay Payment",
                "iyzipay_payment_id":
                payment.get("id"),
                "data": {
                    "amount": payment["amount"],
                    "description": payment["description"],
                    "email": payment["email"],
                    "contact": payment["contact"],
                    "payment_request": payment["notes"]["payment_request"],
                    "reference_doctype": payment["notes"]["reference_doctype"],
                    "reference_docname": payment["notes"]["reference_docname"]
                },
                "status":
                "Authorized",
                "reference_doctype":
                "Payment Request",
                "reference_docname":
                payment["notes"]["payment_request"]
            })

            iyzipay_payment.insert(ignore_permissions=True)
def authorise_payment():
    settings = get_iyzipay_settings()
    for doc in frappe.get_all(
            "Iyzipay Payment",
            filters={"status": "Created"},
            fields=["name", "data", "reference_doctype", "reference_docname"]):

        confirm_payment(doc, settings.api_key, settings.api_secret)
        set_redirect(doc)
Example #3
0
def validate_iyzipay_credentials(doc=None, method=None, iyzipay_settings=None):
	if not iyzipay_settings:
		iyzipay_settings = get_iyzipay_settings()

	try:
		get_request(url="https://api.iyzipay.com/v1/payments", auth=frappe._dict({
			"api_key": iyzipay_settings.api_key,
			"api_secret": iyzipay_settings.api_secret
		}))
	except AuthenticationError as e:
		frappe.throw(_(e.message))
def get_context(context):
    context.no_cache = 1
    context.api_key = get_iyzipay_settings().api_key

    context.brand_image = (frappe.db.get_value("Iyzipay Settings", None,
                                               "brand_image")
                           or './assets/erpnext/images/erp-icon.svg')

    if frappe.form_dict.payment_request:
        payment_req = frappe.get_doc('Payment Request',
                                     frappe.form_dict.payment_request)
        validate_transaction_currency(payment_req.currency)

        if payment_req.status == "Paid":
            frappe.redirect_to_message(
                _('Already Paid'), _('You have already paid for this order'))
            return

        reference_doc = frappe.get_doc(payment_req.reference_doctype,
                                       payment_req.reference_name)

        context.amount = payment_req.grand_total
        context.title = reference_doc.company
        context.description = payment_req.subject
        context.doctype = payment_req.doctype
        context.name = payment_req.name
        context.payer_name = reference_doc.customer_name
        context.payer_email = reference_doc.get(
            'email_to') or frappe.session.user
        context.order_id = payment_req.name
        context.reference_doctype = payment_req.reference_doctype
        context.reference_name = payment_req.reference_name

    # all these keys exist in form_dict
    elif not (set(expected_keys) - set(frappe.form_dict.keys())):
        for key in expected_keys:
            context[key] = frappe.form_dict[key]

        context['amount'] = flt(context['amount'])
        context['reference_doctype'] = context['reference_name'] = None

    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.'
              ))
        frappe.local.flags.redirect_location = frappe.local.response.location
        raise frappe.Redirect
def capture_payment(iyzipay_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_iyzipay_settings()

    filters = {"status": "Authorized"}

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

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

        try:
            if is_sandbox and sanbox_response:
                resp = sanbox_response

            else:
                resp = post_request(
                    "https://api.iyzipay.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("Iyzipay Payment", doc.name, "status",
                                    "Captured")

        except AuthenticationError as 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 as 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 as 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 on_update(self):
     settings = get_iyzipay_settings()
     if self.status != "Authorized":
         confirm_payment(self, settings.api_key, settings.api_secret,
                         self.flags.is_sandbox)
     set_redirect(self)