def verify_transaction(self, transaction: Transaction, data): url = "https://pay.ir/pg/verify" formdata = { "api": "test" if self.testing else self.config["pin"], "token": transaction.id, } 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"]) ) if int(transaction.amount) != int(body["amount"]): raise TransactionError("Amount mismatch") transaction.pan = body["cardNumber"] transaction.amount = int(body["amount"]) transaction.order_id = body["factorNumber"] transaction.meta = body return transaction
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