📖文档介绍
🔖本协议基于HTTP服务,使用POST请求方式,
请求为表单数据格式( a=1&b=2&c=3 ),应答为JSON格式数据( {"a":"1","b":"2","c":"3"} )。
字段命名方式:驼峰法。
统一请求和响应编码:UTF-8
接口地址为:网关地址(https://xxx.xxx)加详细调用地址(/xx/xx)
时间戳与当前时间不得少于5秒
sign参数计算规则:多个指定参数值组合成字符串后计算MD5 32位小写结果
假设要求:MD5(userId + content + timestamp + MD5(password))
参数:userId(帐号ID)=test
password(帐号密码)=123
content=测试内容
timestamp=1596254400000
计算:MD5(password)=202cb962ac59075b964b07152d234b70
组合字符串:test测试内容1596254400000202cb962ac59075b964b07152d234b70
sign结果:MD5(组合字符串)=92f4abe1a56cac716bc790c93149a3ae注意:md5计算结果皆为小写
👬短信批量发送
调用地址
地址:/sms/api_v1.php?mod=sendMessageGroup
参数名 | 类型 | 必填 | 说明 |
userId | String | 是 | 账号ID |
phone | String | 是 | 接收短信的手机号,每个手机号使用,分隔 (英文逗号) |
tempId | String | 是 | 短信模板ID |
signName | String | 是 | 短信签名ID |
timeStamp | Long | 是 | 10位时间戳 |
varParam | String | 否 | 变量参数,短信模板变量对应的实际值(JSON格式)。传入实际值需经过base64编码。支持传入多个参数,示例:{"name":"张三","number":"1390000****"} base64编码后:eyJuYW1lIjoi1cXI/SIsIm51bWJlciI6IjEzOTAwMDAqKioqIn0= |
sign | String | 是 | 签名,用于校验权限。计算方式:md5(userId+md5(passWord)+tempId+signName+timeStamp+source_id) 注意:md5计算结果皆为小写 |
source_id | int | 否 | 渠道ID,填写渠道后会自动使用快要到期的套餐进行发送。不填写渠道ID则会自动使用短信签名ID所属渠道 |
正常返回信息
{
"code":1, //API状态码
"msg":"处理成功", //返回提示
"smsCount":1, //返回消耗短信条数
"messageLogId":1070 //返回短信日志ID
}
异常返回信息
{
"code":-1, //API状态码
"msg":"sign鉴权失败", //返回提示
}
实例代码
PHP实例代码作者:小杜同学
<?php
$userId=''; //用户ID
$password=''; //用户密码
$phone=''; //要发送的手机号,多个手机号使用英文逗号分隔
$signName=''; //签名ID
$tempId=''; //模板ID
$varParam=json_encode(array('code'=>'123456')); //模板变量参数
$varParam=base64_encode($varParam); //将json转换为base64编码
$source_id=''; //渠道ID
$time=time(); //时间戳
$sign=md5($userId.md5($password).$tempId.$signName.$time.$source_id); //计算签名
$data="userId={$userId}&phone={$phone}&tempId={$tempId}&signName={$signName}&timeStamp={$time}&varParam={$varParam}&sign={$sign}&source_id={$source_id}"; //拼接待提交数据
$res=curl_request('https://xxx'.'/sms/api_v1.php?mod=sendMessageGroup',$data); //发送请求
die($res); //返回请求返回的数据
/**
* 使用CURL进行HTTP请求
* 参数1:访问的URL,
* 参数2:post数据(不填则为GET),
* 参数3:提交的$cookies,
* 参数4:是否返回$cookies
*/
function curl_request($url, $post = '', $cookie = '', $returnCookie = 0, $httpHeader=[]){
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)');
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_AUTOREFERER, 1);
// curl_setopt($curl, CURLOPT_REFERER, "http://XXX");
if ($post) {
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
}
if ($cookie) {
curl_setopt($curl, CURLOPT_COOKIE, $cookie);
}
curl_setopt($curl, CURLOPT_HTTPHEADER, $httpHeader);
curl_setopt($curl, CURLOPT_HEADER, $returnCookie);
curl_setopt($curl, CURLOPT_TIMEOUT, 60);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
$data = curl_exec($curl);
if (curl_errno($curl)) {
return '';
}
curl_close($curl);
if ($returnCookie) {
list($header, $body) = explode("\r\n\r\n", $data, 2);
preg_match_all("/Set\-Cookie:([^;]*);/", $header, $matches);
$info['cookie'] = substr($matches[1][0], 1);
$info['content'] = $body;
return $info;
} else {
return $data;
}
}
?>
C#实例代码作者:彭大摩
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
class Program
{
static async Task Main(string[] args)
{
string userId = ""; // 用户ID
string password = ""; // 用户密码
string phone = ""; // 要发送的手机号,多个手机号使用英文逗号分隔
string signName = ""; // 签名ID
string tempId = ""; // 模板ID
string sourceId = ""; // 渠道ID
// 创建模板变量参数对象
var templateParams = new TemplateParams
{
Code = "123456"
};
string varParam = SerializeAndBase64Encode(templateParams);
long timestamp = DateTimeOffset.Now.ToUnixTimeSeconds(); // 时间戳
string sign = CalculateMD5Hash(userId + CalculateMD5Hash(password).ToLower() + tempId + signName + timestamp + sourceId); // 计算签名
string apiUrl = "https://xxx/sms/api_v1.php?mod=sendMessageGroup";
string postData = $"userId={userId}&phone={phone}&tempId={tempId}&signName={signName}&timeStamp={timestamp}&varParam={varParam}&sign={sign.ToLower()}&source_id={sourceId}";
using (HttpClient httpClient = new HttpClient())
{
var content = new StringContent(postData, Encoding.UTF8, "application/x-www-form-urlencoded");
HttpResponseMessage response = await httpClient.PostAsync(apiUrl, content);
if (response.IsSuccessStatusCode)
{
string responseContent = await response.Content.ReadAsStringAsync();
Console.WriteLine(responseContent);
}
else
{
Console.WriteLine($"HTTP Error: {response.StatusCode}");
}
}
}
static string CalculateMD5Hash(string input)
{
using (var md5 = System.Security.Cryptography.MD5.Create())
{
byte[] inputBytes = Encoding.UTF8.GetBytes(input);
byte[] hashBytes = md5.ComputeHash(inputBytes);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < hashBytes.Length; i++)
{
sb.Append(hashBytes[i].ToString("X2"));
}
return sb.ToString();
}
}
static string SerializeAndBase64Encode(object obj)
{
string json = JsonConvert.SerializeObject(obj);
byte[] bytes = Encoding.UTF8.GetBytes(json);
return Convert.ToBase64String(bytes);
}
}
class TemplateParams
{
[JsonProperty("code")]
public string Code { get; set; }
}
更多实例代码等待添加
API状态码
code | 说明 |
1 | 处理成功 |
-1 | sign鉴权失败 |
-2 | 无可用套餐(次数用尽) |
-3 | 渠道信息不存在 |
-4 | 对接模块不存在 |
-5 | 用户身份不存在 |
-6 | 用户身份无接口对接权限 |
-7 | 超出接口群发最多数 |
-8 | 超出网页群发最多数 |
-9 | 用户未实名 |
-10 | 用户已被封禁 |
-11 | 时间戳异常 |
-12 | 短信模板不存在 |
-13 | 短信模板中变量未被全部替换 |
-14 | 短信签名不存在 |
-15 | 短信签名暂未审核通过 |
-16 | 短信模板暂未审核通过 |
-17 | 收信手机号不能为空 |
-18 | IP未加入白名单 |
⭐获取账户信息
调用地址
地址:/sms/api_v1.php?mod=getUserInfo
参数名 | 类型 | 必填 | 说明 |
userId | String | 是 | 账号ID |
pass | String | 是 | 密码 |
正常返回信息
{
"code":1, //API状态码
"msg":"处理成功", //返回提示
"data":{
"money":"0.00", //余额
"addtime":"1684046219", //注册时间
"endtime":"1693547371", //登录时间
"rna":"1", //1=已实名。0=未实名
"ipWhiteList":"127.0.0.1"//IP白名单,每个IP使用\n分隔
}
}
异常返回信息
{
"code":-1, //API状态码
"msg":"身份错误", //返回提示
}
💡获取所有套餐信息
调用地址
地址:/sms/api_v1.php?mod=getPackOrderList
参数名 | 类型 | 必填 | 说明 |
userId | String | 是 | 账号ID |
pass | String | 是 | 密码 |
正常返回信息
{
"code":1, //API状态码
"msg":"处理成功", //返回提示
"data":[
{
"id":"1", //用户套餐ID
"order_num":"2023061700001", //订单号
"name":"通知短信体验包", //套餐名称
"expire_time":"1718529186", //到期时间戳
"source_id":"1" //渠道ID
"num":"100" //剩余短信条数
"uid":"1" //账号ID
"state":"1" //套餐状态,1=正常,0=不可用
"packId":"1" //购买时套餐源ID
}
]
}
异常返回信息
{
"code":-1, //API状态码
"msg":"身份错误", //返回提示
}