Files
kami_walmart_card/spiders.py
2025-03-29 14:01:29 +08:00

475 lines
27 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import datetime
import hashlib
import json
import random
import time
from json import JSONDecodeError
import requests
import urllib3
import traceback
from logger import get_logger
logger = get_logger()
ANDROID_USER_AGENT = [
"Mozilla/5.0 (Linux; U; Android 1.5; en-us; sdk Build/CUPCAKE) AppleWebkit/528.5 (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1",
"Mozilla/5.0 (Linux; U; Android 2.1; en-us; Nexus One Build/ERD62) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17",
"Mozilla/5.0 (Linux; U; Android 2.2; en-us; Nexus One Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
"Mozilla/5.0 (Linux; U; Android 1.5; en-us; htc_bahamas Build/CRB17) AppleWebKit/528.5 (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1",
"Mozilla/5.0 (Linux; U; Android 2.1-update1; de-de; HTC Desire 1.19.161.5 Build/ERE27) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17",
"Mozilla/5.0 (Linux; U; Android 2.2; en-us; Sprint APA9292KT Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
"Mozilla/5.0 (Linux; U; Android 1.5; de-ch; HTC Hero Build/CUPCAKE) AppleWebKit/528.5 (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1",
"Mozilla/5.0 (Linux; U; Android 2.2; en-us; ADR6300 Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
"Mozilla/5.0 (Linux; U; Android 2.1; en-us; HTC Legend Build/cupcake) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17",
"Mozilla/5.0 (Linux; U; Android 1.5; de-de; HTC Magic Build/PLAT-RC33) AppleWebKit/528.5 (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1 FirePHP/0.3",
"Mozilla/5.0 (Linux; U; Android 1.6; en-us; HTC_TATTOO_A3288 Build/DRC79) AppleWebKit/528.5 (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1",
"Mozilla/5.0 (Linux; U; Android 1.0; en-us; dream) AppleWebKit/525.10 (KHTML, like Gecko) Version/3.0.4 Mobile Safari/523.12.2",
"Mozilla/5.0 (Linux; U; Android 1.5; en-us; T-Mobile G1 Build/CRB43) AppleWebKit/528.5 (KHTML, like Gecko) Version/3.1.2 Mobile Safari 525.20.1",
"Mozilla/5.0 (Linux; U; Android 1.5; en-gb; T-Mobile_G2_Touch Build/CUPCAKE) AppleWebKit/528.5 (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1",
"Mozilla/5.0 (Linux; U; Android 2.0; en-us; Droid Build/ESD20) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17",
"Mozilla/5.0 (Linux; U; Android 2.2; en-us; Droid Build/FRG22D) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
"Mozilla/5.0 (Linux; U; Android 2.0; en-us; Milestone Build/ SHOLS_U2_01.03.1) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17",
"Mozilla/5.0 (Linux; U; Android 2.0.1; de-de; Milestone Build/SHOLS_U2_01.14.0) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17",
"Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/525.10 (KHTML, like Gecko) Version/3.0.4 Mobile Safari/523.12.2",
"Mozilla/5.0 (Linux; U; Android 0.5; en-us) AppleWebKit/522 (KHTML, like Gecko) Safari/419.3",
"Mozilla/5.0 (Linux; U; Android 1.1; en-gb; dream) AppleWebKit/525.10 (KHTML, like Gecko) Version/3.0.4 Mobile Safari/523.12.2",
"Mozilla/5.0 (Linux; U; Android 2.0; en-us; Droid Build/ESD20) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17",
"Mozilla/5.0 (Linux; U; Android 2.1; en-us; Nexus One Build/ERD62) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17",
"Mozilla/5.0 (Linux; U; Android 2.2; en-us; Sprint APA9292KT Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
"Mozilla/5.0 (Linux; U; Android 2.2; en-us; ADR6300 Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
"Mozilla/5.0 (Linux; U; Android 2.2; en-ca; GT-P1000M Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
"Mozilla/5.0 (Linux; U; Android 3.0.1; fr-fr; A500 Build/HRI66) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13",
"Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/525.10 (KHTML, like Gecko) Version/3.0.4 Mobile Safari/523.12.2",
"Mozilla/5.0 (Linux; U; Android 1.6; es-es; SonyEricssonX10i Build/R1FA016) AppleWebKit/528.5 (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1",
"Mozilla/5.0 (Linux; U; Android 1.6; en-us; SonyEricssonX10i Build/R1AA056) AppleWebKit/528.5 (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1",
]
# 忽略InsecureRequestWarning警告
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
class WalMartCardSpider:
def __init__(self, cookies, card_num, card_pwd, order_num, app):
self.app = app
# 接收参数
self.cookies = cookies
self.card_num = card_num
self.card_pwd = card_pwd
self.order_num = order_num
# 请求超时
self.timeout = 3
self.bind_timeout = 10
self.user_agent = random.choice(ANDROID_USER_AGENT)
# 初始化开始滑块验证时间
self.start_timestamp = int(time.time() * 1000)
current_time = datetime.datetime.utcnow()
self.start_formatted_time = current_time.strftime("%Y-%m-%dT%H:%M:%S.%fZ")
# 日志存储
self.log_list = []
# 执行记录存储
self.record_list = []
# 备注
self.remarks = ""
self.session = requests.Session()
# 请求超时时间设置
self.timeout = 3.5
def format_number(self, number):
if not number:
number = 0
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 哈希对象
md5_hash = hashlib.md5()
# 更新哈希对象以包含数据
md5_hash.update(data.encode('utf-8')) # 确保数据为字节类型
# 返回十六进制表示的大写 MD5 值
return md5_hash.hexdigest().upper()
def walmart_bind_card(self):
"""
/* 绑定成功 {"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}
*/
:return:
"""
try:
user_info = self.cookies.split("#")
if len(user_info) != 3:
self.set_record(f"ck失效格式不正确")
return 113
sign = user_info[0]
user_key = user_info[1]
version = user_info[2]
timestamp = f"{int(time.time() * 1000)}"
data = '{"cardNo":"%s","cardPwd":"%s","currentPage":0,"pageSize":0,"sign":"%s","storeId":"","userPhone":""}%s%s' % (
self.card_num, self.card_pwd, sign, timestamp, user_key
)
signature = self.md5_encrypt(data)
headers = {
"authority": "apicard.swiftpass.cn",
"accept": "*/*",
"accept-language": "zh-CN,zh;q=0.9",
"content-type": "application/json",
"referer": "https://servicewechat.com/wx81d3e1fe4c2e11b4/159/page-frame.html",
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "cross-site",
"signature": signature,
"timestamp": timestamp,
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090a13) XWEB/8555",
"xweb_xhr": "1",
"version": version
}
url = "https://apicard.swiftpass.cn/app/card/mem/bind.json"
data = {
"cardNo": self.card_num,
"cardPwd": self.card_pwd,
"currentPage": 0,
"pageSize": 0,
"sign": sign,
"storeId": "",
"userPhone": ""
}
data = json.dumps(data, separators=(',', ':'))
response = requests.post(url, headers=headers, data=data)
res = response.json()
self.app.logger.info(f"订单ID: {self.order_num},请求绑卡返回:{res}")
logger.info(f"订单ID: {self.order_num},请求绑卡返回:{res}")
self.remarks = res.get("error", {}).get("message", "")
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
except Exception as e:
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",
"system-language": "CN",
"Content-Type": "application/json",
"device-type": "android",
"tpg": "1",
"app-version": "5.0.98",
"device-id": "",
"device-os-version": "9",
"device-name": "samsung_SM-N9760",
"treq-id": "35cbc67b3bdb42238e97214e4bb371ad.515.17270811912489411",
"auth-token": self.cookies,
"longitude": "113.412697",
"latitude": "23.10594",
"p": "1656120205",
"t": "1727080982681",
"n": "b233a136c3484043a022dc935684491a",
"sy": "0",
"st": "a2f3a3427f7391aa470bca22cfe52177",
"sny": "c",
# "rcs": "2",
"spv": "1.1",
"Local-Longitude": "0.0",
"Local-Latitude": "0.0",
"zoneType": "1",
"Host": "api-sams.walmartmobile.cn",
"User-Agent": "okhttp/4.8.1"
}
url = "https://api-sams.walmartmobile.cn/api/v1/sams/sams-user/tool/yinshang/request_param"
response = self.session.get(url, headers=headers, verify=False, timeout=self.timeout)
self.app.logger.info(f"订单ID: {self.order_num}获取app打开沃尔玛绑卡页面参数{response.text}")
logger.info(f"订单ID: {self.order_num}获取app打开沃尔玛绑卡页面参数{response.text}")
print(f"订单ID: {self.order_num}获取app打开沃尔玛绑卡页面参数{response.text}")
res = response.json()
if res.get("code") != "Success":
return "01"
params = res["data"]["params"]
params = dict(item.split("=") for item in params.split("&"))
return params
def get_session_id(self, params):
url = "https://vpay.upcard.com.cn/vcweixin/mwalm/loginmwalmmenu"
headers = {
"Host": "vpay.upcard.com.cn",
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Mozilla/5.0 (Linux; Android 9; SM-N9760 Build/PQ3B.190801.06281543; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/91.0.4472.114 Mobile Safari/537.36SR-SAMS/5.0.98",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
"X-Requested-With": "cn.samsclub.app",
"Sec-Fetch-Site": "none",
"Sec-Fetch-Mode": "navigate",
"Sec-Fetch-User": "?1",
"Sec-Fetch-Dest": "document",
"Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7"
}
res = self.session.get(url, headers=headers, params=params, verify=False, timeout=self.timeout)
cookies = res.cookies.get_dict()
print(f"订单ID: {self.order_num}获取JSESSIONID{cookies}")
self.app.logger.info(f"订单ID: {self.order_num}获取JSESSIONID{cookies}")
logger.info(f"订单ID: {self.order_num}获取JSESSIONID{cookies}")
return cookies
def sanmu_bind_card(self):
for i in range(5):
try:
if len(self.cookies) > 50:
try:
params = self.get_params()
except JSONDecodeError as e:
self.remarks = "请求频繁,跳转至错误页面,请稍后重试"
self.set_record(f"请求频繁")
return 115
if params == "01":
self.set_record(f"ck失效")
return 113
cookies = self.get_session_id(params)
else:
cookies = {
"JSESSIONID": self.cookies,
"route": ""
}
headers = {
"Host": "vpay.upcard.com.cn",
"Accept": "application/json, text/javascript, */*; q=0.01",
"X-Requested-With": "XMLHttpRequest",
"User-Agent": "Mozilla/5.0 (Linux; Android 9; SM-N9760 Build/PQ3B.190801.06281543; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/91.0.4472.114 Mobile Safari/537.36SR-SAMS/5.0.98",
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
"Origin": "https://vpay.upcard.com.cn",
"Sec-Fetch-Site": "same-origin",
"Sec-Fetch-Mode": "cors",
"Sec-Fetch-Dest": "empty",
"Referer": "https://vpay.upcard.com.cn/vcweixin/mwalm/bind/card?company=mwalm&channel=App",
"Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7",
}
url = "https://vpay.upcard.com.cn/vcweixin/mwalm/bindCard"
data = {
"company": "mwalm",
"channel": "App",
"cardNo": self.card_num,
"cardPwd": self.card_pwd
}
response = self.session.post(
url=url,
headers=headers,
data=data,
cookies=cookies,
verify=False,
timeout=self.bind_timeout,
)
res = response.json()
print(f"订单ID: {self.order_num}app请求绑卡返回{res}")
self.app.logger.info(f"订单ID: {self.order_num}app请求绑卡返回{res}")
logger.info(f"订单ID: {self.order_num}app请求绑卡返回{res}")
self.remarks = res.get("msg", "")
if res.get("code") == "00":
self.set_record(f"绑定成功")
return 100
elif res.get("code") == "11" and "该卡已被绑定" in self.remarks:
self.set_record(self.remarks)
return 104
elif res.get("code") == "11" and self.remarks == "线上密码无效":
self.set_record(self.remarks)
return 105
elif res.get("code") == "11" and "校验密码失败" in self.remarks:
self.set_record(self.remarks)
return 105
elif res.get("code") == "11" and self.remarks == "无法识别的卡号!":
self.set_record(self.remarks)
return 104
elif res.get("code") == "11" and self.remarks == "卡号不存在":
self.set_record(self.remarks)
return 104
elif res.get("code") == "01":
self.set_record(f"ck失效")
return 113
elif res.get("code") == "11" and "超过当天绑定上限" in self.remarks:
self.set_record(self.remarks)
return 116
else:
self.set_record(f"订单ID: {self.order_num},返回:{res}")
self.set_record(f"新的状态返回")
return 111
except Exception as e:
self.app.logger.info(f"订单ID: {self.order_num},报错:{traceback.format_exc()}")
logger.info(f"订单ID: {self.order_num},报错:{traceback.format_exc()}")
continue
return 110
def get_time(self):
from datetime import datetime
# 获取当前时间
current_time = datetime.now()
# 将当前时间格式化为指定格式的字符串
formatted_date = current_time.strftime("%Y-%m-%d %H:%M:%S")
return formatted_date
def set_record(self, text, log_only=False):
# 如果传入的是订单ID则不打印日志只做记录存储
if text == self.order_num:
record = f"{self.get_time()}#订单ID: {self.order_num}"
else:
log_text = f"{self.get_time()}#订单ID:{self.order_num}, {text}"
self.log_list.append(log_text)
record = f"{self.get_time()}#{text}"
if not log_only:
self.record_list.append(record)
def get_record(self):
return "@".join(self.record_list) + "@"
def run(self):
if "@" in self.cookies:
# 沃尔玛ck绑卡
code = self.walmart_bind_card()
else:
# 山姆app ck绑卡
code = self.sanmu_bind_card()
record = self.get_record()
return {
"code": code,
"record": record,
"log_list": self.log_list,
"remarks": self.remarks,
}