Ejemplo n.º 1
0
 def validate_transaction(self, data: dict) -> Transaction:
     transaction = Transaction()
     transaction.id = data['token']
     transaction.meta = data
     if 'resultCode' in data and int(data['resultCode']) == 100:
         transaction.validate_status = True
     return transaction
Ejemplo n.º 2
0
Archivo: dummy.py Proyecto: meyt/payit
 def validate_transaction(self, data: dict) -> Transaction:
     transaction = Transaction()
     transaction.id = data["id"]
     transaction.meta = data
     transaction.validate_status = data.get("validateStatus", True)
     print("Transaction validated: \n%s" % transaction.__repr__())
     return transaction
Ejemplo n.º 3
0
    def request_transaction(self, transaction: Transaction) -> Transaction:
        client = Client(self._server_url_request)
        if "proxies" in self.config:
            client.transport.session.proxies = self.config["proxies"]
        try:
            params = {
                "merchantId": self.config["merchant"],
                "invoiceNo": transaction.order_id,
                "paymentId": transaction.order_id,
                "specialPaymentId": transaction.order_id,
                "amount": int(transaction.amount),
                "description": "",
                "revertURL": self.config["callback_url"],
            }
            result = client.service.MakeToken(**params)
            token = result.token
            if token:
                transaction.id = token
            else:
                raise TransactionError("Irankish: invalid information.")

        except zeep_exceptions.Fault:
            raise TransactionError("Irankish: invalid information.")

        except zeep_exceptions.Error:
            raise GatewayNetworkError

        return transaction
Ejemplo n.º 4
0
 def validate_transaction(self, data: dict) -> Transaction:
     transaction = Transaction()
     transaction.id = data["token"]
     transaction.meta = data
     if "resultCode" in data and int(data["resultCode"]) == 100:
         transaction.validate_status = True
     return transaction
Ejemplo n.º 5
0
    def request_transaction(self, transaction: Transaction) -> Transaction:
        client = Client(self._server_url)
        if 'proxies' in self.config:
            client.transport.session.proxies = self.config['proxies']

        try:
            params = {
                'terminalId': self.config['terminal_id'],
                'userName': self.config['username'],
                'userPassword': self.config['password'],
                'orderId': transaction.order_id,
                'amount': int(transaction.amount),
                'localDate': datetime.now().strftime('%Y%m%d'),
                'localTime': datetime.now().strftime('%H%M%S'),
                'additionalData': '',
                'callBackUrl': self.config['callback_url'],
                'payerId': 0,
            }
            result = client.service.bpPayRequest(**params)
            if not result:
                raise TransactionError('Mellat: invalid information. %s' % result)
            res = str(result).split(',')
            res_code = res[0]
            if int(res_code) == 0:
                transaction.id = res[1]
            else:
                raise TransactionError('Mellat: invalid information. %s' % res_code)

        except zeep_exceptions.Fault:
            raise TransactionError('Mellat: invalid information.')

        except zeep_exceptions.Error:
            raise GatewayNetworkError

        return transaction
Ejemplo n.º 6
0
 def validate_transaction(self, data: dict) -> Transaction:
     transaction = Transaction()
     transaction.id = data['transId']
     transaction.meta = data
     if int(data['status']) == 1:
         transaction.validate_status = True
     return transaction
Ejemplo n.º 7
0
 def validate_transaction(self, data: dict) -> Transaction:
     transaction = Transaction()
     transaction.id = data['bill_id']
     transaction.meta = data
     if data['state'] in ('pay', 'request'):
         transaction.validate_status = True
     return transaction
Ejemplo n.º 8
0
    def request_transaction(self, transaction: Transaction) -> Transaction:
        data = {
            "payer_number": transaction.meta.get("payer_number"),
            "payer_name": transaction.meta.get("payer_name"),
            "amount": transaction.amount,
            "note": transaction.meta.get("note"),
            "silent": transaction.meta.get("silent"),
        }
        for key in ("payer_name", "payer_number", "note"):
            if data[key] is None:
                raise ValueError("Transaction meta required (%s)" % key)
        url = "%s/bills" % self._server_url
        headers = {
            "access-token": self.config["access_token"],
            "content-type": "application/json",
        }
        try:
            response = request("post", url, json=[data], headers=headers)
        except RequestException:
            raise GatewayNetworkError("Cannot connect to bahamta server.")

        if response.status_code != 200:
            raise TransactionError("Invalid transaction information (%s)" %
                                   response.status_code)
        response_data = response.json()[0]
        transaction.id = response_data["bill_id"]
        transaction.meta = response_data
        return transaction
