短信宝代码示例
本页整理国内短信 API v1 和 v2 的最小调用示例。复制示例前,请先确认你的业务使用哪个接口版本:v1 使用 u / p / m / c 参数并返回文本返回码;v2 使用 username / secret / to / content 参数并返回 JSON。
先确认接口版本
| 版本 | 请求地址 | 参数 | 成功判断 |
|---|---|---|---|
| v1 | https://api.smsbao.com/sms | u、p、m、c、g | 响应文本等于 0。 |
| v2 | https://api.smsbao.com/api/v2/sms | username、secret、to、content、product | JSON 中 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 做脱敏处理。
- 提交成功不等于用户一定收到,最终结果要结合发送记录或状态报告确认。


