fix: 修复重试错误

This commit is contained in:
sunxiaolong
2024-08-19 00:29:51 +08:00
parent 99fb799bf4
commit 7920f27ad2
4 changed files with 57 additions and 29 deletions

23
assets/json/限额.json Normal file
View File

@@ -0,0 +1,23 @@
{
"dialog": {
"cancelButtonString": "进一步了解",
"defaultButtonName": "ok",
"cancelButtonAction": {
"shouldShowTarget": false,
"kind": "OpenURL",
"action": "OpenURL",
"url": "https:\/\/support.apple.com\/zh-cn\/HT207276"
},
"cancelButtonStringKey": "MZCommerce.NatIdYearlyCapExceededLearnMoreText",
"okButtonString": "好",
"message": "你已达到充值卡年度兑换限额。",
"explanation": "你的兑换限额将于每年1月1日重置。",
"okButtonStringKey": "OK",
"explanationKey": "MZCommerce.NatIdYearlyCapExceededException_explanation"
},
"errorMessageKey": "MZCommerce.NatIdYearlyCapExceededException",
"errorMessage": "ex.name (com.apple.jingle.foundation.exceptions.MZCodedException) -- ex.message (MZException code = MZCommerce.NatIdYearlyCapExceededException, userInfo = {adjectiveCountryName=中国, OriginationSystem=XCard, AdditionalInfoForSupport=NatIdYearlyCapExceededException})",
"userPresentableErrorMessage": "你的兑换限额将于每年1月1日重置。",
"errorNumber": 9519,
"status": -1
}

View File

@@ -45,9 +45,7 @@ def run_redeem_task(
),
)
return
itunes_service = ItunesService()
response_schema = None
while True:
response_schema_from_itunes = redis_client.get(
f"apple_account_{master_order.account}"
@@ -71,6 +69,7 @@ def run_redeem_task(
response_schema = apple_account_schema.login_schema
break
time.sleep(2)
itunes_service = ItunesService()
# 设置登录标识
if not response_schema_from_itunes:
redis_client.setex(

View File

@@ -5,7 +5,6 @@ import re
import requests
from loguru import logger
from requests.exceptions import ConnectionError
from urllib3 import HTTPSConnectionPool
from src.integrations.itunes.models.login import (
ItunesLoginResponse,
@@ -23,7 +22,10 @@ from src.integrations.june.models.redeem import AuthenticateModel, ItunesRedeemM
class AppleClient:
def __init__(self):
self.session = requests.Session()
self.__session = requests.Session()
self.__session.adapters.update({
"DEFAULT_RETRIES": 5,
})
def query_sign_sap_setup(self, signature: LoginSignatureModel, retries=3) -> str:
if retries <= 0:
@@ -40,7 +42,7 @@ class AppleClient:
cookies["pod"] = signature.serverId
cookies["itspod"] = signature.serverId
try:
response = self.session.post(
response = self.__session.post(
"https://play.itunes.apple.com/WebObjects/MZPlay.woa/wa/signSapSetup",
data=signature.signature,
headers={
@@ -96,8 +98,8 @@ class AppleClient:
url = (
"https://buy.itunes.apple.com/WebObjects/MZFinance.woa/wa/authenticate"
)
self.session.headers["X-Apple-Store-Front"] = "143465-19,12"
response = self.session.post(
self.__session.headers["X-Apple-Store-Front"] = "143465-19,12"
response = self.__session.post(
url,
headers=headers,
cookies=cookies,
@@ -173,7 +175,7 @@ class AppleClient:
f".jingle.app.finance.DirectAction/redeemCode?cl=iTunes&pg=Music",
}
try:
response = self.session.post(
response = self.__session.post(
url,
data=ItunesRedeemModel(
attempt_count=1,
@@ -188,7 +190,7 @@ class AppleClient:
).to_xml(),
headers=headers,
)
except HTTPSConnectionPool as e:
except ConnectionError as e:
return self.redeem(code, itunes, reties - 1)
response.encoding = "utf-8"
try:
@@ -221,8 +223,12 @@ class AppleClient:
== "MZCommerce.GiftCertificateAlreadyRedeemed"
):
result.status = 12
if result.errorMessageKey == "MZFreeProductCode.NoSuch":
elif result.errorMessageKey == "MZFreeProductCode.NoSuch":
result.status = 11
elif result.errorMessageKey == "MZCommerce.NatIdYearlyCapExceededException":
result.status = 31
else:
logger.error(f"失败状态未知:{response.json()}")
if result.status == -1 or result.status == 0:
result.status = 30
logger.warning("兑换状态未知:", response.text)
@@ -239,7 +245,7 @@ class AppleClient:
# 导出cookies
def export_cookies(self) -> bytes:
return pickle.dumps(self.session.cookies)
return pickle.dumps(self.__session.cookies)
def import_cookies(self, cookies: bytes):
self.session.cookies.update(pickle.loads(cookies))
self.__session.cookies.update(pickle.loads(cookies))

View File

@@ -23,7 +23,7 @@ from src.integrations.june.utils.utils import ShareCodeUtils, decode_and_decompr
class SixClient:
def __init__(self):
self.base_url = "http://43.241.16.229:6113"
self.__base_url = "http://43.241.16.229:6113"
# self.session = requests.Session()
def _do_post(
@@ -67,7 +67,7 @@ class SixClient:
)
try:
response = requests.post(
parse.urljoin(self.base_url, "/AppleClientApi/requestApi"),
parse.urljoin(self.__base_url, "/AppleClientApi/requestApi"),
data={
"authentiString": base64.b64encode(text3.encode("utf-8")).decode(
"utf-8"