mirror of
https://git.oceanpay.cc/danial/kami_itunes_third_api.git
synced 2025-12-18 21:19:19 +00:00
- 新增 ProxyService 类,用于管理代理服务器 - 在 iTunes 服务中集成代理服务 - 更新 .gitignore 文件,添加新忽略项 - 在配置文件中添加代理服务器地址 - 更新相关模块以支持代理服务
173 lines
6.1 KiB
Python
173 lines
6.1 KiB
Python
import time
|
|
import uuid
|
|
|
|
from loguru import logger
|
|
|
|
from src.integrations.itunes.api import AppleClient
|
|
from src.integrations.itunes.models.login import (
|
|
ItunesSuccessLoginPlistData,
|
|
)
|
|
from src.integrations.itunes.models.redeem import (
|
|
RedeemSuccessResponse,
|
|
)
|
|
from src.integrations.june.api import SixClient
|
|
from src.integrations.june.models.login import AppleAccountModel, ItunesLoginModel
|
|
from src.models.model import (
|
|
LoginSuccessResponse,
|
|
LoginFailureResponse,
|
|
AppleAccountRedeemResponse,
|
|
RedeemRequestModel,
|
|
)
|
|
from src.schema.models import (
|
|
get_session,
|
|
AppleCardLoginLogSchema,
|
|
AppleCardRedeemLogSchema,
|
|
)
|
|
|
|
|
|
class ItunesService:
|
|
def __init__(self):
|
|
self.june_client_service = SixClient()
|
|
self.apple_client_service = AppleClient()
|
|
|
|
def login(
|
|
self,
|
|
account: AppleAccountModel,
|
|
retries: int = 3,
|
|
) -> LoginSuccessResponse | LoginFailureResponse:
|
|
"""
|
|
登录itunes
|
|
|
|
:param retries:
|
|
:param account:
|
|
:return:
|
|
"""
|
|
start_time = time.time()
|
|
sign_sap_from_june = self.june_client_service.get_sign_sap_setup()
|
|
middle_time_1 = time.time()
|
|
logger.info(f"[+] 获取签到参数耗时: {middle_time_1 - start_time}")
|
|
sign_sap_setup_buffer = self.apple_client_service.query_sign_sap_setup(
|
|
sign_sap_from_june.Data
|
|
)
|
|
middle_time_2 = time.time()
|
|
logger.info(f"[+] 获取签到证书耗时: {middle_time_2 - middle_time_1}")
|
|
sign_sap_cert = self.june_client_service.get_sign_sap_setup_cert(
|
|
account, sign_sap_from_june, sign_sap_setup_buffer
|
|
)
|
|
middle_time_3 = time.time()
|
|
logger.info(f"[+] 获取签到证书耗时: {middle_time_3 - middle_time_2}")
|
|
login_schema = self.apple_client_service.login(sign_sap_cert.Data)
|
|
logger.info(f"[+] 登录耗时: {time.time() - middle_time_3}")
|
|
session = get_session()()
|
|
|
|
db_id = uuid.uuid4().hex
|
|
if isinstance(login_schema.response, ItunesSuccessLoginPlistData):
|
|
# 登录成功
|
|
session.add(
|
|
AppleCardLoginLogSchema(
|
|
id=db_id,
|
|
account_name=account.account,
|
|
account_password=account.password,
|
|
status=1,
|
|
origin_log=login_schema.origin_log,
|
|
)
|
|
)
|
|
response_result = LoginSuccessResponse(
|
|
login_schema=ItunesLoginModel(
|
|
server_id=login_schema.server_id,
|
|
guid=sign_sap_cert.Data.guid,
|
|
dsis=int(login_schema.response.ds_person_id),
|
|
passwordToken=login_schema.response.password_token,
|
|
),
|
|
cookies=self.apple_client_service.export_cookies(),
|
|
apple_card_login_log_id=db_id,
|
|
)
|
|
else:
|
|
# 登录失败
|
|
session.add(
|
|
AppleCardLoginLogSchema(
|
|
id=db_id,
|
|
account_name=account.account,
|
|
account_password=account.password,
|
|
status=0,
|
|
origin_log=login_schema.origin_log,
|
|
)
|
|
)
|
|
# 失败编码 -5000 AppleID或密码错误
|
|
response_result = LoginFailureResponse(
|
|
status=login_schema.response.status,
|
|
failure_type=login_schema.response.failureType,
|
|
message=login_schema.response.customerMessage,
|
|
apple_card_login_log_id=db_id,
|
|
)
|
|
session.commit()
|
|
session.close()
|
|
return response_result
|
|
|
|
def redeem(
|
|
self, code: str, item: RedeemRequestModel, set_cookie: bool = False
|
|
) -> AppleAccountRedeemResponse:
|
|
"""
|
|
兑换代码
|
|
|
|
:param set_cookie:
|
|
:param item:
|
|
:param code:
|
|
:return:
|
|
"""
|
|
if set_cookie:
|
|
self.apple_client_service.import_cookies(item.cookies)
|
|
session = get_session()()
|
|
result = self.apple_client_service.redeem(
|
|
code,
|
|
ItunesLoginModel(
|
|
account_name=item.account_name,
|
|
server_id=item.login_schema.server_id,
|
|
guid=item.login_schema.guid,
|
|
dsis=int(item.login_schema.dsis),
|
|
passwordToken=item.login_schema.password_token,
|
|
),
|
|
)
|
|
if isinstance(result, RedeemSuccessResponse):
|
|
# 充值成功
|
|
response_result = AppleAccountRedeemResponse(
|
|
status=20,
|
|
balance=result.totalCredit.moneyRaw,
|
|
amount=result.redeemedCredit.moneyRaw,
|
|
)
|
|
session.add(
|
|
AppleCardRedeemLogSchema(
|
|
apple_card_login_log_id=item.apple_card_login_log_id,
|
|
account_name=item.account_name,
|
|
order_no=item.order_no,
|
|
origin_log_status_code=200,
|
|
redeem_status=response_result.status,
|
|
amount=result.redeemedCredit.moneyRaw,
|
|
account_balance=result.totalCredit.moneyRaw,
|
|
card_pass=code,
|
|
origin_log=result.origin_log,
|
|
)
|
|
)
|
|
else:
|
|
# 充值失败
|
|
response_result = AppleAccountRedeemResponse(
|
|
status=result.status,
|
|
remark=result.userPresentableErrorMessage,
|
|
)
|
|
session.add(
|
|
AppleCardRedeemLogSchema(
|
|
apple_card_login_log_id=item.apple_card_login_log_id,
|
|
account_name=item.account_name,
|
|
order_no=item.order_no,
|
|
amount=0,
|
|
origin_log_status_code=result.origin_status_code,
|
|
redeem_status=response_result.status,
|
|
account_balance=0,
|
|
card_pass=code,
|
|
origin_log=result.origin_log,
|
|
)
|
|
)
|
|
session.commit()
|
|
session.close()
|
|
return response_result
|