Skip to content

Commit

Permalink
Merge pull request #3 from AS7RIDENIED/main
Browse files Browse the repository at this point in the history
Немного потрогал часть с лолзом
  • Loading branch information
I-ToSa-I committed Apr 11, 2024
2 parents 93314b6 + 3862ec2 commit c40aa85
Show file tree
Hide file tree
Showing 5 changed files with 96 additions and 70 deletions.
2 changes: 1 addition & 1 deletion AsyncPayments/exceptions/__init__.py
@@ -1 +1 @@
from .exceptions import BadRequest
from .exceptions import BadRequest, RequestError, MissingScopeError
3 changes: 3 additions & 0 deletions AsyncPayments/exceptions/exceptions.py
Expand Up @@ -5,3 +5,6 @@ class BadRequest(Exception):
class RequestError(Exception):
pass


class MissingScopeError(Exception):
pass
114 changes: 70 additions & 44 deletions AsyncPayments/lolz/api.py
@@ -1,58 +1,66 @@
from AsyncPayments.requests import RequestsClient
from typing import Optional, Union
from .models import User, Payments
from AsyncPayments.exceptions import MissingScopeError

import json
import random
import math
import time
import secrets
import base64


class AsyncLolzteamMarketPayment(RequestsClient):
API_HOST: str = "https://lzt.market"

def __init__(self, token: str, user_id: int, user_nickname: str) -> None:
def __init__(self, token: str) -> None:
"""
Initialize LolzteamMarket API client
:param token: Your Lolzteam Token
:param user_id: Your Lolzteam User ID
:param user_nickname: Your Lolzteam User nickname
"""
super().__init__()
self.__token = token
self.__user_id = user_id
self.__nickname = user_nickname
jwt_payload = json.loads(
base64.b64decode(token.split(".")[1] + "==").decode("utf-8")
)
self.__user_id = jwt_payload["sub"]
if jwt_payload.get("scope"):
if "market" not in jwt_payload["scope"]:
raise MissingScopeError(
'"Market" scope is not provided in your token. You need to recreate token with "Market" scope.'
)
self.__headers = {
'Authorization': f'Bearer {self.__token}',
"Accept": "application/json"
"Authorization": f"Bearer {self.__token}",
"Accept": "application/json",
}
self.__base_url = "https://api.lzt.market"
self.__get_method = "GET"
self.__payment_name = "lolz"
self.check_values()

def check_values(self):
if not self.__token or not self.__user_id or not self.__nickname:
raise ValueError('No Token, UserID or Nickname specified')

async def get_me(self) -> User:
"""Get info about your account on Zelenka (Lolzteam).
Docs: https://lzt-market.readme.io/reference/marketprofilesettingsgetinfo"""

url = f'{self.__base_url}/me'

url = f"{self.__base_url}/me"

response = await self._request(self.__payment_name, self.__get_method, url, headers=self.__headers)
response = await self._request(
self.__payment_name, self.__get_method, url, headers=self.__headers
)

return User(**response['user'])
return User(**response["user"])

def __get_random_string(self):
return f'{time.time()}_{secrets.token_hex(random.randint(5, 10))}'

def get_payment_link(self, amount: Union[int, float], comment: Optional[str] = None, is_hold: Optional[bool] = False,
is_amount_ceiling: Optional[bool] = False) -> str:
return f"{time.time()}_{secrets.token_hex(random.randint(5, 10))}"

