Skip to main content
首页/文档中心/开发者中心/短信宝代码示例

短信宝代码示例

本页整理国内短信 API v1 和 v2 的最小调用示例。复制示例前,请先确认你的业务使用哪个接口版本:v1 使用 u / p / m / c 参数并返回文本返回码;v2 使用 username / secret / to / content 参数并返回 JSON。

先确认接口版本

版本请求地址参数成功判断
v1https://api.smsbao.com/smsu、p、m、c、g响应文本等于 0。
v2https://api.smsbao.com/api/v2/smsusername、secret、to、content、productJSON 中 code 等于 0。

接口 v2 示例

v2 返回统一 JSON,建议新系统优先使用 v2,并在服务端统一处理 code、msg 和 data。

cURL

curl -G "https://api.smsbao.com/api/v2/sms" \
  --data-urlencode "username=$SMSBAO_USER" \
  --data-urlencode "secret=$SMSBAO_SECRET" \
  --data-urlencode "to=13800138000" \
  --data-urlencode "content=【短信宝】您的验证码是123456,5分钟内有效。"

PHP

<?php
$params = http_build_query([
"username" => getenv("SMSBAO_USER"),
"secret" => getenv("SMSBAO_SECRET"),
"to" => "13800138000",
"content" => "【短信宝】您的验证码是123456,5分钟内有效。",
]);

$body = file_get_contents("https://api.smsbao.com/api/v2/sms?" . $params);
$result = json_decode($body, true);
if (($result["code"] ?? -1) !== 0) {
throw new RuntimeException("短信提交失败:" . ($result["msg"] ?? $body));
}
$taskId = $result["data"]["taskId"] ?? null;

Java

String content = java.net.URLEncoder.encode(
  "【短信宝】您的验证码是123456,5分钟内有效。",
  java.nio.charset.StandardCharsets.UTF_8
);
String url = "https://api.smsbao.com/api/v2/sms"
  + "?username=" + System.getenv("SMSBAO_USER")
  + "&secret=" + System.getenv("SMSBAO_SECRET")
  + "&to=13800138000"
  + "&content=" + content;

java.net.http.HttpClient client = java.net.http.HttpClient.newHttpClient();
java.net.http.HttpRequest request = java.net.http.HttpRequest.newBuilder(java.net.URI.create(url)).GET().build();
String body = client.send(request, java.net.http.HttpResponse.BodyHandlers.ofString()).body();
if (!body.contains(""code":0")) {
throw new IllegalStateException("短信提交失败:" + body);
}

Node.js

const params = new URLSearchParams({
username: process.env.SMSBAO_USER,
secret: process.env.SMSBAO_SECRET,
to: "13800138000",
content: "【短信宝】您的验证码是123456,5分钟内有效。"
});

const res = await fetch("https://api.smsbao.com/api/v2/sms?" + params.toString());
const result = await res.json();
if (result.code !== 0) {
throw new Error("短信提交失败:" + result.msg);
}
const taskId = result.data?.taskId;

Python

import os
import requests

params = {
  "username": os.environ["SMSBAO_USER"],
  "secret": os.environ["SMSBAO_SECRET"],
  "to": "13800138000",
  "content": "【短信宝】您的验证码是123456,5分钟内有效。",
}

result = requests.get("https://api.smsbao.com/api/v2/sms", params=params, timeout=10).json()
if result.get("code") != 0:
  raise RuntimeError("短信提交失败:" + result.get("msg", "未知错误"))
task_id = result.get("data", {}).get("taskId")

Go

values := url.Values{}
values.Set("username", os.Getenv("SMSBAO_USER"))
values.Set("secret", os.Getenv("SMSBAO_SECRET"))
values.Set("to", "13800138000")
values.Set("content", "【短信宝】您的验证码是123456,5分钟内有效。")

resp, err := http.Get("https://api.smsbao.com/api/v2/sms?" + values.Encode())
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
if !strings.Contains(string(body), ""code":0") {
panic("短信提交失败:" + string(body))
}

接口 v1 示例

v1 返回文本返回码。响应文本等于 0 表示提交成功,其他返回按接口 v1 返回码排查。

cURL

curl -G "https://api.smsbao.com/sms" \
  --data-urlencode "u=$SMSBAO_USER" \
  --data-urlencode "p=$SMSBAO_API_KEY" \
  --data-urlencode "m=13800138000" \
  --data-urlencode "c=【短信宝】您的验证码是123456"

Node.js

const params = new URLSearchParams({
u: process.env.SMSBAO_USER,
p: process.env.SMSBAO_API_KEY,
m: "13800138000",
c: "【短信宝】您的验证码是123456"
});

const res = await fetch("https://api.smsbao.com/sms?" + params.toString());
const code = (await res.text()).trim();
if (code !== "0") {
throw new Error("短信提交失败,返回码:" + code);
}

Python

import os
import requests

params = {
  "u": os.environ["SMSBAO_USER"],
  "p": os.environ["SMSBAO_API_KEY"],
  "m": "13800138000",
  "c": "【短信宝】您的验证码是123456",
}

code = requests.get("https://api.smsbao.com/sms", params=params, timeout=10).text.strip()
if code != "0":
  raise RuntimeError(f"短信提交失败,返回码:{code}")

返回结果处理

版本处理方式注意事项
v1读取响应文本,判断是否等于 0。不要把 v2 的 JSON 解析逻辑用于 v1。
v2解析 JSON,判断 code 是否等于 0,并读取 data.taskId。不要把 v1 的文本返回码含义套到 v2。
  • 账号、ApiKey、secret 只放在服务端环境变量、密钥管理或配置中心。
  • 业务日志中对手机号、验证码、ApiKey、secret 做脱敏处理。
  • 提交成功不等于用户一定收到,最终结果要结合发送记录或状态报告确认。