Ejemplo n.º 9
0
 def validate_transaction(self, data: dict) -> Transaction:
     transaction = Transaction()
     transaction.id = data["bill_id"]
     transaction.meta = data
     if data["state"] in ("pay", "request"):
         transaction.validate_status = True
     return transaction
Ejemplo n.º 10
0
 def validate_transaction(self, data: dict) -> Transaction:
     transaction = Transaction()
     transaction.id = data["RefId"]
     transaction.meta = data
     if int(data["ResCode"]) == 0:
         transaction.validate_status = True
     return transaction
Ejemplo n.º 11
0
    def request_transaction(self, transaction: Transaction) -> Transaction:
        url = 'https://pay.ir/payment/send'
        data = {
            'api': self.config['pin'],
            'amount': transaction.amount,
            'redirect': self.config['callback_url']
        }
        if self.testing:  # pragma: nocover
            url = 'https://pay.ir/payment/test/send'
            data['api'] = 'test'

        try:
            req = request.Request(url, data=parse.urlencode(data).encode())
            resp = request.urlopen(req)
            resp = json.loads(resp.read().decode())
        except error.URLError:
            raise GatewayNetworkError('Cannot connect to payline server.')

        if resp['status'] == 1 and resp['transId']:
            transaction.id = resp['transId']
        else:
            raise TransactionError('%s, code: %s' %
                                   (resp['errorMessage'], resp['errorCode']))

        return transaction
Ejemplo n.º 12
0
    def request_transaction(self, transaction: Transaction) -> Transaction:
        client = Client(self._server_url)
        if "proxies" in self.config:
            client.transport.session.proxies = self.config["proxies"]
        try:
            params = {
                "merchantConfigurationID": self.config["merchant_config_id"],
                "encryptedRequest": self._get_encrypted_request(transaction),
            }

            result = client.service.RequestOperation(**params)
            if not result:
                raise TransactionError("AsanPardakht: invalid information.")

            if result[0:1] == "0":
                exploded_result = str(result).split(
                    ",")  # Should have two part [XX,YY]
                transaction.id = exploded_result[1]
            else:
                raise TransactionError(
                    "AsanPardakht: invalid information. code: %s" %
                    str(result))

        except zeep_exceptions.Fault:
            raise TransactionError("AsanPardakht: invalid information.")

        except zeep_exceptions.Error:
            raise GatewayNetworkError

        return transaction
Ejemplo n.º 13
0
 def validate_transaction(self, data: dict) -> Transaction:
     transaction = Transaction()
     transaction.id = data["Token"]
     transaction.meta = data
     if "status" in data and int(data["status"]) == 0:
         transaction.validate_status = True
     return transaction
Ejemplo n.º 14
0
 def validate_transaction(self, data: dict) -> Transaction:
     transaction = Transaction()
     transaction.id = data['Authority']
     transaction.meta = data
     if data['Status'] == 'OK':
         transaction.validate_status = True
     return transaction
Ejemplo n.º 15
0
 def validate_transaction(self, data: dict) -> Transaction:
     transaction = Transaction()
     transaction.id = data['id']
     transaction.meta = data
     transaction.validate_status = data.get('validateStatus', True)
     print('Transaction validated: \n%s' % transaction.__repr__())
     return transaction
Ejemplo n.º 16
0
 def validate_transaction(self, data: dict) -> Transaction:
     transaction = Transaction()
     transaction.id = data['Token']
     transaction.meta = data
     if 'status' in data and int(data['status']) == 0:
         transaction.validate_status = True
     return transaction
Ejemplo n.º 17
0
    def request_transaction(self, transaction: Transaction) -> Transaction:
        client = Client(self._server_url_request)
        if "proxies" in self.config:
            client.transport.session.proxies = self.config["proxies"]
        try:
            data = {
                "LoginAccount": self.config["pin"],
                "OrderId": transaction.order_id,
                "Amount": int(transaction.amount),
                "CallBackUrl": self.config["callback_url"],
            }
            result = client.service.SalePaymentRequest(requestData=data)
            token = result.Token
            status = int(result.Status)
            if token and status == 0:
                transaction.id = str(token)

            else:
                raise TransactionError(
                    "Parsian: %s-%s"
                    % (status, self._response_message_map[str(status)])
                )

        except zeep_exceptions.Fault:
            raise TransactionError("Parsian: invalid information.")

        except zeep_exceptions.Error:
            raise GatewayNetworkError

        return transaction
