稚昂长

海蓝不见鲸



相关文章

项目概述

西农学生宿舍里的直饮水机,以前接水刷卡即可,现在学校跟支付宝合作,使用企鹅共享,接水时需要扫码,再点击解锁,再按下机器上的按钮,才能出水,十分繁琐。本项目将扫码并点击手机中”解锁”按钮这一步进行简化,在app中点击一个按钮便可完成。

项目内容

于是我对扫码解锁进行了抓包,发现解锁机器只用提交两个数据,machineFunctionIdtoken,请求地址为 https://userapi.qiekj.com/machine/water/unlock

machineFunctionId是机器的id,token是每个支付宝用户登录企鹅共享生成的token,下一次登录时token会更新,抓到token后不再去登录企鹅共享则该token可一直使用。

该项目后台主要是php提交post,此处感谢π的技术支持。起初只是为了自己方便,而现在2021年6月9日17:19:52该项目已经覆盖29*2台机器(冷热)

该项目核心php文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
<?php
$Data_Base_Path="http://water.yzyyz.top/water/machinelist.txt";
$Url="https://userapi.qiekj.com/machine/water/unlock";
$string=$_GET['machine'];
$ID=Get_Id($Data_Base_Path,$string);
if($ID!=' '){
$Fanhui=Send_Post($Url,$ID);
}
function Get_Id($path,$string){
$file = fopen($path,"r");
$ID=" ";
while(!feof($file)){
$Content=trim(fgets($file));
$Postion=Str_Match($Content,$string);
if($Postion==-1) continue;
$Postion++;
$ID="";
for($i=0;$Postion<strlen($Content);$Postion++){
if($Content[$Postion]==' ') continue;
$ID=sprintf("%s%s",$ID,$Content[$Postion]);
$i++;
}
break;
}
fclose($file);
return($ID);
}
function Str_Match($Str1,$Str2){
if(strlen($Str1)<strlen($Str2)) return -1;
for($i=0;$i<strlen($Str2);$i++){
if($Str1[$i]!=$Str2[$i]){
return -1;
}else{
if($i==strlen($Str2)-1){
if($Str1[$i+1]==' '){
return $i;
}else{
return -1;
}
}
}
}
}
function Send_Post($Url,$Data){
$Data_Tmp=array(
'machineFunctionId'=>"$Data",
'token'=>'51c934f6ebc1d32f65ff92e0e859d2ea',
);
$Post_Data=http_build_query($Data_Tmp);
$Options=array(
'http'=>array(
'method'=>'POST',
'header'=>'Content-type:application/x-www-form-urlencoded',
'content'=>$Post_Data,
'timeout'=>120
)
);
$Content=stream_context_create($Options);
return(file_get_contents($Url,false,$Content));
}
echo $Fanhui;
?>

安卓用户通过app向water.php传入参数,传入的参数代表一台机器,后端通过检索机器找到机器id,再提交post请求,达到一键解锁效果

ios用户可手动配置快捷指令,以达到语音解锁(Siri),或一键解锁

如传入machine=4n1e-ice(4北校1楼东侧冷水),php则在machinelist.txt中找到对应id为202009041308369270000010955664458,再将id和token一起向https://userapi.qiekj.com/machine/water/unlock提交post请求,返回值为:

1
2
3
4
5
6
7
8
{
"code": 0,
"msg": "成功",
"data": {
"msgId": "xxxxxx"
},
"t": xxxxx
}

表示解锁成功,值得注意的是,该token代表我的支付宝账户(实现每个人都使用自己的token我不会。。。。),故用户接水花的是我的钱,目前稳定在平均每天10元左右,项目得以继续并不是因为我是土豪,而是因为有各位用户的捐赠,但还是有白嫖用户,故预计后期将上线用户系统,限制白嫖用户的使用。


 评论




博客内容遵循 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议

本站使用 volantis 作为主题 。