短信回调 Webhook

接收短信状态回调通知,实时获取短信接收数据

工作流程

📱 手机收到短信
GKServer 采集
📨 Webhook 回调
您的业务系统

接口信息

回调接口(POST)— 接收短信数据

POST https://api.gk-data.cn/sms/webhook

GKServer 将接收到的短信数据以 POST 请求推送到此接口。

查询接口(GET)— 主动查询短信

GET https://api.gk-data.cn/api/SmsCallback/{dbKey}
项目说明
回调地址https://api.gk-data.cn/sms/webhook
查询地址https://api.gk-data.cn/api/SmsCallback/{dbKey}
Content-Typeapplication/json
协议HTTPS(TLS 1.2 / 1.3)

回调数据格式(POST)

GKServer 推送短信数据时,请求体为以下 JSON 格式:

json{
  "imei": "860123456789012",
  "phoneNumber": "15071219506",
  "senderNumber": "10086",
  "content": "【中国移动】您的话费余额为50元",
  "receiveTime": "2026-04-24T15:30:00"
}
字段类型必填说明
imeistring接收短信的设备 IMEI 号
phoneNumberstring接收短信的手机号码
senderNumberstring发送方号码
contentstring短信内容
receiveTimedatetime短信接收时间(ISO 8601 格式)

查询接口(GET)

主动查询指定设备在最近时间段内收到的短信:

路径参数

参数名位置类型必填说明
dbKeypathstring必填数据库标识键

查询参数

参数名位置类型必填说明
imeiquerystring设备 IMEI 号
phoneNumberquerystring手机号码
minutesqueryinteger查询最近 N 分钟的短信(默认 1)

请求示例

bashcurl -X GET "https://api.gk-data.cn/api/SmsCallback/mydb?imei=860123456789012&phoneNumber=15071219506&minutes=10"

回调接收示例

Python (Flask)

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)

Node.js (Express)

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);

C# (ASP.NET Core)

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; }
}

注意事项

  1. 回调接口由 GKServer 主动调用,您的系统只需提供接收端点
  2. 响应状态码:收到回调后应返回 200 状态码,否则 GKServer 可能重试推送
  3. 数据安全:所有通信通过 HTTPS 加密传输
  4. 时间格式receiveTime 采用 ISO 8601 格式(如 2026-04-24T15:30:00
  5. 查询接口中的 dbKey 为数据库标识,由 GKServer 配置决定
  6. 兼容旧路径/api/SmsCallback/ 路径仍可使用,推荐使用新的 /sms/webhook
  7. 手机验证码保护:部分安卓手机会自动隐藏验证码内容,导致回调数据不完整,请参考下方指南关闭

📱 手机"验证码安全保护"关闭指南

📌 为什么会出现"敏感数据已隐藏"?

目前主流的国产安卓手机系统(如小米、华为、OPPO、vivo 等)为了防范电信诈骗,内置了隐私保护机制。当系统识别到短信内容包含"验证码"、"密码"、"登录"等敏感字眼时,会自动在通知栏中对关键数字进行打码(显示为 ***)或直接提示"敏感数据已隐藏"。

如果您的应用程序或自动化工具需要通过读取通知栏来获取短信内容,就必须手动关闭此项安全保护。

💡 通用快捷方法(适用于所有品牌)

由于手机系统版本不断更新,设置菜单位置可能变动。最快的方法:

打开手机【设置】,在顶部【搜索栏】中输入关键字:验证码保护隐私,在搜索结果中寻找"验证码安全保护"或"智能隐藏敏感信息"并将其关闭。

如果搜索不到,请参考以下各品牌的具体步骤:

1️⃣ 小米 / Redmi (MIUI / 澎湃 OS)

小米系统的验证码拦截最为严格,通常需要在短信设置中关闭。

路径 A(推荐):

  1. 在桌面找到并打开【短信】应用
  2. 点击右上角的【设置】图标(齿轮形状,或点击右上角三个点进入设置)
  3. 向下滑动,找到【验证码安全保护】选项
  4. 将其右侧的开关【关闭】

路径 B(系统设置进入):

  1. 打开手机【设置】
  2. 依次点击【应用设置】【系统应用设置】【短信】
  3. 找到并关闭【验证码安全保护】

2️⃣ 华为 / 荣耀 (HarmonyOS / MagicOS)

华为和荣耀机型的设置方式基本一致,主要在短信应用内部设置。

  1. 在桌面打开【短信】应用
  2. 点击右上角的【四个点】【三个点】图标,在弹出的菜单中选择【设置】
  3. 选择【高级】(部分旧版本无需此步骤)
  4. 找到【验证码安全保护】【通知栏不显示验证码内容】
  5. 将其右侧的开关【关闭】

3️⃣ OPPO / 一加 / 真我 (ColorOS / realme UI)

绿厂系的系统通常将此选项放在了系统的安全与密码设置中。

路径 A(密码与安全):

  1. 打开手机【设置】
  2. 下滑找到【密码与安全】 → 点击【系统安全】
  3. 在"隐私保护"或"应用安全"板块下,找到【验证码安全保护】
  4. 将其开关【关闭】

路径 B(智能防偷窥):

部分自带面部识别的机型,如果别人在看你的屏幕,会自动隐藏通知。

  1. 打开手机【设置】【通知与状态栏】
  2. 找到【智能隐藏敏感信息】【通知防偷窥】并关闭

4️⃣ vivo / iQOO (OriginOS)

vivo 的系统通常将短信隐私保护放在通知设置或隐私设置中。

  1. 打开手机【设置】
  2. 点击【通知与状态栏】(或搜索"通知显示")
  3. 找到【锁屏通知】【通知显示内容】
  4. 确保勾选的是【显示通知及内容】,而不是"隐藏敏感内容"
  5. (部分新版本):进入【设置】【隐私】 → 找到【智能隐私打码】【验证码保护】并关闭

5️⃣ 其他品牌(三星、原生安卓等)

三星或类原生安卓系统(如 Pixel、摩托罗拉),通常不会专门针对验证码打码,但可能会在锁屏状态下隐藏内容。

  1. 打开手机【设置】【通知】【锁屏通知】
  2. 选择【显示内容】
  3. 确保没有开启"隐藏联系人和内容"之类的选项

❓ 常见问题排查 (FAQ)

Q:我已经按照上述步骤关闭了,为什么还是抓取不到或者显示已隐藏?

  1. 重启手机:部分系统在修改底层隐私设置后,需要重启手机才能对已经运行的监听服务生效
  2. 重新授予权限:前往系统的【设置】→【应用管理】→ 找到你的抓取软件,把它的"通知读取权限"(Notification Access)关掉再重新打开一次
  3. 第三方短信拦截软件:检查手机是否安装了腾讯手机管家、360手机卫士、国家反诈中心等安全软件,这些软件的"防骚扰/防诈骗"功能可能接管了短信通知,请在这些软件中将你的应用加入白名单
⚠️ 安全警告:关闭"验证码安全保护"意味着所有的短信验证码都将以明文形式显示在通知栏中。如果您正在公共场合使用手机,或者手机安装了来源不明的应用,存在验证码被他人偷窥或恶意软件读取的风险。建议在完成所需的自动化任务或测试后,重新将此安全功能开启,以保障您的资金和账号安全。