feat: 暂存分支

This commit is contained in:
sunxiaolong
2025-03-29 14:01:29 +08:00
parent 80d934b3c6
commit d567b804e8
3 changed files with 93 additions and 3 deletions

5
.idea/misc.xml generated
View File

@@ -1,7 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Black">
<option name="sdkName" value="Python 3.13" />
</component>
<component name="JavaScriptSettings">
<option name="languageLevel" value="ES6" />
</component>
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.8 (walmart_bind) (2)" project-jdk-type="Python SDK" />
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.13" project-jdk-type="Python SDK" />
</project>

View File

@@ -5,7 +5,7 @@
</component>
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="jdk" jdkName="Python 3.8 (walmart_bind) (2)" jdkType="Python SDK" />
<orderEntry type="jdk" jdkName="Python 3.13" jdkType="Python SDK" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
<component name="TemplatesService">

View File

@@ -62,7 +62,7 @@ class WalMartCardSpider:
self.order_num = order_num
# 请求超时
self.timeout = 3
self.bind_timeout = 60
self.bind_timeout = 10
self.user_agent = random.choice(ANDROID_USER_AGENT)
# 初始化开始滑块验证时间
self.start_timestamp = int(time.time() * 1000)
@@ -84,6 +84,64 @@ class WalMartCardSpider:
number = float(number)
formatted_number = "{:.2f}".format(number)
return formatted_number
def get_walmart_code(self, res):
"""
/* 绑定成功 {"logId":"qZXePbHl","status":true,"error":{"errorcode":1,"message":null,"redirect":null,"validators":null},"data":"59519706"}
* 错误密码 {"logId":"IQwPkfLT","status":false,"error":{"errorcode":19000,"message":"校验密码失败密码错误次数1","redirect":null,"validators":null},"data":null}
* 重复绑定 {"logId":"Dj6nJ4OM","status":false,"error":{"errorcode":10131,"message":"该电子卡已被其他用户绑定","redirect":null,"validators":null},"data":null}
* 错误卡号/卡密 {"logId":"hX6Ju6lD","status":false,"error":{"errorcode":19000,"message":"无权操作该卡","redirect":null,"validators":null},"data":null}
* 登录失效 {"logId":"V0Sw4Q2f","status":false,"error":{"errorcode":203,"message":"请先去登录","redirect":null,"validators":null},"data":null}
* 错误密码 {"logId":"Aavc0ch1","status":false,"error":{"errorcode":201,"message":"密码输入有误","redirect":null,"validators":null},"data":null}
* 密码输入错误次数过多 {"logId":"bchMZcyv","status":false,"error":{"errorcode":110136,"message":"密码输入错误次数过多","redirect":null,"validators":null},"data":null}
* 校验密码失败密码错误次数2 {"logId":"MDN05jVd","status":false,"error":{"errorcode":19000,"message":"校验密码失败密码错误次数2","redirect":null,"validators":null},"data":null}
* {"logId":"tP0TWGY8","status":false,"error":{"errorcode":110224,"message":"您绑卡已超过单日20张限制请明天再试","redirect":null,"validators":null},"data":null}
* {'logId': 'Ff4eK7Bu', 'status': False, 'error': {'errorcode': 110134, 'message': '错误次数过多,请稍后再试', 'redirect': None, 'validators': None}, 'data': None}
* {'logId': 'LnyEeDcj', 'status': False, 'error': {'errorcode': 2, 'message': None, 'redirect': 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx47085439d65e5fbc&redirect_uri=https%3A%2F%2Fcard.swiftpass.cn%2Fwechat%2Fopen%2Foauth%2F100530000004%3Fredirect%3Dhttps%253A%252F%252Fwalmart-card.swiftpass.cn%252Fcard%252F100530000004%253Fa%253D1%2523bind&response_type=code&scope=snsapi_userinfo&state=bf6a200e39220cf7ce1f9d930e92ce20&component_appid=wxf770fc8d016ff6a8#wechat_redirect', 'validators': None}, 'data': None}
*/
:return:
"""
if res.get("error").get("errorcode") == 1:
self.set_record(f"绑定成功")
return 100
elif res.get("error").get("errorcode") == 203:
self.set_record(f"ck失效")
return 113
elif res.get("error").get("errorcode") == 5041:
self.set_record(f"请重新获取ck开放平台迁移小程序跳转公众号同步unionid")
return 113
elif res.get("error").get("errorcode") == 10131:
self.set_record(f"该电子卡已被其他用户绑定")
return 104
elif res.get("error").get("errorcode") == 110400:
self.set_record("操作频繁,请稍后重试")
return 115
elif res.get("error").get("errorcode") == 19000 and "校验密码失败" in res.get("error").get("message"):
self.set_record(f"校验密码失败")
return 105
elif res.get("error").get("errorcode") == 19000 and "无权操作该卡" in res.get("error").get("message"):
self.set_record(f"无权操作该卡")
return 105
elif res.get("error").get("errorcode") == 19000 and "该卡已被绑定" in res.get("error").get("message"):
self.set_record(f"同一张实体卡只允许绑定到一个微信账户或山姆APP礼品卡账户该卡已被绑定")
return 104
elif res.get("error").get("errorcode") == 19000 and "重复提交" in res.get("error").get("message"):
self.set_record(f"重复提交")
return 110
elif res.get("error").get("errorcode") == 201:
self.set_record(f"密码输入有误")
return 105
elif res.get("error").get("errorcode") == 110136:
self.set_record(f"密码输入错误次数过多")
return 105
elif res.get("error").get("errorcode") == 110224:
self.set_record(f"您绑卡已超过单日20张限制请明天再试")
return 116
elif res.get("error").get("errorcode") == 110134:
self.set_record(f"错误次数过多,请稍后再试")
return 115
else:
self.set_record(f"存在未知状态")
return 111
def md5_encrypt(self, data):
# 创建 MD5 哈希对象
@@ -199,6 +257,35 @@ class WalMartCardSpider:
self.log_list.append(f"订单ID: {self.order_num},绑卡异常报错:{str(e)}")
return 111
def walmart_invoice_bind_card(self):
headers = {
"Accept": "application/json, text/javascript, */*; q=0.01",
"Accept-Language": "zh-CN,zh;q=0.9",
"Connection": "keep-alive",
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
"Origin": "https://walmart-card.swiftpass.cn",
"Referer": "https://walmart-card.swiftpass.cn/card/100530000004?a=1",
"Sec-Fetch-Dest": "empty",
"Sec-Fetch-Mode": "cors",
"Sec-Fetch-Site": "same-origin",
"User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 12_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.2(0x18000239) NetType/4G Language/zh_CN",
"X-Requested-With": "XMLHttpRequest",
"group": "100530000004",
"page-from": "https://walmart-card.swiftpass.cn/card/100530000004?a=1#bind",
"Cookie": self.cookies
}
url = "https://walmart-card.swiftpass.cn/card/member/bind"
data = {
"cardNo": self.card_num,
"cardPwd": self.card_pwd
}
response = requests.post(url, headers=headers, data=data)
res = response.json()
logger.info(f"订单ID: {self.order_num},请求绑卡返回:{res}")
self.remarks = res.get("error", {}).get("message", "")
code = self.get_walmart_code(res)
return code
def get_params(self):
headers = {
"language": "CN",