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)
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 })
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)
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)
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
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
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()
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()
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)
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
def validate_transaction_currency(self, currency): for gateway in self.gateways: controller = get_integration_controller(gateway.service) controller.validate_transaction_currency(currency)