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)
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)