mirror of
https://git.oceanpay.cc/danial/kami_walmart_card.git
synced 2025-12-18 12:29:54 +00:00
feat: 暂存分支
This commit is contained in:
5
.idea/misc.xml
generated
5
.idea/misc.xml
generated
@@ -1,7 +1,10 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project version="4">
|
<project version="4">
|
||||||
|
<component name="Black">
|
||||||
|
<option name="sdkName" value="Python 3.13" />
|
||||||
|
</component>
|
||||||
<component name="JavaScriptSettings">
|
<component name="JavaScriptSettings">
|
||||||
<option name="languageLevel" value="ES6" />
|
<option name="languageLevel" value="ES6" />
|
||||||
</component>
|
</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>
|
</project>
|
||||||
2
.idea/walmart_bind.iml
generated
2
.idea/walmart_bind.iml
generated
@@ -5,7 +5,7 @@
|
|||||||
</component>
|
</component>
|
||||||
<component name="NewModuleRootManager">
|
<component name="NewModuleRootManager">
|
||||||
<content url="file://$MODULE_DIR$" />
|
<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" />
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
</component>
|
</component>
|
||||||
<component name="TemplatesService">
|
<component name="TemplatesService">
|
||||||
|
|||||||
89
spiders.py
89
spiders.py
@@ -62,7 +62,7 @@ class WalMartCardSpider:
|
|||||||
self.order_num = order_num
|
self.order_num = order_num
|
||||||
# 请求超时
|
# 请求超时
|
||||||
self.timeout = 3
|
self.timeout = 3
|
||||||
self.bind_timeout = 60
|
self.bind_timeout = 10
|
||||||
self.user_agent = random.choice(ANDROID_USER_AGENT)
|
self.user_agent = random.choice(ANDROID_USER_AGENT)
|
||||||
# 初始化开始滑块验证时间
|
# 初始化开始滑块验证时间
|
||||||
self.start_timestamp = int(time.time() * 1000)
|
self.start_timestamp = int(time.time() * 1000)
|
||||||
@@ -84,6 +84,64 @@ class WalMartCardSpider:
|
|||||||
number = float(number)
|
number = float(number)
|
||||||
formatted_number = "{:.2f}".format(number)
|
formatted_number = "{:.2f}".format(number)
|
||||||
return formatted_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):
|
def md5_encrypt(self, data):
|
||||||
# 创建 MD5 哈希对象
|
# 创建 MD5 哈希对象
|
||||||
@@ -199,6 +257,35 @@ class WalMartCardSpider:
|
|||||||
self.log_list.append(f"订单ID: {self.order_num},绑卡异常报错:{str(e)}")
|
self.log_list.append(f"订单ID: {self.order_num},绑卡异常报错:{str(e)}")
|
||||||
return 111
|
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):
|
def get_params(self):
|
||||||
headers = {
|
headers = {
|
||||||
"language": "CN",
|
"language": "CN",
|
||||||
|
|||||||
Reference in New Issue
Block a user