jidesheng6 发表于 2019-7-16 22:19

记录一次写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()

轻轻闪过 发表于 2019-7-17 05:15

如果是家里的宽带,可以试试重连换ip

zzgaot 发表于 2019-7-17 06:50

看你写的我觉得我才是小白,你都是我仰视的大神了?

肥肥一家 发表于 2019-7-17 08:25

感谢楼主分享宝贵的实战经验!

hyolyn 发表于 2019-7-17 09:41

少用global 。。直接把变量写到main里就可以了 或者写在 import下函数定义都写上面 调用写下面加个if __name__=="__main__"

lcl0219 发表于 2019-7-17 12:55

感谢楼主分享最近正在研究python

jidesheng6 发表于 2019-7-17 13:29

hyolyn 发表于 2019-7-17 09:41
少用global 。。直接把变量写到main里就可以了 或者写在 import下函数定义都写上面 调用写下面加个if ...

毕竟是小白呀,谢谢大佬指点

jidesheng6 发表于 2019-7-17 13:31

轻轻闪过 发表于 2019-7-17 05:15
如果是家里的宽带,可以试试重连换ip

哎,这app真的,就算用它客户端到达一定定次数也会被屏蔽ip
页: [1]
查看完整版本: 记录一次写python的经过【如果不是限制还是可行的】