non-voipnon-voip
API 参考

non-voip 商户 API v1

面向客户的公开服务器到服务器 API,不包含内部 client 与 admin API。

打开 Swagger UI查看条款

Base URL 与身份验证

基础地址

https://non-voip-api.0246864.xyz/api/v1

在所有商户 API 请求中使用此主机。

身份验证

所有端点均需要 API 密钥。请将密钥保存在服务器上,并在每个请求头中传递。

X-Api-Key: YOUR_MERCHANT_API_KEY

快速开始

  1. 在 API Dashboard 中创建商户 API 密钥,并仅保存在服务器上。创建、轮换和使用密钥均需要有效的 merchant 套餐。
  2. 每个请求都发送 X-Api-Key。
  3. 读取目录,然后使用其中的 productServiceId 和唯一 Idempotency-Key 创建验证。
  4. 轮询验证,直到 data.messages 包含验证码。单条短信服务通常进入 completed,而不是 otp_received。
export NV_API_KEY='nvr_live_...'
API='https://non-voip-api.0246864.xyz/api/v1'

PRODUCT_SERVICE_ID=$(curl --fail-with-body --silent --show-error   "$API/catalog?test=true"   -H "X-Api-Key: $NV_API_KEY" | jq -r '.data[0].productServiceId')

VERIFICATION_ID=$(curl --fail-with-body --silent --show-error   -X POST "$API/verifications?test=true"   -H "X-Api-Key: $NV_API_KEY"   -H "Idempotency-Key: $(uuidgen)"   -H "Content-Type: application/json"   -d "{"productServiceId":"$PRODUCT_SERVICE_ID"}" | jq -r '.data.verificationId')

for _ in $(seq 20); do
  curl --fail-with-body --silent --show-error --max-time 15     "$API/verifications/$VERIFICATION_ID?test=true"     -H "X-Api-Key: $NV_API_KEY" | jq -e '.data.messages[0].code' && break
  sleep 5
done

生产集成要点

仅限服务器端

请将 API 密钥保存在后端或 serverless 函数中,切勿暴露在浏览器 JavaScript 或移动应用内。

版本化响应

所有路由均以 /api/v1 开头。成功数据位于 data;错误处理应同时检查 HTTP 状态和应用 code。

重试与限流

写操作请发送 Idempotency-Key,并在重试时复用同一值。请遵循 X-RateLimit-* 与 Retry-After 响应头。

测试模式(不会真实扣费)

添加 ?test=true 可获得与生产一致的确定性数据,且不会调用供应商或扣除余额。身份验证、请求日志和限流仍然生效。

Webhook 通知

在 API Dashboard 中配置 HTTPS 地址和所需事件。事件包括 verification.created、verification.otp_received、verification.completed、verification.expired、verification.cancelled 和 verification.failed。

单条短信验证码通过 verification.completed 到达。多条短信服务可能在完成前发送 verification.otp_received。这一点最容易出错:若只订阅 verification.otp_received,单条短信集成可能什么都收不到,因此请务必同时订阅 verification.completed。

使用原始请求体的 HMAC-SHA256 小写摘要验证 X-Webhook-Signature,并在 10 秒内返回 2xx。每次投递最多尝试 5 次,采用指数退避,即一次首发加四次重试。每次尝试都会重新构建请求体,因此 timestamp 与 X-Webhook-Signature 每次都不同;切勿跨尝试缓存或复用签名。而 X-Webhook-Delivery 在各次尝试之间保持不变,这正是应当按它去重的原因。

请保持接收端可用。连续 5 次投递用尽全部尝试后,non-voip 会自动停用该 webhook,并清除地址、签名密钥和已订阅事件。系统会通知你,但在你于 API Dashboard 重新登记地址并生成新密钥之前不会再有任何投递——长时间故障失去的是配置本身,而不仅仅是错过的事件。

Payload 示例

{
  "event": "verification.completed",
  "timestamp": "2026-08-27T10:00:00.000Z",
  "balance": 124.5,
  "data": {
    "subscriptionId": "550e8400-e29b-41d4-a716-446655440000",
    "phoneNumber": "+15550001234",
    "otpCode": "483920",
    "messages": [
      {
        "code": "483920",
        "message": "Your verification code is 483920",
        "receivedAt": "2026-08-27T09:59:58.000Z"
      }
    ],
    "status": "completed",
    "productServiceId": "0f1a5a6c-1c2d-4f2b-9a1e-3c9d4b7e2f10"
  }
}

商户 - 余额

商户 - 目录

商户 - 验证

资源

API 控制台

创建 API 密钥并管理 webhook 设置。

Swagger UI

仅用于公开 Merchant API v1 的交互式参考;不包含内部 client 与 admin API。

支持

需要集成帮助?请通过 support@non-voip.com 联系我们的支持团队。