Files
kami_jd_ck/bind_card/spider.py
2025-04-13 19:17:51 +08:00

550 lines
26 KiB
Python
Raw 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 base64
import json
import os
import platform
import random
import re
import time
import execjs
import redis
import requests
import traceback
import urllib.parse
from logger import get_logger
from utils.icon import JdIcon
from utils.slide import save_photo_and_check
logger = get_logger()
class JdSpider(object):
def __init__(self, card_pwd, order_num, cookies):
# 接收参数
self.card_pwd = card_pwd
self.order_num = order_num
self.cookies = cookies
self.client = "m"
current_os = platform.system()
logger.info(f"当前系统:{current_os}")
if current_os == "Linux":
redis_url = 'redis://:jd2024@10.0.0.211:6379/0'
js_path = r"/app/js"
node_modules_path = r"/app/node_modules"
else:
# redis_url = 'redis://:km128sf45@qq@120.24.83.163:6379/32'
redis_url = 'redis://:jd2024@120.79.27.250:6379/0'
js_path = "js"
node_modules_path = "node_modules"
# 读取js代码
captcha_path = os.path.join(js_path, 'captcha_m.js')
self.js_m = execjs.compile(
open(captcha_path, encoding='utf8').read(),
cwd=node_modules_path
)
REDIS_POOL = redis.ConnectionPool.from_url(redis_url)
self.redis_conn = redis.StrictRedis(connection_pool=REDIS_POOL)
# ip代理池
self.proxy_list = []
self.proxies = {}
self.session = requests.Session()
# ua
self.user_agent = 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Mobile Safari/537.36'
self.headers = {
'authority': 'mygiftcard.jd.com',
'accept': 'application/json, text/plain, */*',
'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8',
'cache-control': 'no-cache',
'content-length': '0',
'content-type': 'application/x-www-form-urlencoded',
'origin': 'https://mygiftcard.jd.com',
'pragma': 'no-cache',
'referer': 'https://mygiftcard.jd.com/giftcardForM.html?source=JDM&sceneval=2&jxsid=17072329877299776610&appCode=ms0ca95114',
'sec-ch-ua-mobile': '?1',
'sec-ch-ua-platform': '"Android"',
'sec-fetch-dest': 'empty',
'sec-fetch-mode': 'cors',
'sec-fetch-site': 'same-origin',
}
# jd api接口
self.si_url = "https://mygiftcard.jd.com/giftcard/querySid/app"
self.fp_url = "https://jcap.m.jd.com/cgi-bin/api/fp"
self.captcha_url = "https://jcap.m.jd.com/cgi-bin/api/check"
self.refresh_url = "https://jcap.m.jd.com/cgi-bin/api/refresh"
self.card_url = "https://api.m.jd.com/api"
# 超时时间
self.common_timeout = 3
# 参数
self.fp = "Fdevghie0g0SsIhPsOE18HuAx_sg8FYyW3Hz4pBaX79dn0lkIsNzSEuH0Nr9rdwqE3R6RWhX8N22rZw7hkOa1g=="
self.sid = None
self.stt = None
self.st = None
self.pwd_key = None
# 点选验证码
self.icon = JdIcon()
# 备注
self.remark = ""
def rebuild_cookies(self):
self.fp = self.fp.replace("7", str(random.randint(1, 9)))
pt_key = re.findall(r"pt_key=(.*?);", self.cookies)[0]
pt_pin = re.findall(r"pt_pin=(.*?);", self.cookies)[0]
ck = f"pt_key={pt_key};pt_pin={pt_pin};"
self.cookies = ck + f"appCode=ms0ca95114; webp=1; jcap_dvzw_fp={self.fp};"
logger.info(f"订单号:{self.order_num}处理后的cookies{self.cookies}")
def get_proxies(self):
proxy_list = self.redis_conn.lrange('proxy_list', 0, -1)
self.proxy_list = [i.decode("utf-8") for i in proxy_list]
logger.info(f"订单ID{self.order_num}当前IP代理池{self.proxy_list}")
def query_jd_si(self, cookie):
ua = self.user_agent.replace('121', str(random.randint(100, 121)))
self.headers['user-agent'] = ua
self.headers['cookie'] = cookie
params = (
('source', 'JDM'),
)
response = self.session.post(
self.si_url,
headers=self.headers,
proxies=self.proxies,
params=params,
timeout=self.common_timeout
)
return response
def check_ip(self):
for _ in self.proxy_list:
ip = random.choice(self.proxy_list)
self.proxies = {
"http": ip,
"https": ip,
}
try:
response = self.query_jd_si(cookie="")
if response.status_code == 200:
logger.info(f"订单ID{self.order_num}当前IP{ip}是否可用True")
break
else:
self.proxy_list.remove(ip)
logger.info(f"订单ID{self.order_num}当前IP{ip}是否可用False")
continue
except:
self.proxy_list.remove(ip)
logger.info(f"订单ID{self.order_num}当前IP{ip}是否可用False")
continue
def get_si(self):
response = self.query_jd_si(cookie=self.cookies)
logger.info(f"订单ID{self.order_num}获取si返回{response.text}")
return response.json()
def query_by_type(self, type_num, result=None):
url = None
data = None
text = None
if type_num == 0:
url = self.fp_url
data = self.js_m.call('result', self.sid, 0, '', '', self.client, self.fp)
text = "获取fp返回"
if type_num == 1:
url = self.captcha_url
data = self.js_m.call('result', self.sid, 1, self.st, '', self.client, self.fp)
text = "获取captcha类型返回"
if type_num == 2:
url = self.captcha_url
data = self.js_m.call('result', self.sid, 2, self.stt, result, self.client, self.fp)
text = "校验验证码返回:"
if type_num == 3:
url = self.refresh_url
data = self.js_m.call('result', self.sid, 3, self.stt, '', self.client, self.fp)
text = "刷新验证码返回:"
response = self.session.post(
url,
proxies=self.proxies,
timeout=self.common_timeout,
data=data
)
if type_num in [1, 3]:
logger.info(f"订单ID{self.order_num}{text}{response.json().get('tp')}")
else:
logger.info(f"订单ID{self.order_num}{text}{response.text}")
return response.json()
def icon_verify(self):
icon_res = self.query_by_type(type_num=3)
self.stt = icon_res['st']
img = json.loads(icon_res['img'])
bg = img['b1'].split(',')[1]
fg = img['b2'].split(',')[1]
icon_res = self.icon.main(bg=bg, icon=fg)
logger.info(f"订单ID{self.order_num},图标验证码识别:{icon_res}")
dx_list = icon_res['centre_xy'][0]
distance_dict = {}
distance_dict['6@hH@X'] = "H%io5u"
distance_dict['P7cH*^'] = "aOr*7C"
distance_dict['ht'] = 179
distance_dict['wt'] = 290
distance_dict['x'] = dx_list[0]
distance_dict['y'] = dx_list[1]
photo_distance = str(json.dumps(distance_dict))
photo_distance = photo_distance.replace(" ", '')
result = urllib.parse.quote(photo_distance, safe=':,')
icon_res = self.query_by_type(type_num=2, result=result)
return icon_res
def slide_verify(self):
slide_res = self.query_by_type(type_num=3)
self.stt = slide_res['st']
img = json.loads(slide_res['img'])
img1 = img['b1']
img2 = img['b2']
result = save_photo_and_check(
base64.b64decode(img1.split(',')[1]),
base64.b64decode(img2.split(',')[1])
)
slide_res = self.query_by_type(type_num=2, result=result)
return slide_res
def verify_captcha(self, img):
# 滑块验证
img1 = img['b1']
img2 = img['b2']
result = save_photo_and_check(
base64.b64decode(img1.split(',')[1]),
base64.b64decode(img2.split(',')[1])
)
verify_res = self.query_by_type(type_num=2, result=result)
s_code = verify_res.get("s_code")
for i in range(5):
if s_code == 16102:
verify_res = self.icon_verify()
if s_code == 16104:
verify_res = self.slide_verify()
if verify_res.get("vt"):
return verify_res
def check_card(self, verify_res):
headers = {
"accept": "application/json, text/plain, */*",
"accept-language": "zh-CN,zh;q=0.9",
"cache-control": "no-cache",
"content-type": "application/x-www-form-urlencoded;charset=UTF-8",
"origin": "https://mygiftcard.jd.com",
"pragma": "no-cache",
"priority": "u=1, i",
"referer": "https://mygiftcard.jd.com/",
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "same-site",
"user-agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1",
"x-referer-page": "https://mygiftcard.jd.com/giftcardForM.html",
"x-rp-client": "h5_1.0.0",
"cookie": self.cookies
}
params = {
"functionId": "queryBindGiftCardComApp"
}
timestamp_seconds = int(time.time())
timestamp_milliseconds = int(timestamp_seconds * 1000)
data = {
"cthr": "1",
"client": self.client,
"clientVersion": "",
"t": f"{timestamp_milliseconds}",
"loginWQBiz": "",
"appid": "mygiftcard",
"functionId": "queryBindGiftCardComApp",
"body": "{\"giftCardPwd\":\"%s\",\"verifyCode\":\"%s\",\"sessionId\":\"%s\",\"doBindFlag\":\"0\",\"queryGiftCardType\":\"0\",\"eid\":\"4TBJTR5FCBII3F54PRQD6TXYAKOQLBNWEV6NVBWLHM7PM7PW27OCOZIIAILSZQBTX6NVUETCTSYQCDSPPXHQAGBZCM\"}" % (
self.card_pwd, verify_res["vt"], self.sid),
"h5st": "20240614130840508;gg5g5nt6izm5g994;42e80;tk03wd9801d3918n8tHxp2fK2kXiBNcqXstVdyWawbLcWUotcu_14np6lQRBH6Gd7pM0hOZfzQ7qgWephK5qZV1BwooJ;8d635249ff3c200b20c68cda72ce7ddf65f659d8ca2147b89270fb8a9f65b0b9;4.7;1718341720508;UOWdfjkAqWdQiPtxRyyFaURqU8PWe4C1usSHvvs9cC7LFjIslb323aQngUcJCtE3apF16Bdoyp5fzK1HHUEAoEz1RbZIu6N4QYVYnAYRU8r_dBvMmfGygldhJU_GGH6-63XdX1tPXA8BPWbiWCkHVlDL_ll94QassdEHu96T8Md7wqRF0BQXSazN2muy9-iwvfuXZFp_HHdZM0NAzacOqGvZhgbnjPp4WB_AVZZ-H4IPDyY_iHztjeoBiRZMSKGdkAAbbNGUgSMqjPmOOkP4Nt5vwUfD-gDY0amq1vGn6j_uRHoPiq4gWZ-EbJa0hZ_Aqyrw2EtYxBXGSgh_7hjmAvN4iREdAt4ZOXqBfL3u0td3PUxwOkANs4yvS7qqBiecMpwu81MI1sPHONuFPWpxh1baggE7nDk8PeheJO0dl8zjLad9Prk3hGJ0DQIeqffFGvzEemLTD52YgeDqWQHLXbk3",
"x-api-eid-token": "jdd034TBJTR5FCBII3F54PRQD6TXYAKOQLBNWEV6NVBWLHM7PM7PW27OCOZIIAILSZQBTX6NVUETCTSYQCDSPPXHQAGBZCMAAAAMPMGWY7YQAAAAADLFECBBTN2M6QMX"
}
res = {}
for i in range(10):
try:
response = self.session.post(
self.card_url,
data=data,
headers=headers,
params=params,
proxies=self.proxies,
timeout=self.common_timeout
)
logger.info(f"订单ID{self.order_num},京东查卡返回:{response.text}")
except Exception as e:
logger.info(f'订单ID{self.order_num},发送京东请求查卡异常:{traceback.format_exc()}')
continue
res = response.json()
# 查卡出现error继续重新执行
if res.get("code") == "error":
logger.info(f'订单ID{self.order_num},查卡返回:{res}出error重新提交查卡...')
time.sleep(1)
continue
break
if not res.get("code"):
logger.info(f'订单ID{self.order_num},查卡返回:{res},十次请求绑卡没有内容....')
# 查卡出现error继续重新执行
if res.get("code") == "error":
logger.info(f'订单ID{self.order_num},查卡返回:{res}等待10s重新请求....')
# 验证码错误,请填写正确的验证码
if res.get("code") == "verifyerr":
logger.info(f'订单ID{self.order_num},查卡返回:{res},验证码错误重新请求....')
return res
def check_card_status(self, res):
code = res.get("code")
if code == "nobind":
self.pwd_key = res["data"]["pwdKey"]
return 200
elif code == "success":
self.remark = "绑卡成功"
return 100
elif code == 0:
self.remark = "点选验证失败"
return 110
elif "频繁" in res.get("data", {}).get("msg", ""):
self.remark = "账号操作频繁"
return 115
elif code == "NotLogin":
self.remark = "ck已失效"
return 113
elif code == "flask_wrong":
self.remark = "滑块验证失败"
return 110
elif code == "agent_error":
self.remark = "暂无可用代理"
return 110
elif code == "nofind":
self.remark = "卡密不存在"
return 105
elif code == "bindedself":
self.remark = "该账户已经绑定过该卡密"
return 104
elif code == "bindedother":
self.remark = "该卡密已绑定在其他账户"
return 104
elif code == "nofindmany":
self.remark = "输错卡密次数太多次"
return 115
elif code == "frequently":
self.remark = "操作频繁"
return 115
elif code == "risk":
self.remark = "卡密或账号存在风险"
return 120
elif code == "error":
self.remark = "提交错误"
return 120
elif code == "inactive":
self.remark = "卡未激活,请激活后重新提交"
return 105
elif code == "cardFreeze":
self.remark = "该卡处于冻结状态!"
return 115
elif code == "verifyerr":
self.remark = "验证失效!"
return 110
else:
self.remark = "check_card_status未知状态码"
return 111
def bind_card(self):
headers = {
"Accept": "*/*",
"x-rp-client": "h5_1.0.0",
"Accept-Language": "zh-CN,zh;q=0.9",
"content-type": "application/x-www-form-urlencoded;charset=UTF-8",
"Origin": "https://mygiftcard.jd.com",
"Referer": "https://mygiftcard.jd.com/",
"x-referer-page": "https://mygiftcard.jd.com/giftcardForM.html",
"Connection": "keep-alive",
"Cookie": self.cookies,
"User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS " + str(random.randint(13, 17)) + "_" + str(random.randint(1, 4)) + "_" + str(random.randint(1, 7)) + " like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E" + str(random.randint(101, 999)) + " Safari/604.1"
}
params = (
('functionId', 'queryBindGiftCardComApp'),
)
functionId = "queryBindGiftCardComApp"
body = "{\"pwdKey\":\"%s\",\"giftCardPwd\":\"%s\",\"doBindFlag\":\"1\",\"queryGiftCardType\":\"0\",\"eid\":\"6SYEB56PYKTUT2NILGP6SYACMVR2UGYMQDSA4WMPIIWT5VINQAYVKYB3IT4DKITJ67N4ZQBQHTJ2OJAEUIFTSFVZDU\"}" % (
self.pwd_key, self.card_pwd
)
data = {
"cthr": "1",
"client": self.client,
"clientVersion": "",
"t": "1717768647989",
"loginWQBiz": "",
"appid": "mygiftcard",
"functionId": functionId,
"body": body,
"x-api-eid-token": "jdd03FA6ADNTHNOCBBKUPNKJDGHAHWYKPSR2C264VP3YSVIDS3IM6MEG6YT7UIAZZUHFDO6BIOO5HRNSAEF76JPA7NH4GWUAAAAMP6L6X3OQAAAAACBHIFE2PO77RWQX",
"h5st": "20240607220020880%3Biyiizi56m9tgizy4%3B42e80%3Btk03w9be51bf118nVtoEb2q0oAKNVPqCgwBA3TrhaJ9-Jy5YcM1xtb1e_qmCpF602spIo13rIuCBlY20evmwuSMgV7w9%3B44a95c1efaf765e6f5e3c385c4ffa56abcf59be82e2bf128a9aac52587afae93%3B4.7%3B1717768820880%3BUO2sJ1o-YpgJ0kliExcXRV6JB3qlvh_KUj1iWE5l3TMeSDx7kl-Zvv7VNjvHeW3SswQngbBvGqrAsQ81lCYnjLSOzGXhYD8l8fTBN9wK_By8_uEk6Fcs76Ah3nSnl94K7H5-dz6XPzt_fJWYnrasWWNlbbHRf_ApOU6kI5R9YErFoIOrh8hWhEiTfkwYGbqE0n0C66Z7g0G9Ef_HqLTwAdjNnWc8G7Tl4KRABCXuVKPigl7xjfOuxXhXlGlHHITPgJhWLoAPt1aM8DnmFx5A2jisxxiKu8LnXGy2yKqALeZQcS2bEZnoYZSAmAX0wDnE6DHc7vJd6IE11dQ-ZW5WiHkU_FL3XGKvG5FG2upmOFljOFYHyMGC7EUpKulEgKq0ljakAdV7FmFOwUMXelSekPVoJ0ItwNNxuBSgXhis6TWihsqe3KzB7K89QdjAvxWa1hwGxzRNDtBwYXJoTMRJ0YDA"
}
response = self.session.post(
url=self.card_url,
params=params,
headers=headers,
data=data,
proxies=self.proxies,
timeout=60
)
logger.info(f"订单ID{self.order_num},执行绑卡返回:{response.json()}.")
return response.json()
def create_response(self, status_code, data=None):
"""创建统一的返回结构"""
return {
"code": status_code,
"msg": self.remark,
"data": data
}
def run(self):
i = 0
while i < 10:
i += 1
try:
# 构建ck
self.rebuild_cookies()
# # 获取ip代理
# self.get_proxies()
# # 检查ip代理
# self.check_ip()
# if not self.proxies:
# continue
# logger.info(f"订单:{self.order_num}, 当前代理ip{self.proxies}")
# 获取si
si_res = self.get_si()
if si_res.get("error") == "NotLogin":
self.remark = "ck失效"
return self.create_response(113)
self.sid = si_res['data']
# 获取fp
fp_res = self.query_by_type(type_num=0)
if not fp_res.get("fp"):
i -= 1
logger.info(f"订单ID{self.order_num}没有获取到fp重新执行...")
continue
self.st = fp_res['st']
self.fp = fp_res['fp']
# 获取验证码
captcha_res = self.query_by_type(type_num=1)
self.stt = captcha_res['st']
img = json.loads(captcha_res['img'])
# 校验验证码
verify_res = self.verify_captcha(img=img)
# 查卡
if verify_res.get("code") == 0:
res = self.check_card(verify_res)
status_code = self.check_card_status(res)
if status_code == 200:
# 绑卡
res = self.bind_card()
status_code = self.check_card_status(res)
return self.create_response(status_code, data=res)
else:
continue
except Exception as e:
logger.info(f"订单ID{self.order_num},报错:{traceback.format_exc()}")
continue
return self.create_response(110)
def func(item):
id = item.get("id")
ck = item.get("ck").strip()
account = item.get("account")
# 打印参数信息
logger.info(f"订单ID{id}ck{ck}")
logger.info(f"订单ID:{id}account{account}")
proxies = {}
logger.info(f"订单id:{id}当前使用代理IP{proxies}")
# 查询京东e卡余额
if "pt_key" in ck:
headers = {
"Host": "api.m.jd.com",
"accept": "application/json, text/plain, */*",
"x-rp-client": "h5_1.0.0",
"content-type": "application/x-www-form-urlencoded;charset=UTF-8",
"user-agent": "jdapp;android;13.2.0;;;M/5.0;appBuild/99580;ef/1;ep/%7B%22hdid%22%3A%22JM9F1ywUPwflvMIpYPok0tt5k9kW4ArJEU3lfLhxBqw%3D%22%2C%22ts%22%3A1735527628177%2C%22ridx%22%3A-1%2C%22cipher%22%3A%7B%22sv%22%3A%22EG%3D%3D%22%2C%22ad%22%3A%22DNYzZNGyEJG5ENLsZwZwZq%3D%3D%22%2C%22od%22%3A%22%22%2C%22ov%22%3A%22Ctq%3D%22%2C%22ud%22%3A%22DNYzZNGyEJG5ENLsZwZwZq%3D%3D%22%7D%2C%22ciphertype%22%3A5%2C%22version%22%3A%221.2.0%22%2C%22appname%22%3A%22com.jingdong.app.mall%22%7D;jdSupportDarkMode/0;Mozilla/5.0 (Linux; Android 9; SM-N9760 Build/PQ3B.190801.06281543; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/046248 Mobile Safari/537.36",
"x-referer-page": "https://o.jd.com/",
"origin": "https://o.jd.com",
"x-requested-with": "com.jingdong.app.mall",
"sec-fetch-site": "same-site",
"sec-fetch-mode": "cors",
"sec-fetch-dest": "empty",
"referer": "https://o.jd.com/",
"accept-language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7",
"cookie": ck
}
url = "https://api.m.jd.com/api"
params = {
"functionId": "queryChannelUserCard"
}
data = {
"cthr": "1",
"client": "h5",
"clientVersion": "",
"t": "1735527632064",
"loginWQBiz": "",
"appid": "mygiftcard",
"functionId": "queryChannelUserCard",
"body": "null",
"h5st": "20241230110035086;sp3ac9xxwwdddx28;aea58;tk04w1830583241lMysyR0tZSE9BXRZLn5SA1Ij8i4S7gNDBmZi9ZZJZFD45BdhOlB2Ji5FElMU9gl2NsMGNgBmNiZmM;9f1fc8c5b9de0ada4dacb1b882c8e51430c35aff970db8f3a3ccd7e3692fbcfe;5.0;1735527635086;WNpZcw5RhRW71ITAi8S7h0mB4MW9mQXRfRX9zQXR5xZOlZ3L3hjB2QXR5xZO3VzAgBGAzEWN4E2AoNDNnN2B4Y2M4ADL3EjBkFzMmBGB3Z3L3ZyIt8zB08yR5Z3XtRHNhVzAiFDMzIGNiFGMiNjN3AzN0ETM0ETN2EGBzUGAkRXRfRn94Ay_4MzR5Z3XtRHNrZ2OkBiC0oD-zcEMxQXRfR383ZXRPp3RuM0GKwUIE4y-AcD9GQXRfRH_qIz_4QyR5Z3XtRX_iBC_nUTRhEy_wo1R5x2RzYyR5Z3XtlSR5xZN5x2RhFyB3ZXR5Z3XtR3R5x2RiFyB3ZXR5Z3Xt9GN5x2RjFyB3ZXR5Z3XtZWRfRHMkQzR5ZXR5xZOpZ3L3JG83QXR5ZXRPpnNoZ3L3NG83QXR5ZXRPpHNsZ3L3RG83QXR5ZXRPpHN5x2RpVG83QXR5ZXRPp3RlhHNrZ2R5x2RoFyB3ZXR5Z3XtZWRfRn-iQXR5ZXRPpXN5x2RmozR5ZXR5xZOpZ3L3pzR5ZXR5xZOpZ3L3Jj83ZXR5Z3XeY3L3Jz_0IS70QXR5xZOcYXRPRHM08GLn5GBiZWM4YGM6Iz-3Z3L3VW93ZXR5Z3XeY3L3ZS93ZXRPp3Rj8SReNWMkVWLnBWNrVWNhZGLoh3JmVUFqJT_wEyJ5Z2Mi12GsllF5tGL5JD-qQSArUVRe5C8r0TG3Z3L3VD8mQXR5xp7;0860364254eeed316cf03b6e9189b81156a1dbfe46b14f11bb737ef9ca94590a",
"x-api-eid-token": "jdd03RTK2EWBHSQB57Z3GBX3KNGP6S2WJI223SDGHBNZRKROF6Y3XB6SXBFCHYODUG2HT2HUB4DTAMYLVG4KA4CBPRLEIYEAAAAMUCWA2AHQAAAAADF6RHEQ5KRPGBAX"
}
else:
headers = {
"accept": "application/json, text/plain, */*",
"accept-language": "zh-CN,zh;q=0.9",
"cache-control": "no-cache",
"content-type": "application/x-www-form-urlencoded;charset=UTF-8",
"origin": "https://mygiftcard.jd.com",
"pragma": "no-cache",
"priority": "u=1, i",
"referer": "https://mygiftcard.jd.com/",
"sec-ch-ua": "\"Chromium\";v=\"130\", \"Google Chrome\";v=\"130\", \"Not?A_Brand\";v=\"99\"",
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": "\"Windows\"",
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "same-site",
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36",
"x-referer-page": "https://mygiftcard.jd.com/giftcard/myGiftCardInit.action",
"x-rp-client": "h5_1.0.0",
"cookie": ck
}
url = "https://api.m.jd.com/api"
data = {
"cthr": "1",
"client": "pc",
"clientVersion": "",
"t": "1730966590942",
"loginWQBiz": "",
"appid": "mygiftcard",
"functionId": "queryGiftCardCountStatusComPc",
"body": "{\"queryList\":\"a,b,c,d,e,f\"}",
"h5st": "20241107160311414;8qef0ylv4z1144z4;6d3e8;tk03w90a71be018ny5d1NgFyNvS0NKiRk389_3HcPi4mGdz2JO3nrm6BwRAkqKfugs54-lV7fJviJWigXI7s2KdEfoFn;0790ddb3307a07756f70d0cd80af4242;4.9;1730966591414;pjbMhjpexaoe6nIN3TkQyqISGmkdJrJdJrESJrpjh7Jf6rJdJz1TIipjLDrgJTISJSVS6PYd1jof0bFTKqIfJqoe1rYTImFf1LofzfITJrJdJrEa-OFTGOEjLrJp-jJS5ToeyT4e6nodGSld4j4TJeYe7PYS4bVT6T1fFSYTyjpjxj5PKSEQKeFjLrJp-jJf9HIg3T0UG6VRFuWeDipjxjJOJrpjh7Jjyf2OVmUbeioY1LYWJrJdJ31QHyVT5ipjLDrgJj4f9G1WJrJdJTlPJrpjh7ZMLrJp7rJdJLYOJipjLrpjh7JjJrJdJPYOJipjLrpjh7Je6rJdJTYOJipjLrpjh7pfLDIj2XETJrpjLrJp-rojxjpe2iFjLrpjLDrgyfojxj5f2iFjLrpjLDrg53pjxjJf2iFjLrpjLDrgJbIg6zpfJrJdJnYOJipjLrpjh7pfLDIjAOEjLrpjLDrg2rJdJfkQJrpjLrJp-rojxjpQJrpjLrJp-rojxjpS0ipjLrpjh-kjxjpS9WlOzWFjLrJp-3kjLDLjSSnQGiEV0mXbZG3RMaFRJrJdJjoPJrpjLrJpwqJdJrkPJrpjh7Jj3ToNL-oe1zVRUq5d7zpf6rpWdq5P0ulS9G1WJrJdJnVO4ipjLD7N;864b5100b061d9e8cccbce6cd6690197",
"x-api-eid-token": "jdd03MOMPSVKGBFF6WCM3KNQK34LGPGSCNKB2WACDOVKFUNXQWAWDEVXSHMGQEQLJ6EUKKXZ7ARQA4CPF6EMRRUP5P7ETLEAAAAMTAWSXN6YAAAAACSZG7ABNML6KU4X"
}
params = {}
response = requests.post(url, headers=headers, params=params, data=data, proxies=proxies)
res = response.json()
logger.info(f"订单id:{id}获取余额JD返回{res}")
if res.get("code") == "000000":
item["money"] = res["data"]["totalAmount"]
return item
elif res.get("code") == "success":
item["money"] = res["data"]["a"]
return item
elif res.get("error") == "NotLogin":
item["money"] = "0.00"
return item
else:
item["money"] = "0.00"
return item