Ejemplo n.º 18
0
    def request_transaction(self, transaction: Transaction) -> Transaction:
        client = Client(self._server_url_request)
        if 'proxies' in self.config:
            client.transport.session.proxies = self.config['proxies']
        try:
            data = {
                'LoginAccount': self.config['pin'],
                'OrderId': transaction.order_id,
                'Amount': int(transaction.amount),
                'CallBackUrl': self.config['callback_url'],
            }
            result = client.service.SalePaymentRequest(requestData=data)
            token = result.Token
            status = int(result.Status)
            if token and status == 0:
                transaction.id = str(token)

            else:
                raise TransactionError('Parsian: %s-%s' % (
                    status,
                    self._response_message_map[str(status)]
                ))

        except zeep_exceptions.Fault:
            raise TransactionError('Parsian: invalid information.')

        except zeep_exceptions.Error:
            raise GatewayNetworkError

        return transaction
Ejemplo n.º 19
0
 def validate_transaction(self, data: dict) -> Transaction:
     transaction = Transaction()
     transaction.id = data["Authority"]
     transaction.meta = data
     if data["Status"] == "OK":
         transaction.validate_status = True
     return transaction
Ejemplo n.º 20
0
    def request_transaction(self, transaction: Transaction) -> Transaction:
        client = Client(self._server_url_request)
        if 'proxies' in self.config:
            client.transport.session.proxies = self.config['proxies']
        try:
            params = {
                'merchantId': self.config['merchant'],
                'invoiceNo': transaction.order_id,
                'paymentId': transaction.order_id,
                'specialPaymentId': transaction.order_id,
                'amount': int(transaction.amount),
                'description': '',
                'revertURL': self.config['callback_url'],
            }
            result = client.service.MakeToken(**params)
            token = result.token
            if token:
                transaction.id = token
            else:
                raise TransactionError('Irankish: invalid information.')

        except zeep_exceptions.Fault:
            raise TransactionError('Irankish: invalid information.')

        except zeep_exceptions.Error:
            raise GatewayNetworkError

        return transaction
Ejemplo n.º 21
0
    def request_transaction(self, transaction: Transaction) -> Transaction:
        data = {
            'payer_number': transaction.meta.get('payer_number'),
            'payer_name': transaction.meta.get('payer_name'),
            'amount': transaction.amount,
            'note': transaction.meta.get('note'),
            'silent': transaction.meta.get('silent')
        }
        for key in ('payer_name', 'payer_number', 'note'):
            if data[key] is None:
                raise ValueError('Transaction meta required (%s)' % key)
        url = '%s/bills' % self._server_url
        headers = {
            'access-token': self.config['access_token'],
            'content-type': 'application/json'
        }
        try:
            response = request(
                'post', url, json=[data], headers=headers
            )
        except RequestException:
            raise GatewayNetworkError('Cannot connect to bahamta server.')

        if response.status_code != 200:
            raise TransactionError(
                'Invalid transaction information (%s)' % response.status_code
            )
        response_data = response.json()[0]
        transaction.id = response_data['bill_id']
        transaction.meta = response_data
        return transaction
Ejemplo n.º 22
0
    def request_transaction(self, transaction: Transaction) -> Transaction:
        formdata = {
            "pin": self.config["pin"],
            "amount": irr_to_irt(transaction.amount),
            "callback": self.config["callback_url"],
        }
        optional_fields = (
            "card_number",
            "invoice_id",
            "mobile",
            "description",
        )
        for field in optional_fields:
            if field not in transaction.meta:
                continue
            formdata[field] = transaction.meta[field]

        try:
            response = request(
                method="post",
                url="%s/create" % self._server_url,
                data=formdata,
            )
        except RequestException:
            raise GatewayNetworkError("Cannot connect to aqayepardakht server")

        if response.status_code != 200:
            raise TransactionError("Invalid transaction information (%s)" %
                                   response.status_code)

        transaction.id = response.text
        return transaction
Ejemplo n.º 23
0
    def request_transaction(self, transaction: Transaction) -> Transaction:
        client = Client(self._server_url)
        if 'proxies' in self.config:
            client.transport.session.proxies = self.config['proxies']
        try:
            params = {
                'merchantConfigurationID': self.config['merchant_config_id'],
                'encryptedRequest': self._get_encrypted_request(transaction)
            }

            result = client.service.RequestOperation(**params)
            if not result:
                raise TransactionError('AsanPardakht: invalid information.')

            if result[0:1] == '0':
                exploded_result = str(result).split(
                    ',')  # Should have two part [XX,YY]
                transaction.id = exploded_result[1]
            else:
                raise TransactionError(
                    'AsanPardakht: invalid information. code: %s' %
                    str(result))

        except zeep_exceptions.Fault:
            raise TransactionError('AsanPardakht: invalid information.')

        except zeep_exceptions.Error:
            raise GatewayNetworkError

        return transaction
