接收短信状态回调通知,实时获取短信接收数据
GKServer 将接收到的短信数据以 POST 请求推送到此接口。
| 项目 | 说明 |
|---|---|
| 回调地址 | https://api.gk-data.cn/sms/webhook |
| 查询地址 | https://api.gk-data.cn/api/SmsCallback/{dbKey} |
| Content-Type | application/json |
| 协议 | HTTPS(TLS 1.2 / 1.3) |
GKServer 推送短信数据时,请求体为以下 JSON 格式:
json{
"imei": "860123456789012",
"phoneNumber": "15071219506",
"senderNumber": "10086",
"content": "【中国移动】您的话费余额为50元",
"receiveTime": "2026-04-24T15:30:00"
}
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
imei | string | 否 | 接收短信的设备 IMEI 号 |
phoneNumber | string | 否 | 接收短信的手机号码 |
senderNumber | string | 否 | 发送方号码 |
content | string | 否 | 短信内容 |
receiveTime | datetime | 否 | 短信接收时间(ISO 8601 格式) |
主动查询指定设备在最近时间段内收到的短信:
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
dbKey | path | string | 必填 | 数据库标识键 |
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
imei | query | string | 否 | 设备 IMEI 号 |
phoneNumber | query | string | 否 | 手机号码 |
minutes | query | integer | 否 | 查询最近 N 分钟的短信(默认 1) |
bashcurl -X GET "https://api.gk-data.cn/api/SmsCallback/mydb?imei=860123456789012&phoneNumber=15071219506&minutes=10"
pythonfrom flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/sms/webhook', methods=['POST'])
def sms_webhook():
data = request.json
imei = data.get('imei')
phone = data.get('phoneNumber')
sender = data.get('senderNumber')
content = data.get('content')
receive_time = data.get('receiveTime')
# 处理短信数据(存储、触发业务逻辑等)
print(f"收到短信: {sender} -> {phone}: {content}")
return jsonify({'status': 'ok'}), 200
if __name__ == '__main__':
app.run(port=8080)
javascriptconst express = require('express');
const app = express();
app.use(express.json());
app.post('/sms/webhook', (req, res) => {
const { imei, phoneNumber, senderNumber, content, receiveTime } = req.body;
// 处理短信数据
console.log(`收到短信: ${senderNumber} -> ${phoneNumber}: ${content}`);
res.json({ status: 'ok' });
});
app.listen(8080);
csharp// Controller
[ApiController]
[Route("sms")]
public class SmsController : ControllerBase
{
[HttpPost("webhook")]
public IActionResult Webhook([FromBody] SmsData data)
{
// 处理短信数据
Console.WriteLine($"收到短信: {data.SenderNumber} -> {data.PhoneNumber}");
return Ok(new { status = "ok" });
}
}
// 数据模型
public class SmsData
{
public string Imei { get; set; }
public string PhoneNumber { get; set; }
public string SenderNumber { get; set; }
public string Content { get; set; }
public DateTime ReceiveTime { get; set; }
}
200 状态码,否则 GKServer 可能重试推送receiveTime 采用 ISO 8601 格式(如 2026-04-24T15:30:00)dbKey 为数据库标识,由 GKServer 配置决定/api/SmsCallback/ 路径仍可使用,推荐使用新的 /sms/webhook目前主流的国产安卓手机系统(如小米、华为、OPPO、vivo 等)为了防范电信诈骗,内置了隐私保护机制。当系统识别到短信内容包含"验证码"、"密码"、"登录"等敏感字眼时,会自动在通知栏中对关键数字进行打码(显示为 ***)或直接提示"敏感数据已隐藏"。
如果您的应用程序或自动化工具需要通过读取通知栏来获取短信内容,就必须手动关闭此项安全保护。
由于手机系统版本不断更新,设置菜单位置可能变动。最快的方法:
打开手机【设置】,在顶部【搜索栏】中输入关键字:验证码 或 保护 或 隐私,在搜索结果中寻找"验证码安全保护"或"智能隐藏敏感信息"并将其关闭。
如果搜索不到,请参考以下各品牌的具体步骤:
小米系统的验证码拦截最为严格,通常需要在短信设置中关闭。
路径 A(推荐):
路径 B(系统设置进入):
华为和荣耀机型的设置方式基本一致,主要在短信应用内部设置。
绿厂系的系统通常将此选项放在了系统的安全与密码设置中。
路径 A(密码与安全):
路径 B(智能防偷窥):
部分自带面部识别的机型,如果别人在看你的屏幕,会自动隐藏通知。
vivo 的系统通常将短信隐私保护放在通知设置或隐私设置中。
三星或类原生安卓系统(如 Pixel、摩托罗拉),通常不会专门针对验证码打码,但可能会在锁屏状态下隐藏内容。
Q:我已经按照上述步骤关闭了,为什么还是抓取不到或者显示已隐藏?