Beispiel #1
0
def get_account_balance(request_payload):
    """Call account balance API to send the request to the Mpesa Servers."""
    try:
        mpesa_settings = frappe.get_doc(
            "Mpesa Settings", request_payload.get("reference_docname"))
        env = "production" if not mpesa_settings.sandbox else "sandbox"
        connector = MpesaConnector(
            env=env,
            app_key=mpesa_settings.consumer_key,
            app_secret=mpesa_settings.get_password("consumer_secret"))

        callback_url = get_request_site_address(
            True
        ) + "/api/method/erpnext.erpnext_integrations.doctype.mpesa_settings.mpesa_settings.process_balance_info"

        response = connector.get_balance(mpesa_settings.initiator_name,
                                         mpesa_settings.security_credential,
                                         mpesa_settings.till_number, 4,
                                         mpesa_settings.name, callback_url,
                                         callback_url)
        return response
    except Exception:
        frappe.log_error(title=_("Account Balance Processing Error"))
        frappe.throw(_("Please check your configuration and try again"),
                     title=_("Error"))
Beispiel #2
0
def generate_stk_push(**kwargs):
	"""Generate stk push by making a API call to the stk push API."""
	args = frappe._dict(kwargs)
	try:
		callback_url = get_request_site_address(True) + "/api/method/erpnext.erpnext_integrations.doctype.mpesa_settings.mpesa_settings.verify_transaction"

		mpesa_settings = frappe.get_doc("Mpesa Settings", args.payment_gateway[6:])
		env = "production" if not mpesa_settings.sandbox else "sandbox"
		# for sandbox, business shortcode is same as till number
		business_shortcode = mpesa_settings.business_shortcode if env == "production" else mpesa_settings.till_number

		connector = MpesaConnector(env=env,
			app_key=mpesa_settings.consumer_key,
			app_secret=mpesa_settings.get_password("consumer_secret"))

		mobile_number = sanitize_mobile_number(args.sender)

		response = connector.stk_push(
			business_shortcode=business_shortcode, amount=args.request_amount,
			passcode=mpesa_settings.get_password("online_passkey"),
			callback_url=callback_url, reference_code=mpesa_settings.till_number,
			phone_number=mobile_number, description="POS Payment"
		)

		return response

	except Exception:
		frappe.log_error(title=_("Mpesa Express Transaction Error"))
		frappe.throw(_("Issue detected with Mpesa configuration, check the error logs for more details"), title=_("Mpesa Express Error"))