Ejemplo n.º 24
0
    def request_transaction(self, transaction: Transaction) -> Transaction:
        if int(transaction.amount) > self.maximum_amount:
            raise TransactionError('Amount is larger than %s' %
                                   self.maximum_amount)

        transaction.id = int(time.time())
        print('New transaction requested: \n%s' % transaction.__repr__())
        return transaction
Ejemplo n.º 25
0
 def validate_transaction(self, data: dict) -> Transaction:
     parsed_data = self._parse_callback_data(data)
     transaction = Transaction()
     transaction.id = parsed_data['ref_id']
     transaction.meta = parsed_data
     if int(parsed_data['res_code']) == 0:
         transaction.validate_status = True
     return transaction
Ejemplo n.º 26
0
 def validate_transaction(self, data: dict) -> Transaction:
     transaction = Transaction()
     transaction.id = data.get("transid")
     transaction.amount = int(data.get("amount", 0))
     transaction.pan = data.get("cardnumber")
     transaction.meta = data
     transaction.validate_status = transaction.id is not None
     return transaction
Ejemplo n.º 27
0
Archivo: payir.py Proyecto: meyt/payit
    def request_transaction(self, transaction: Transaction) -> Transaction:
        url = "https://pay.ir/pg/send"
        formdata = {
            "api": "test" if self.testing else self.config["pin"],
            "amount": transaction.amount,
            "redirect": self.config["callback_url"],
        }

        if transaction.order_id:
            formdata["factorNumber"] = transaction.order_id

        optional_fields = (
            "mobile",
            "validCardNumber",
            "description",
        )
        for field in optional_fields:
            if field not in transaction.meta:
                continue
            formdata[field] = transaction.meta[field]

        try:
            resp = request("post", url, data=formdata)
        except RequestException:
            raise GatewayNetworkError("Cannot connect to payir server")

        try:
            body = resp.json()
        except Exception:
            body = None

        if resp.status_code != 200:
            if not body:
                raise TransactionError(
                    "Invalid transaction information (%s)" % resp.status_code
                )

            raise TransactionError(
                "%s, code: %s" % (body["errorMessage"], body["errorCode"])
            )

        transaction.id = body["token"]
        return transaction
Ejemplo n.º 28
0
    def request_transaction(self, transaction: Transaction) -> Transaction:
        client = Client(self._server_url)
        try:
            result = client.service.PaymentRequest(
                self.config['merchant'],
                self._convert_iranian_rial_to_toman(transaction.amount),
                self.config['description'], '', '',
                self.config['callback_url'])

        except zeep_exceptions.Fault:
            raise TransactionError('Zarinpal: invalid information')

        except zeep_exceptions.Error:
            raise GatewayNetworkError

        if result.Status == 100 and result.Authority:
            transaction.id = result.Authority
        else:
            raise TransactionError('Zarinpal: invalid information')

        return transaction
Ejemplo n.º 29
0
    def request_transaction(self, transaction: Transaction) -> Transaction:
        client = Client(self._server_url)
        if "proxies" in self.config:
            client.transport.session.proxies = self.config["proxies"]

        try:
            params = {
                "terminalId": self.config["terminal_id"],
                "userName": self.config["username"],
                "userPassword": self.config["password"],
                "orderId": transaction.order_id,
                "amount": int(transaction.amount),
                "localDate": datetime.now().strftime("%Y%m%d"),
                "localTime": datetime.now().strftime("%H%M%S"),
                "additionalData": "",
                "callBackUrl": self.config["callback_url"],
                "payerId": 0,
            }
            result = client.service.bpPayRequest(**params)
            if not result:
                raise TransactionError(
                    "Mellat: invalid information. %s" % result
                )
            res = str(result).split(",")
            res_code = res[0]
            if int(res_code) == 0:
                transaction.id = res[1]
            else:
                raise TransactionError(
                    "Mellat: invalid information. %s" % res_code
                )

        except zeep_exceptions.Fault:
            raise TransactionError("Mellat: invalid information.")

        except zeep_exceptions.Error:
            raise GatewayNetworkError

        return transaction
Ejemplo n.º 30
0
    def request_transaction(self, transaction: Transaction) -> Transaction:
        client = Client(self._server_url)
        try:
            result = client.service.PaymentRequest(
                self.config["merchant"],
                irr_to_irt(transaction.amount),
                self.config["description"],
                "",
                "",
                self.config["callback_url"],
            )

        except zeep_exceptions.Fault:
            raise TransactionError("Zarinpal: invalid information")

        except zeep_exceptions.Error:
            raise GatewayNetworkError

        if result.Status == 100 and result.Authority:
            transaction.id = result.Authority
        else:
            raise TransactionError("Zarinpal: invalid information")

        return transaction