最近遇到一个程序员,他和我聊了一下电动车的防盗之路,感觉很有意思,就把这个事情记录了下来。
这位同学在广州工作,每天都是电动车通勤。车子是深远的牌子,这位同学进行了改造,给车子安装了哈啰的防盗设备,可以远程手机启动关闭车辆,查看车辆位置。
但他怎么都没有想到,小偷只偷电池,不偷车。主要是因为电动车需要上牌,车架号抹除或者重复的话,不能上牌,甚至会报警。
思索再三,这位同学从某宝购买了一款带有4G功能,支持GPS定位的电池,来实时追踪车辆位置。
遗憾的是,这个电池开发商只提供了小程序,车辆的位置信息只能打开小程序才能看到。整个行业只有哈啰才会提供付费的位置变动的短信提醒,其他开发商为了成本考虑,也没有提供APP,也没有提供微信推送功能。
于是,这位同学想到了另外一种办法。
他下载了Fiddler。设置了全局代理之后,再打开小程序,抓取获取地理位置的api接口的数据包。
有了API接口之后,他又来到Bmob后端云,创建了一个云函数,代码如下:
function onRequest(request, response, modules) {
var http = modules.oHttp;
//获取数据库对象
var db = modules.oData;
//模拟请求
const headers = {
'Host': 'www.yugps.com',
'content-type': 'application/json;charset=utf-8',
'abp.tenantid': '',
'accept': 'application/json, text/plain, */*',
'.aspnetcore.culture': 'zh-Hans',
'accept-language': 'zh-CN,zh-Hans;q=0.9',
'authorization': '这个授权信息这里保密,每个人都不一样',
'referer': 'https://servicewechat.com/wx1a60cf37e5d67920/83/page-frame.html',
'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E217 MicroMessenger/6.8.0(0x16080000) NetType/WIFI Language/en Branch/Br_trunk MiniProgramEnv/Mac'
};
const data = {
"coordinates": "GCJ02",
"id": 171595
};
var options = {
"url": 'https://www.yugps.com/api/Position/GetMonitorDataSamplePreOrNext',
"headers": headers,
"body": JSON.stringify(data)
};
http.post(options,
function(error, res, body) {
var resultObject = JSON.parse(body);
const device = resultObject.result;
var dd = device.gLatitude + ''gLatitude = dd.slice(0, -1);
// 获取到数据
const data = {
"gLatitude": device.gLatitude,
"gLongitude": device.gLongitude,
"offlineOrStaticTime":device.offlineOrStaticTime
};
// 将位置等数据插入到Bmob后端云中
db.insert({
//表名和数据
"table": "diandong",
"data": data,
},
function(err, data) { //回调函数
response.send([err, data]);
});
}
);
}
然后他打开了这个云函数的定时任务,设定每1分钟执行一次,不断去获取电动车的位置。
最后,他还是用云函数结合定时任务,不断去判断位置是否发生改变,一旦发生变动,就往企业微信内部群上发送一条信息。
发送企业微信的代码如下:
function onRequest(request, response, modules) {
var http = modules.oHttp;
const data = {
msgtype: 'text',
text: {
content: '报警信息'
}
};
const headers = {
'Content-Type': 'application/json'
};
var options = {
"url": 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=693axxx6-7aoc-4bc4-97a0-0ec2sifa5aaa',
"headers": headers,
"body": JSON.stringify(data)
};
http.post(options,
function(error, res, body) {
response.send([err, data]);
}
);
}
太屌了,让我看的眼花缭乱。这一番骚操作你怎么看?