Example #1
0
def get_url_from_gateway(gateway, data):
    """Gets the gateway url when deferring gateways that can not be embeded"""

    if isinstance(data, unicode) or isinstance(data, str):
        data = json.loads(data)

    gateway_selector = get_integration_controller("Gateway Selector")

    for g in gateway_selector.gateways:
        if g.service.replace(' ', '_').lower() == gateway:
            gateway_name = g.service
            break
    else:
        gateway_name = None

    controller = get_integration_controller(gateway_name)

    return controller.get_payment_url(**data)
Example #2
0
	def get_payment_url(self):
		data = frappe.db.get_value(self.reference_doctype, self.reference_name,
			["company", "customer_name"], as_dict=1)
		
		controller = get_integration_controller(self.payment_gateway)
		controller.validate_transaction_currency(self.currency)
		
		return controller.get_payment_url(**{
			"amount": self.grand_total,
			"title": data.company,
			"description": self.subject,
			"reference_doctype": "Payment Request",
			"reference_docname": self.name,
			"payer_email": self.email_to or frappe.session.user,
			"payer_name": data.customer_name,
			"order_id": self.name,
			"currency": self.currency
		})
Example #3
0
    def get_payment_gateway_url(self, doc):
        if self.accept_payment:
            controller = get_integration_controller(self.payment_gateway)

            title = "Payment for {0} {1}".format(doc.doctype, doc.name)

            payment_details = {
                "amount": self.amount,
                "title": title,
                "description": title,
                "reference_doctype": doc.doctype,
                "reference_docname": doc.name,
                "payer_email": frappe.session.user,
                "payer_name": frappe.utils.get_fullname(frappe.session.user),
                "order_id": doc.name,
                "currency": self.currency,
                "redirect_to": frappe.utils.get_url(self.route)
            }

            # Redirect the user to this url
            return controller.get_payment_url(**payment_details)
Example #4
0
	def get_payment_gateway_url(self, doc):
		if self.accept_payment:
			controller = get_integration_controller(self.payment_gateway)

			title = "Payment for {0} {1}".format(doc.doctype, doc.name)

			payment_details = {
				"amount": self.amount,
				"title": title,
				"description": title,
				"reference_doctype": doc.doctype,
				"reference_docname": doc.name,
				"payer_email": frappe.session.user,
				"payer_name": frappe.utils.get_fullname(frappe.session.user),
				"order_id": doc.name,
				"currency": self.currency,
				"redirect_to": frappe.utils.get_url(self.route)
			}

			# Redirect the user to this url
			return controller.get_payment_url(**payment_details)
Example #5
0
def get_gateways(context="{}"):
    """Gets a list of gateways that can be selected and their embedding information"""

    context = json.loads(context)
    gateway_selector = get_integration_controller("Gateway Selector")
    gateways = []
    for gateway in gateway_selector.gateways:
        payload = {
            "name": gateway.service.replace(' ', '_').lower(),
            "data": {
                key: gateway.get(key)
                for key in ['label', 'icon', 'service', 'is_default']
            },
            "is_embedable": is_gateway_embedable(gateway.service)
        }

        if payload["is_embedable"]:
            payload["embed_form"] = get_gateway_embed_form(gateway.service,
                                                           context=context)

        gateways.append(payload)

    return gateways
Example #6
0
	def post(self, action, data, raise_on_empty=False):
		if not isinstance(data, dict):
			raise BioTrackClientError("data must be instance of dict")

		log = {}
		data["action"] = action
		action_data = data.copy()

		data.update({
			"license_number": self.license_number,
			"username": self.username,
			"password": self.password,
			"training": self.is_training,
			"API": self.__API__,
		})

		if action != 'login':
			data["nosession"] = 1

		log["request"] = action_data
		print_log(data, " - Request Data")

		service = get_integration_controller("BioTrack")
		integration_req = service.create_request(log)
		integration_req.action = action
		integration_req.integration_type = "Remote"

		request = get_request_session()

		# catch network errors
		try:
			response = request.post(self.__API_URL__, data=json.dumps(data), headers={'Content-Type': 'application/json'})
		except Exception as e:
			raise BioTrackClientError(e.message)

		response.raise_for_status()
		result = response.json()

		if not action.startswith("sync_"):
			log["response"] = result
			print_log(result, " - Response")
		else:
			log["response"] = {"success": result.get('success')}

		integration_req.data = json.dumps(log)

		if not result.get('success'):
			integration_req.status = 'Failed'
			integration_req.save()
			raise BioTrackClientError(encode(result.get('error')))

		if raise_on_empty and len(result) == 1:
			integration_req.status = 'Failed'
			integration_req.save()

			raise BioTrackEmptyDataError(
				'BioTrackTHC request was response with empty data: {}'.format(json.dumps(action_data))
			)

		integration_req.status = 'Completed'
		integration_req.save()

		return result
Example #7
0
def make_log(action, data=None, status='Completed'):
	service = get_integration_controller("BioTrack")
	integration_req = service.create_request(data)
	integration_req.action = action
	integration_req.status = status
	integration_req.save()
Example #8
0
def make_log(action, data=None, status='Completed'):
    service = get_integration_controller("BioTrack")
    integration_req = service.create_request(data)
    integration_req.action = action
    integration_req.status = status
    integration_req.save()
Example #9
0
def get_gateway_embed_form(name, context={}):
    """Gets the gateway's embedable form information"""

    controller = get_integration_controller(name)
    return controller.get_embed_form(context=context)
Example #10
0
def is_gateway_embedable(name):
    """Returns True if the the gateway supports get_embed_form api"""

    controller = get_integration_controller(name)
    return hasattr(controller, "is_embedable") and controller.is_embedable
Example #11
0
 def validate_transaction_currency(self, currency):
     for gateway in self.gateways:
         controller = get_integration_controller(gateway.service)
         controller.validate_transaction_currency(currency)