def get_payment_link(
self,
amount: Union[int, float],
comment: Optional[str] = None,
is_hold: Optional[bool] = False,
is_amount_ceiling: Optional[bool] = False,
) -> str:
"""Get a link to transfer funds to the Lolzteam market.
:param amount: Amount to transfer
Expand All @@ -68,16 +76,24 @@ def get_payment_link(self, amount: Union[int, float], comment: Optional[str] = N
if not comment:
comment = self.__get_random_string()

return f'https://lzt.market/balance/transfer?username={self.__nickname}&hold={int(is_hold)}&amount={amount}&comment={comment}'

async def get_history_payments(self, type: Optional[str] = None, pmin: Optional[int] = None,
pmax: Optional[int] = None, page: Optional[int] = 1,
operation_id_lt: Optional[int] = None, receiver: Optional[str] = None,
sender: Optional[str] = None, startDate: Optional[str] = None,
endDate: Optional[str] = None, wallet: Optional[str] = None,
comment: Optional[str] = None, is_hold: Optional[bool] = None,
show_payment_stats: Optional[bool] = None
) -> Payments:
return f"https://lzt.market/balance/transfer?user_id={self.__user_id}&hold={int(is_hold)}&amount={amount}&comment={comment}"

async def get_history_payments(
self,
operation_type: Optional[str] = None,
pmin: Optional[int] = None,
pmax: Optional[int] = None,
page: Optional[int] = 1,
operation_id_lt: Optional[int] = None,
receiver: Optional[str] = None,
sender: Optional[str] = None,
startDate: Optional[str] = None,
endDate: Optional[str] = None,
wallet: Optional[str] = None,
comment: Optional[str] = None,
is_hold: Optional[bool] = None,
show_payment_stats: Optional[bool] = None,
) -> Payments:
"""Displays list of your payments.
Docs: https://lzt-market.readme.io/reference/paymentslisthistory
Expand All @@ -94,12 +110,13 @@ async def get_history_payments(self, type: Optional[str] = None, pmin: Optional[
:param wallet: Optional. Wallet, which used for money payouts.
:param comment: Optional. Comment for money transfers.
:param is_hold: Optional. Display hold operations.
:param show_payment_stats: Optional. Display payment stats for selected period (outgoing value, incoming value)."""
:param show_payment_stats: Optional. Display payment stats for selected period (outgoing value, incoming value).
"""

url = f'{self.__base_url}/user/{self.__user_id}/payments'
url = f"{self.__base_url}/user/{self.__user_id}/payments"

params = {
"type": type,
"type": operation_type,
"pmin": pmin,
"pmax": pmax,
"page": page,
Expand All @@ -120,8 +137,15 @@ async def get_history_payments(self, type: Optional[str] = None, pmin: Optional[
if value is None:
params.pop(key)

response = await self._request(self.__payment_name, self.__get_method, url, headers=self.__headers, data=json.dumps(params))

response = await self._request(
self.__payment_name,
self.__get_method,
url,
headers=self.__headers,
params=params,
)
if type(response.get("payments")) is list and len(response.get("payments")) == 0:
response["payments"] = {}
return Payments(**response)

async def check_status_payment(self, pay_amount: int, comment: str) -> bool:
Expand All @@ -131,12 +155,14 @@ async def check_status_payment(self, pay_amount: int, comment: str) -> bool:
:param comment: Comment indicated in the transaction.
:return: True if payment has been received. Otherwise False"""

payments = (await self.get_history_payments(type="receiving_money")).payments

for payment in payments.values():
if 'Перевод денег от' in payment['label']['title'] and pay_amount == payment['incoming_sum'] and comment == \
payment['data']['comment']:
return True

return False
payments = (
await self.get_history_payments(
operation_type="receiving_money",
comment=comment,
pmin=pay_amount,
pmax=pay_amount,
)
).payments
if payments.values():
return True
return False
41 changes: 19 additions & 22 deletions AsyncPayments/requests.py
Expand Up @@ -6,6 +6,7 @@

from .exceptions.exceptions import BadRequest, RequestError


class RequestsClient:

def __init__(self) -> None:
Expand All @@ -23,48 +24,44 @@ def _getsession(self) -> ClientSession:

return self._session

async def _request(self,
payment: str,
method: str,
url: str,
**kwargs) -> dict:
async def _request(self, payment: str, method: str, url: str, **kwargs) -> dict:

session = self._getsession()

async with session.request(method, url, **kwargs) as response:
if response.status == 200:
if payment in ['ruKassa']:
if payment in ["ruKassa"]:
response = await response.json(content_type="text/html")
else:
response = await response.json()
else:
raise RequestError(f"Response status: {response.status}. Text: {await response.text()}")
raise RequestError(
f"Response status: {response.status}. Text: {await response.text()}"
)

await self._session.close()

return await self._checkexception(payment, response)

async def _checkexception(self, payment: str,
response: dict) -> dict:
async def _checkexception(self, payment: str, response: dict) -> dict:
if payment == "aaio":
if response['type'] == 'error':
raise BadRequest("[AAIO] " + response['message'])
if response["type"] == "error":
raise BadRequest("[AAIO] " + response["message"])
elif payment == "crystalPay":
if response['error']:
raise BadRequest("[CrystalPay] " + response['errors'][0])
if response["error"]:
raise BadRequest("[CrystalPay] " + response["errors"][0])
elif payment == "cryptoBot":
if not response['ok']:
raise BadRequest("[CryptoBot] " + response['error']['name'])
if not response["ok"]:
raise BadRequest("[CryptoBot] " + response["error"]["name"])
elif payment == "lolz":
if response.get("error"):
raise BadRequest("[Lolzteam Market] " + response['error_description'])
raise BadRequest("[Lolzteam Market] " + response["error_description"])
if response.get("errors"):
raise BadRequest("[Lolzteam Market] " + response['errors'][0])
raise BadRequest("[Lolzteam Market] " + response["errors"][0])
elif payment == "ruKassa":
if response.get("error"):
raise BadRequest("[RuKassa] " + response['message'])
raise BadRequest("[RuKassa] " + response["message"])
else:
if response['type'] == "error":
raise BadRequest("[FreeKassa] " + response['message'])

return response
if response["type"] == "error":
raise BadRequest("[FreeKassa] " + response["message"])
return response
6 changes: 3 additions & 3 deletions README.md
Expand Up @@ -3,7 +3,7 @@
## Installing
pip install AsyncPayments
## Version
v1.4.1
v1.4.2
## Code example
```python
import asyncio
Expand All @@ -15,7 +15,7 @@ from AsyncPayments.cryptoBot import AsyncCryptoBot
from AsyncPayments.crystalPay import AsyncCrystalPay

ruKassa = AsyncRuKassa("Api-Token", 1, "Email", "Password") # 1 - ShopID
lolz = AsyncLolzteamMarketPayment("Token", 1, "UserNickname") # 1 - UserID
lolz = AsyncLolzteamMarketPayment("Token")
aaio = AsyncAaio("ApiKey", "ShopId", "SecretKey")
cryptoBot = AsyncCryptoBot("Token")
crystalPay = AsyncCrystalPay("Login", "Secret", "Salt")
Expand Down Expand Up @@ -152,7 +152,7 @@ CrystalPay:
Доступно USDTTRC: 0.0 USDT
------------------------------------------
RuKassa: https://pay.ruks.pro/?hash=435fc3cee737f9dac2b34c9ba9311eae
Lolz: https://lzt.market/balance/transfer?username=ToSa&hold=0&amount=15&comment=orderId
Lolz: https://lzt.market/balance/transfer?user_id=4810752&hold=0&amount=15&comment=orderId
Aaio: https://aaio.io/merchant/pay?merchant_id=f398c75d-b775-412c-9674-87939692c083&amount=15&order_id=orderId&currency=RUB&sign=6ad5dc2164059a255921ad216c7e5ffd0d2abcaec9af7415636fc12df938582f
CryptoBot: https://t.me/CryptoBot?start=IVYOJWPOZh15
CrystalPay: https://pay.crystalpay.io/?i=715297022_MxRoixNnSrMSBD
Expand Down

0 comments on commit c40aa85

Please sign in to comment.