记录一次写python的经过【如果不是限制还是可行的】
写这个脚本的原因是因为我爸在用这个xx来聚财进行收款,顺手抓了一下包,发现其登陆的时候就是post了一个经过base64编码的密文和手机号码给服务器,其他值都是固定的,密码不变的话,从第一次返回来的json中就可以用到后面进行查询的一些基本参数基本分析:
app登陆链接:https://aus-hcapp.huiyinxun.com/aus-hcapp/MobileService/login
登陆方法:post
需要提交post主体信息:container,dt,pass,mobile,type,version,mark
其中mobile就是手机号码,pass是经过base64编码的密码信息
查询收款链接:https://aus-hcapp.huiyinxun.com/aus-hcapp/MobileService/queryNotificationCatagories
方法:post
需要提交参数:container,dt,uid,walletId,tk,mobile,type,version,mark
其中uid,walletId,tk可以在app登陆返回json中得到
之后的问题其实就是怎么来实现实时到账的查询了,访问了几次查询收款信息的response发现,其中包含了收款信息,我只能用笨方法
通过收款时间戳和当前时间戳进行比对来确定是否是实时到账
当时自己写的方法是这样的:
推测:时间都是以时间戳方式存在 时间靠后,时间戳越大,所以比较时间戳,每秒轮询一次api接口查询到款通知,把到款时间转为时间戳
如果当前时间戳减去到账时间戳小于10,说明这笔钱在10秒内刚刚支付过,故可以判定为实时到账,如果大于10,证明过去了10秒-无限可能大的时间,
2019-06-27 12:55:29 =》 1561611329 #收款时间
2019-06-27 15:03:29 =》 1561618989 #当前时间
1561618989-1561611329=7660#7660/3600大概是2小时前,这边单位是秒
所以依次查询时间戳,如果账单第一条,和当前时间戳相减小于10,推送过去一条到账信息
推送完毕之后,再次轮询账单,和当前时间戳进行比较,如果大于10,则pass
但是这个有个已知问题,我这样一直要请求服务器,而app有个限制,单个ip访问总次数会限制一周不能访问【应该是这样的】,所以这个脚本现在感觉也只是废了,免费代{过}{滤}理基本没什么用
github有些免费代{过}{滤}理速度慢,收费代{过}{滤}理不太值得,所以后面我就放弃了,就分享一下吧,顺便问问有没有什么解决办法,有的话也不错啊,代码写的很乱,我是个纯小白,大佬勿喷
#coding:utf-8
import requests,base64,json,re,time,thread,os
from wxpy import *
def Login_APP():
global proxies
global container
global dt
global mark
global Mobile
global App_LoginCallBack_Uid#用户UID
global App_LoginCallBack_walletId #回调中的walletId
global App_LoginCallBack_tk#回调中的tk
global header
header = {"User-Agent":"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5"}
Mobile = ""
Password = base64.encodestring("").strip("\n")
container = "3"
dt = "A"
mark = "m"
App_loginUrl = "https://aus-hcapp.huiyinxun.com/aus-hcapp/MobileService/login"#中银来聚财的app登陆接口
Login_data={
"container":container,
"dt":dt,
"pass":Password,
"mobile":Mobile,
"type":"pass",
"version":"3.02.013",
"mark":mark
}
try:
Deal_Json = json.loads(requests.post(App_loginUrl,data=Login_data,timeout=1,headers=header).text)["result"]#从登陆链接取回来的登陆信息
if Deal_Json == None :
print u"账号状态异常,可能是账号密码不正确或者脚本异常,及时登录app查看账号状态"
exit(0)
else:
App_LoginCallBack_Uid = Deal_Json.get("uid")
App_LoginCallBack_walletId = Deal_Json.get("walletId")
App_LoginCallBack_tk = Deal_Json.get("tk")
Vaule_List =
print u"登陆正常...可以继续使用。"
time.sleep(1.5)
os.system("cls")
return Vaule_List
except Exception:
print u"连接错误或者其他错误请查阅信息\n也可能IP被屏蔽,请重启路由器"
exit(0)
Query_CallBack = Login_APP()
def Query_wallet():
global start
global App_Content
global App_Tstime
start=int(time.time())
App_queryUrl = "https://aus-hcapp.huiyinxun.com/aus-hcapp/MobileService/queryNotificationCatagories"#查询账户到款信息
Query_data = {
"container":container,
"dt":dt,
"uid":Query_CallBack,
"walletId":Query_CallBack,
"tk":Query_CallBack,
"type":" ",
"mobile":Mobile,
"version":"3.02.013",
"mark":mark
}
try:
App_Raw = json.loads(requests.post(App_queryUrl,data=Query_data).text)["result"]
App_Content = App_Raw.get("content")
App_Tstime = App_Raw.get("tssj")
Tstime_unix = int(time.mktime(time.strptime(App_Tstime,"%Y-%m-%d %H:%M:%S")))
return Tstime_unix
except:
time.sleep(2)
Query_wallet()
def Send_Owner():
Wx = Bot(cache_path=True)
while 1:
Now_time = int(time.time())
time.sleep(2)
Tstime_unix = Query_wallet()
if (Now_time-Tstime_unix) <=2:
Wx.friends().search(u"").send("中银来聚财收款通知:\n%s\n收款时间:%s"%(App_Content,App_Tstime))
Wx.friends().search(u"").send("中银来聚财收款通知:\n%s\n收款时间:%s"%(App_Content,App_Tstime))
time.sleep(5)
else:
pass
Send_Owner()
如果是家里的宽带,可以试试重连换ip 看你写的我觉得我才是小白,你都是我仰视的大神了? 感谢楼主分享宝贵的实战经验! 少用global 。。直接把变量写到main里就可以了 或者写在 import下函数定义都写上面 调用写下面加个if __name__=="__main__" 感谢楼主分享最近正在研究python hyolyn 发表于 2019-7-17 09:41
少用global 。。直接把变量写到main里就可以了 或者写在 import下函数定义都写上面 调用写下面加个if ...
毕竟是小白呀,谢谢大佬指点 轻轻闪过 发表于 2019-7-17 05:15
如果是家里的宽带,可以试试重连换ip
哎,这app真的,就算用它客户端到达一定定次数也会被屏蔽ip
页:
[1]