Sqxy宿舍电费微信推送
前言
宿舍电费只能使用支付宝完美校园小程序查询,还要忍受一堆广告。因此这里也是直接抓包,获得了电费查询的url。通过curl请求、crontab再配合微信测试号实现定时推送。
软件工具
curl
这里只要安装了curl
即可。
使用方法
- 获取微信测试号
https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login
- 获取微信AppID、AppSecert
- 创建推送模板,获取Template_ID
- 调用access_token接口获取Token
- 调用电费接口获取剩余电费
- 调用测试号推送接口推送电费数据
- 将脚本放入Openwrt,使用Crontab定时推送
模板
微信测试号消息创建模板
今天是:{{date.DATA}}
您的宿舍号是:{{roomno.DATA}}
当前剩余电费:{{electricities.DATA}}
微信测试号消息推送json模板
{
"touser": "被推送的用户id,用户关注测试号后获取",
"template_id": "你的template_id,消息模板创建成功后获取",
"url": "http://weixin.qq.com/download",
"data": {
"date": {
"value": "2025年7月3日"
},
"roomno": {
"value": "30#2001"
},
"electricities": {
"value": "12.23度"
}
}
}
完美校园电费请求参数json模板
{
"timestamp": "2025-03-02 17:48:02",
"method": "samllProgramGetRoomState",
"bizcontent": "{\"payproid\":953,\"schoolcode\":\"1402\",\"roomverify\":\"2-11--2-6005\",\"businesstype\":2}",
"sourceId": 1
}
完美校园电费返回值json模板
{
"businessData": {
"description": "剩余电量",
"quantity": "97.55",
"quantityunit": "度"
},
"returncode": "SUCCESS",
"returnmsg": "获取成功",
"subCode": null,
"subMsg": null
}
测试结果
附件
- shell脚本源码
#!/bin/bash
### configs
# appID
APPID='你的APPID'
# appsecret
APPSECRET='你的APPSECRET'
# template_id
TEMPLATE_ID='你的TEMPLATE_ID'
# access_token
TOKEN=""
# followers
FOLLOWERS=(
'用户token1' # 用户1
'用户token2' # 用户2
)
### headers
# user-agent
USER_AGENT="User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 Edg/107.0.1418.35"
# accept
ACCEPT="accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"
# content type
CONTENT_TYPE="Content-Type: application/json"
###
### date
# date formated
# current date
CUR_DATE=$(date '+%Y年%m月%d日')
# Room No.
ROOMNO='你的宿舍号'
# electricities
ELECTRICITIES=""
# json data
JSON_DATA=""
# template url
TEMPLATE_URL="http://weixin.qq.com/download"
###
### urls
# get token
GET_TOKEN_URL="https://api.weixin.qq.com/cgi-bin/token"
GET_TOKEN_URL_PARAM="grant_type=client_credential&appid=${APPID}&secret=${APPSECRET}"
### functions
# get token
get_token() {
local RET=$(curl -s -H "${USER_AGENT}" -H "${ACCEPT}" -d "${GET_TOKEN_URL_PARAM}" $GET_TOKEN_URL)
# unset TOKEN
TOKEN=$(echo $RET | cut -d : -f 2 | cut -d , -f 1 | cut -d \" -f 2)
return 0
}
# push Message
push_message() {
get_token
get_electricities
# push message
JSON_PATH="./data.json"
PUSH_MESSAGE_URL="https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=${TOKEN}"
for ((i = 0; i < ${#FOLLOWERS[@]}; i++)); do
local user=${FOLLOWERS[$i]}
encode_data_json ${user}
local RET=$(curl -s -H "${USER_AGENT}" -H "${ACCEPT}" -H "${CONTENT_TYPE}" -d "${JSON_DATA}" $PUSH_MESSAGE_URL)
# local RET=$(curl -H $USER_AGENT -H $ACCEPT -H $CONTENT_TYPE -d $JSON_PATH $PUSH_MESSAGE_URL)
echo $RET
done
}
# 构造模板json数据
encode_data_json() {
# unset JSON_DATA
JSON_DATA="{\"touser\": \"$1\",\"template_id\": \"${TEMPLATE_ID}\",\"url\": \"${TEMPLATE_URL}\",\"data\": {\"date\": {\"value\": \"${CUR_DATE}\"},\"roomno\": {\"value\": \"${ROOMNO}\"},\"electricities\": {\"value\": \"${ELECTRICITIES}\"}}}"
}
# get electricities
get_electricities() {
local RET=$(
curl -s -X POST 'https://cloudpaygateway.59wanmei.com:8087/paygateway/smallpaygateway/trade' \
-H 'Origin: https://cloudpaygateway.59wanmei.com:8087' \
-H 'Accept: application/json, text/plain, */*' \
-H 'X-Requested-With: com.eg.android.AlipayGphone' \
-H 'Referer: https://cloudpaygateway.59wanmei.com:8087/pay/index.html?token=你的token&_timestamp=1740900078698&customerId=1402' \
-H 'Sec-Fetch-Site: same-origin' \
-H 'Sec-Fetch-Dest: empty' \
-H 'Accept-Encoding: gzip' \
-H 'Sec-Fetch-Mode: cors' \
-H 'x-mass-tappid: 2019030163398604' \
-H 'Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7' \
-H 'Content-Type: application/json;charset=UTF-8' \
-H 'Content-Length: 193' \
-H 'User-Agent: Mozilla/5.0 (Linux; Android 14; OPD2201 Build/UKQ1.230924.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/105.0.5195.148 MYWeb/0.11.0.250212163947 UWS/3.22.2.9999 UCBS/3.22.2.9999_220000000000 Mobile Safari/537.36 NebulaSDK/1.8.100112 Nebula AlipayDefined(nt:WIFI,ws:560|0|2.5,ac:sp) AliApp(AP/10.7.0.8000) AlipayClient/10.7.0.8000 Language/zh-Hans useStatusBar/true isConcaveScreen/false Region/CNAriver/1.0.0 MiniProgram APXWebView DTN/2.0' \
-H 'Connection: Keep-Alive' \
-H 'Host: cloudpaygateway.59wanmei.com:8087' \
--data '{"timestamp":"2025-03-02 15:21:20","method":"samllProgramGetRoomState","bizcontent":"{\"payproid\":953,\"schoolcode\":\"1402\",\"roomverify\":\"2-11--6-6035\",\"businesstype\":2}","sourceId":1}'
)
# unset ELECTRICITIES
ELECTRICITIES=$(echo $RET | cut -d : -f 4 | cut -d , -f 1 | cut -d \" -f 2)
if [ $(printf "%.0f" ${ELECTRICITIES}) -gt "10" ]; then
ELECTRICITIES+="度,电费大大滴有"
else
ELECTRICITIES+="度,你滴,快充电费~"
fi
}
# main function
push_message