接入准备
准备事项 | 说明 |
---|
完成企业认证+实名认证 | 根据运营商实名发送短信的要求,使用国内文本短信之前需要登录控制台完成企业认证 + 实名认证。否则无法报备签名以及使用。 |
API账号和密码 | 调用短信接口需要用到的账号和密码,获取的方式可查看控制台操作指引。 |
加白请求ip | 需要在控制台的"产品配置"目录下绑定您的服务器公网出口IP,否则我方接口将会拦截您的请求致使短信提交失败。配置方式可查看控制台操作指引,绑定IP能够有效防止盗发。 |
短信签名 | 完成签名申请并审核通过后,获取签名名称,含签名标识的括号:【】,使用未审核通过的签名,接口会拦截并报错。 |
短信模板 | 完成模板申请并审核通过后,获取模板完整内容(含变量大小)。使用未审核通过的内容,验证码账号会默认拦截并报错,其他类型账号不会拦截报错,但会进入人工审核,由审核人员决定是否下发。 |
短信格式
短信类型 | 短信格式 | 短信内容示例 |
---|
验证码短信 | 【短信签名】+ 正文(包含验证码文案) | 向用户手机发送: 【创蓝云智】您正在申请手机注册,验证码为:123456,5分钟内有效! |
通知短信 | 【短信签名】+ 正文 | 向用户手机发送: 【创蓝云智】尊敬的客户,您购买的会员卡已于11月29日正式到期。如您要继续使用,请于11月29日前及时续费或重新购买。 |
会员营销短信 | 【短信签名】+ 正文 + 退订语 | 向用户手机发送: 【创蓝云智】双十一重磅来袭,晚20点抢600送600!详见www.chuanglan.com拒收请回复R。 |
注:正文可以包含链接、地址、换行等文案。退订语目前只支持“拒收请回复R”,不支持小写r,并且只能放在整个短信内容的最末尾,后续可能会随工信部政策调整。
发送时间限制
- 验证码(YZM开头)、通知(N开头)、会员营销(M开头)这三类账号没有限制,但M账号22点之后成功率会受到较大影响,会出现拦截,如有疑问请联系我方商务人员。
- 特殊类型账号发送时间默认是早8到晚8点,不在发送时间内提交短信,接口将会拦截您的请求并返回提交报错。如有时间上的调整,请联系我方商务人员。
发送短信接口
接口注意事项
- 文本短信所有类型账号都适用于同一个发送短信接口。
- 该目录下有多个发送接口,适用于不同的传参场景,详情请查看入参示例,根据开发逻辑按需接入。
- 如果您还需要状态回执,请记得传入report参数,即"report"="true",否则将无法获得状态回执。
- 如果调用短信接口后返回错误,您需要根据返回的响应码提示检查传入的请求参数及其取值是否正确。更多信息请见文档末尾提交响应码说明。
- 更多发送问题,请查阅短信发送FAQ
- 如您需要了解计费规则,请查阅计费概述。
- 账户有默认的余额提醒,详情查阅余额提醒文档。
1、相同内容单、群发接口
请求地址:
- 请求方式:json 格式封装的字符串,采用 post 方式提交请求
- Content-Type:application/json
- 编码格式:utf-8
- 请求地址:
https://smssh1.253.com/msg/v1/send/json
请求参数:
参数名称 | 类型 | 是否必传 | 描述 | 示例 |
---|
account | string | 是 | API 账号,登录控制台获取,获取方式请查阅控制台操作指引。 | "account":"N6000001" |
password | string | 是 | API 密码,登录控制台获取,获取方式请查阅控制台操作指引。 | "password":"123456" |
msg | String | 是 | 此处填写审核通过的签名和模板,中文括号是代表短信签名。内容长度支持1~3500个字符(含变量)。 用营销账号提交短信时最末尾需带上退订语“拒收请回复R”不支持小写r,否则营销短信将进入人工审核。 | "msg":"【创蓝云智】您正在申请手机注册,验证码为:123456,5分钟内有效!" |
phone | string | 是 | 接收的手机号;多个手机号使用英文逗号间隔,一次不要超过 1000 个; | 批量群发"phone":"15800000000,15300000000" |
report | string | 否 | 如您需要状态回执,则需要传"true",不传默认为"false",则无法获取状态回执。 | "report":"true" |
callbackUrl | string | 否 | 状态回执的回调地址,请传入完整带http开头的地址,不传默认为空,请勿传入空格,否则会造成地址推送错误。地址可通过接口入参传入,也可在控制台手动配置,可查看控制台操作指引。 | "callbackUrl":"https://" |
uid | string | 否 | 自定义参数,如订单号或短信发送记录流水号,最大支持64 位,状态回执会回传,不传默认为空。 | "uid":"321abc" |
sendtime | string | 否 | 定时发送时间,*≤*当前时间则立即发送;只能定时 7 天内,格式为 yyyyMMddHHmm ,不传默认为空,立即发送。 | "sendtime":"202411260950" |
extend | string | 否 | 下发短信号码扩展码,用于匹配上行回复,上行报告会回传。一般5位以内(只支持传数字),不传默认为空。 | "extend":"555" |
请求示例:
{
"account":"N6000001",
"password":"123456",
"msg":"【创蓝云智】您正在申请手机注册,验证码为:123456,5分钟内有效!",
"phone":"15800000000",
"sendtime":"202411260950",
"report":"true",
"extend":"555",
"uid":"321abc"
}
响应参数:
参数名称 | 类型 | 描述 | 示例 |
---|
code | string | 提交响应状态码,返回“0”表示提交成功(其他错误请参考提交响应码) | "code":"0" |
msgId | string | 消息 id(32 位纯数字) | "msgId":"24073116453300902203000007708373" |
time | string | 响应时间 | "time":"20240731164533" |
errorMsg | string | 状态码说明(提交成功返回空) | "errorMsg":"" |
响应示例:
{
"code":"0",
"msgId":"23112615065227118",
"time":"20231126150652",
"errorMsg":""
}
2、不同内容单、群发接口
- 此接口的变量分隔符为“英文逗号”,以及每组号码的参数间隔符为“英文分号”,为避免分隔错您的变量值,请不要在手机号参数值parmas里传入英文逗号和英文分号当做内容,否则会导致分隔混乱。建议您把英文逗号换为中文逗号。
请求地址:
- 请求方式:json 格式封装的字符串,采用 post 方式提交请求
- Content-Type:application/json
- 编码格式:utf-8
- 请求地址:
https://smssh1.253.com/msg/variable/json
请求参数:
参数名称 | 类型 | 是否必传 | 描述 | 示例 |
---|
account | string | 是 | API 账号,登录控制台获取,获取方式请查阅控制台操作指引。 | "account":"N6000001" |
password | string | 是 | API 密码,登录控制台获取,获取方式请查阅控制台操作指引。 | "password":"123456" |
msg | String | 是 | 此处填写审核通过的签名和模板,中文括号是代表短信签名。内容长度支持1~3500个字符(含变量),变量符号固定使用{$var},最多 20 个。用营销账号提交短信时最末尾需带上“拒收请回复R”不支持小写r,否则营销短信将进入人工审核,退订语只支持“拒收请回复R”。 | "msg":"【创蓝云智】尊敬的{$var},您正在申请手机注册,验证码为:{$var},5分钟内有效!" |
params | string | 是 | 手机号码和变量参数,多组参数使用英文分号区分;此字段上限支持 1000 个参数组。格式不符的参数系统自动过滤掉 | 批量群发"params":"15800000000,张先生,123456;13800000000,李小姐,123456" |
report | string | 否 | 如您需要状态回执,则需要传"true",不传默认为"false",则无法获取状态回执。 | "report":"true" |
callbackUrl | string | 否 | 状态回执的回调地址,请传入完整带http开头的地址,不传默认为空,请勿传入空格,否则会造成地址推送错误。地址可通过接口入参传入,也可在控制台手动配置,可查看控制台操作指引。 | "callbackUrl":"https://" |
uid | string | 否 | 自定义参数,如订单号或短信发送记录流水号,最大支持64 位,状态回执会回传,不传默认为空。 | "uid":"321abc" |
sendtime | string | 否 | 定时发送时间,*≤*当前时间则立即发送;只能定时 7 天内,格式为 yyyyMMddHHmm,不传默认为空,立即发送。 | "sendtime":"202411260950" |
extend | string | 否 | 下发短信号码扩展码,用于匹配上行回复,上行报告会回传。一般5位以内(只支持传数字),不传默认为空 | "extend":"555" |
PS:params 参数组的具体格式:参数组从左往右第一个为发送的手机号码,第二个为第一个变量,第三个为第二个变量,以此类推,变量的数目需要和msg里传的变量符号$var}数量一一对应。
请求示例:
{
"account":"N6000001",
"password":"123456",
"msg":"【创蓝云智】尊敬的{$var},您正在申请手机注册,验证码为:{$var},5分钟内有效!",
"params":"15800000000,张先生,123456;13800000000,李小姐,123456",
"sendtime":"202411260950",
"report":"true",
"extend":"555",
"uid":"321abc"
}
响应参数:
参数名称 | 类型 | 描述 | 示例 |
---|
code | string | 提交响应状态码,返回“0”表示提交成功(其他错误请参考提交响应码) | "code":"0" |
failNum | string | 失败条数 | "failNum":"0" |
successNum | string | 成功条数 | "successNum":"1" |
msgId | string | 消息 id(32 位纯数字) | "msgId":"24073116453300902203000007708373" |
time | string | 响应时间 | "time":"20240731164533" |
errorMsg | string | 状态码说明(成功返回空) | "errorMsg":"" |
响应示例:
{
"failNum":"0",
"time":"20240731164533",
"successNum":"2",
"msgId":"24073116453300902203000007708373",
"errorMsg":"",
"code":"0"
}
3、相同内容加密接口
加密算法
- SIGN 生成规则:所有参数,按照 key(不包括 sign)值得 ASCII 码表升序,对 value 做拼接,最后拼接密码的 MD5(32 位小写)得到结果 values,对 values 再次 MD5 (32 位小写),得到结果即为 SIGN 参数,
- 对称加密规则:对传入参数做 3des 对称加密,加密秘钥为 密码 MD5(32 位小写)
加密算法工具类示例如下
package com.dragon.utils;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.digest.DigestUtils;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.util.TreeMap;
public class DES3Utils {
private static final String CHARSET_NAME = "UTF-8";
private static final String DESEDE = "DESede";
private static final String DEFAULT_CIPHER_ALGORITHM = "DESede/ECB/PKCS5Padding";
public static void main(String[] args) throws Exception {
//加密普通短信
send();
//加密普通短信
variableSend();
}
public static String encryptBase64(String data, String key) throws Exception {
byte[] result = encrypt(data, key);
return Base64.encodeBase64String(result);
}
private static byte[] encrypt(String data, String key) throws Exception {
if (key == null || "".equals(key)) {
throw new Exception("key need to exists");
}
byte[] byteData = data.getBytes(CHARSET_NAME);
SecretKey secretKey = new SecretKeySpec(build3DesKey(key), DESEDE);
Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
return cipher.doFinal(byteData);
}
public static String decrypt(String data, String key) throws Exception {
if (key == null || "".equals(key)) {
throw new Exception("scretKey need to exists");
}
byte[] byteData = Base64.decodeBase64(data);
SecretKey secretKey = new SecretKeySpec(build3DesKey(key), DESEDE);
Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, secretKey);
byte[] result = cipher.doFinal(byteData);
return new String(result, CHARSET_NAME);
}
private static byte[] build3DesKey(String keyStr) throws Exception {
// 3des定长密钥
byte[] key = new byte[24];
byte[] temp = keyStr.getBytes();
if (key.length > temp.length) {
System.arraycopy(temp, 0, key, 0, temp.length);
} else {
System.arraycopy(temp, 0, key, 0, key.length);
}
return key;
}
public static void send() throws Exception{
JSONObject json = new JSONObject();
String pwd = DigestUtils.md5Hex("a.1234567");
json.put("account","YZM4722127");
json.put("extend","1233");
json.put("msg","【创蓝CTU】您的验证码是:123456,请妥善保管");
json.put("phone",encryptBase64("18016290912",pwd));
json.put("report","true");
json.put("timestamp",System.currentTimeMillis());
json.put("uid","S5043203--71----0000336");
TreeMap<String ,Object> paramMap = JSONObject.parseObject(json.toJSONString(), new TypeReference<TreeMap<String, Object>>(){});
StringBuffer buffer1 = new StringBuffer();
paramMap.values().stream().forEach( obj->{
buffer1.append(obj.toString());
});
buffer1.append(pwd);
String sign = DigestUtils.md5Hex(buffer1.toString());
json.put("sign",sign);
// postJson(url,json.toJSONString())
System.out.println(json);
}
public static void variableSend() throws Exception{
JSONObject json = new JSONObject();
String pwd = DigestUtils.md5Hex("a.123456");
json.put("account","YZM4722127");
json.put("extend","1233");
json.put("msg","【创蓝】您的验证码是:{$var},请妥善保管");
json.put("params",encryptBase64("15617436626,123456",pwd));
json.put("report","true");
json.put("timestamp",System.currentTimeMillis());
json.put("uid","S5043203--71----0000336");
TreeMap<String ,Object> paramMap = JSONObject.parseObject(json.toJSONString(), new TypeReference<TreeMap<String, Object>>(){});
StringBuffer buffer1 = new StringBuffer();
paramMap.values().stream().forEach( obj->{
buffer1.append(obj.toString());
});
buffer1.append(pwd);
String sign = DigestUtils.md5Hex(buffer1.toString());
json.put("sign",sign);
// postJson(url,json.toJSONString())
System.out.println(json);
}
}
请求参数
URL:https://smssh1.253.com/msg/v1/send/encrypt/json
请求方式:json 格式封装的字符串,采用 post 方式提交请求
请求协议:http,https
编码格式:utf-8
Content-Type:application/json
参数名称 | 类型 | 是否必传 | 描述 | 示例 |
---|
account | string | 是 | API 账号,登录控制台获取,获取方式请查阅控制台操作指引。 | "account":"N6000001" |
sign | 签名 | 是 | 生成规则见红色标注部分 1 | |
msg | String | 是 | 此处填写审核通过的签名和模板,中文括号是代表短信签名。内容长度支持1~3500个字符(含变量)。用营销账号提交短信时最末尾需带上退订语“拒收请回复R”不支持小写r,否则营销短信将进入人工审核。 | "msg":"【创蓝云智】您正在申请手机注册,验证码为:123456,5分钟内有效!" |
phone | String | 是 | 手机号码,多个手机号码使用英文逗号分隔,用 3des 加密,加密规则见目录的加密算法或者 DEMO | 批量群发"phone":"15800000000,15300000000" |
timestamp | String | 是 | 客户请求提交时间戳, 长度 13 的 long 类型时间戳 | |
report | string | 否 | 如您需要状态回执,则需要传"true",不传默认为"false",则无法获取状态回执。 | "report":"true" |
callbackUrl | string | 否 | 状态回执的回调地址,请传入完整带http开头的地址,不传默认为空,请勿传入空格,否则会造成地址推送错误。地址可通过接口入参传入,也可在控制台手动配置,可查看控制台操作指引。 | "callbackUrl":"https://" |
uid | string | 否 | 自定义参数,如订单号或短信发送记录流水号,最大支持64 位,状态回执会回传,不传默认为空。 | "uid":"321abc" |
sendtime | string | 否 | 定时发送时间,*≤*当前时间则立即发送;只能定时 7 天内,格式为 yyyyMMddHHmm,不传默认为空,立即发送。 | "sendtime":"202411260950" |
extend | string | 否 | 下发短信号码扩展码,用于匹配上行回复,上行报告会回传。一般5位以内(只支持传数字),不传默认为空。 | "extend":"555" |
响应参数
字段 | 类型 | 描述 |
---|
time | String | 时间 |
msgId | String | 创蓝短信 ID(32 位) |
code | string | 状态码,0:成功 |
erorMsg | String | 错误信息 |
请求示例
{
"account": "YZM4722127",
"extend": "1233",
"msg": "【签名】你的订单号:1214341退订回TD",
"phone": "H527T6T60/r9RQ9TQzr426NGQRPxKvMNv7C61+fuD6CNCQ63jlBKeQ==",
"report": "true",
"sendStamp": "1595434437467",
"uid": "S5043203--71----0000334",
"sign":"325fa8e6512776ec7c6f6caf7efba79b"
}
响应示例
{
"code": "130",
"msgId": "",
"time": "20200720095755",
"errorMsg": "请求参数错误"
}
"code": "0",为请求接口提交成功,非 0 为不成功,错误原因请参考"短信提交接口响应码说明"
一次提交 msgid 不得超过 100 个,单个 phones 不超过 100 个。
4、不同内容加密接口
请求参数
URL:https://smssh1.253.com/msg/v1/variable/encrypt/json
请求方式:json 格式封装的字符串,采用 post 方式提交请求
请求协议:http,https
编码格式:utf-8
Content-Type:application/json
字段 | 类型 | 必传 | 说明 |
---|
account | string | 是 | API 账号,登录控制台获取,获取方式请查阅控制台操作指引。 |
Sign | 签名 | 是 | 生成规则见红色标注部分 1 |
msg | String | 是 | 此处填写审核通过的签名和模板,中文括号是代表短信签名。变量符号固定使用:“{$var}”,内容长度支持1~3500个字符(含变量)。用营销账号提交短信时最末尾需带上“拒收请回复R”否则营销短信将进入人工审核,退订语现在只支持“拒收请回复R”。示例:【253 云通讯】您的验证码是 123456。 |
params | String | 是 | 手机号码和变量参数,多组参数使用英文分号;区分,必填,使用 3des 加密,加密规则见目录的加密算法或者 DEMO |
timestamp | String | 是 | 客户请求提交时间戳, 长度 13 的 long 类型时间戳 |
report | string | 否 | 如您需要状态回执,则需要传"true",不传默认为"false",则无法获取状态回执。 |
callbackUrl | string | 否 | 状态回执的回调地址,请传入完整带http开头的地址,不传默认为空,请勿传入空格,否则会造成地址推送错误。地址可通过接口入参传入,也可在控制台手动配置,可查看控制台操作指引。 |
uid | string | 否 | 自定义参数,如订单号或短信发送记录流水号,最大支持64 位,状态回执会回传,不传默认为空。 |
sendtime | string | 否 | 定时发送时间,*≤*当前时间则立即发送;只能定时 7 天内,格式为 yyyyMMddHHmm,不传默认为空,立即发送。 |
extend | string | 否 | 下发短信号码扩展码,用于匹配上行回复,上行报告会回传。一般5位以内(只支持传数字),不传默认为空。 |
响应参数
字段 | 类型 | 必传 | 说明 |
---|
time | String | 时间 | |
msgId | String | 创蓝短信 ID(32 位) | |
code | string | 状态码,0:成功 | |
erorMsg | String | 错误信息 | |
请求示例
{
"account": "YZM4722127",
"extend": "34",
"msg": "【这5是】{$var}这是一条",
"params": "H527T6T60/qvKAyEatxrV70bS0APMnxxKt0bCvtF5uuw5/+Y8JkAY9UQ2nBVjMRg74gF2A2OwpDs7/gsuljf7g==",
"report": "1",
"timestamp": "1594621872743",
"sendtime": "201908221416",
"uid": "uid-M2921317---002",
"sign":"48ed6674911d863ee31d56500bfcad0e"
}
响应示例
{
"code": "0",
"msgId": "",
"time": "20200720100327",
"errorMsg": ""
}
DEMO下载
本页面提供 Java、PHP、Python、C#、go、ASP、Node.json、共七中语言的示例DEMO供您参考下载。
DEMO包内有部分使用说明,各接口的详细使用说明请浏览各接口文档入参详情。
如创蓝未提供您使用语言的 DEMO,您可以根据 API 文档开发接口。
PHP
功能说明:该接口要求提前报备签名和模板,提交短信时,系统会自动匹配审核通过的模板,匹配成功任意一个模板即可发送。签名和短信内容需要提前在
控制台报备,审核通过后即可发送。
<php
http://zabbix.253.com/zabbixheader("Content-Type:text/html;charset=utf-8"\);
//$code = mt_rand(100000,999999);
$clapi=newChuanglanSmsApi();
//设置您要发送的内容:其中“【】”中括号为运营商签名符号,多签名内容前置添加提交
//普通短信发送调用
$result= $clapi->sendSMS('18516627499','【253云通讯】您好,您的验证码是123456' );
if(!is_null(json_decode($result))){
$output=json\_decode\($result,**true**\);
if(isset($output['code']) && $output['code']=='0'){
echo'发送成功';
}else{
echo$output['errorMsg'];
}
}else{
echo$result;
}
class ChuanglanSmsApi
{
//参数的配置请登录www.chuanglan.com获取以下API信息↓↓↓↓↓↓↓
constAPI_SEND_URL='
http://smssh1.253.com/msg/v1/send/json
'; //创蓝发送短信接口URL
constAPI_VARIABLE_URL='[[
http://smssh1.253.com/msg/variable/json';//创蓝变量短信接口URL](https://smssh1.253.com/msg/variable/json';
)
constAPI_BALANCE_QUERY_URL='[[
http://smssh1.253.com/msg/balance/json';//创蓝短信余额查询接口URL](https://smssh1.253.com/msg/balance/json';
)
constAPI_ACCOUNT= 'N57***'; //创蓝API账号
constAPI_PASSWORD= '*******';//创蓝API密码
functionsendSMS($mobile, $msg, $needstatus = 'true')
{
//创蓝接口参数
$postArr =array(
'account' =>self::API_ACCOUNT,
'password' =>self::API_PASSWORD,
'msg' => ($msg),
'phone' => $mobile,
'report' => $needstatus
);
$result = $this->curlPost(self::API_SEND_URL, $postArr);
//var_dump($postArr);die();
return$result;
}
functionsendVariableSMS($msg, $params)
{
global$chuanglan_config;
//创蓝接口参数
$postArr =array(
'account' =>self::API_ACCOUNT,
'password' =>self::API_PASSWORD,
'msg' => $msg,
'params' => $params,
'report' => 'true'
);
$result = $this->curlPost\(**self**::API\_VARIABLE\_URL, $postArr\);
return$result; }
functionqueryBalance() { global$chuanglan_config;
$result = $this->curlPost\(**self**::API\_VARIABLE\_URL, $postArr\);
return$result;
}
functionqueryBalance()
{
global$chuanglan_config;
//查询参数
$postArr =array( 'account' =>self::API_ACCOUNT, 'password' =>self::API_PASSWORD, ); $result = $this->curlPost(self::API_BALANCE_QUERY_URL, $postArr); return$result; }
functioncurlPost($url, $postFields) { $postFields = json_encode($postFields); $ch = curl_init(); curl_setopt($ch,CURLOPT_URL, $url); curl_setopt($ch,CURLOPT_HTTPHEADER,array( 'Content-Type: application/json; charset=utf-8' //json版本需要填写 Content-Type: application/json; ) ); curl_setopt($ch,CURLOPT_IPRESOLVE,CURL_IPRESOLVE_V4); curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch,CURLOPT_POST, 1); curl_setopt($ch,CURLOPT_POSTFIELDS, $postFields); curl_setopt($ch,CURLOPT_TIMEOUT, 60); curl_setopt($ch,CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, 0); $ret = curl_exec($ch); if(false== $ret) { $result = curl_error($ch); }else{ $rsp = curl_getinfo($ch,CURLINFO_HTTP_CODE); if(200 != $rsp) { $result = "请求状态" . $rsp . "" . curl_error($ch); }else{ $result = $ret; } } curl_close($ch); return$result; }
}
C#
功能说明:该接口要求提前报备签名和模板,提交短信时,系统会自动匹配审核通过的模板,匹配成功任意一个模板即可发送。签名和短信内容需要提前在
控制台报备,审核通过后即可发送。
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
namespace sendDemo
{
classProgram
{
staticvoid Main(string[] args)
{
//请求地址请登录www.chuanglan.com获取
String account ="N9994784";//API账号
String password ="Dasibugaosuni12";//API密码
String url ="[[[
https://smssh1.253.com/msg/v1/send/json";//API接口地址](https://smssh1.253.com/msg/send/json";
)
String phone ="18516627499";
String msg ="【253云通讯】您的验证码是123456";//253短信测试内容
string postJsonTpl ="\"account\":\"{0}\",\"password\":\"{1}\",\"phone\":\"{2}\",\"report\":\"true\",\"msg\":\"{3}\"";
string jsonBody =string.Format(postJsonTpl, account, password, phone, msg);
String result= doPostMethodToObj(url,"{" + jsonBody +"}");
}
publicstaticstring doPostMethodToObj(string url,string jsonBody)
{
string result =String.Empty;
HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
httpWebRequest.ContentType ="application/json";
httpWebRequest.Method ="POST";
// Create NetworkCredential Object
NetworkCredential admin_auth =newNetworkCredential("username","password");
// Set your HTTP credentials in your request header
httpWebRequest.Credentials = admin\_auth;
// callback for handling server certificates
ServicePointManager.ServerCertificateValidationCallback =delegate {returntrue; };
using (StreamWriter streamWriter =newStreamWriter(httpWebRequest.GetRequestStream()))
{
streamWriter.Write\(jsonBody\);
streamWriter.Flush\(\);
streamWriter.Close\(\);
HttpWebResponse httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (StreamReader streamReader =newStreamReader(httpResponse.GetResponseStream()))
{
result = streamReader.ReadToEnd\(\);
}
}
return result;
}
}
Asp
功能说明:该接口要求提前报备签名和模板,提交短信时,系统会自动匹配审核通过的模板,匹配成功任意一个模板即可发送。签名和短信内容需要提前在
控制台报备,审核通过后即可发送。
Sms.js
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<%
dim username,getcode
username=request.Form("username")
getcode=cstr(session("getcode"))
Function Post(url,data)
dim Https
set Https=server.createobject("MSXML2.XMLHTTP")
Https.open "POST",url,false
Https.setRequestHeader "Content-Type","application/json"
Https.send data
if Https.readystate=4 then
dim objstream
set objstream = Server.CreateObject("adodb.stream")
objstream.Type = 1
objstream.Mode =3
objstream.Open
objstream.Write Https.responseBody
objstream.Position = 0
objstream.Type = 2
objstream.Charset = "utf-8"
Post = objstream.ReadText
objstream.Close
set objstream = nothing
set https=nothing
end if
End Function
dim target,post_data,tempResult
''//请登录www.chuanglan.com获取API账号、密码以及短信发送的URL
target = "
https://smssh1.253.com/msg/v1/send/json
"
''//设置您要发送的内容:其中“【】”中括号为运营商签名符号,多签名内容前置添加提交
post_data="{""account"":""N9994784"",""password"":""Dasibugaosuni12"",""phone"":"""&username&""",""msg"":""用户您好,您的验证码是"&getcode&""",""report"":""false""}"
response.Write(Post(target,post_data))
''//请自己解析Post(target,post_data)返回的json格式并实现自己的逻辑
%>
Go
功能说明:该接口要求提前报备签名和模板,提交短信时,系统会自动匹配审核通过的模板,匹配成功任意一个模板即可发送。签名和短信内容需要提前在
控制台报备,审核通过后即可发送。
Main.go
package main
import (
"net/http"
"net/url"
"encoding/json"
"fmt"
"bytes"
"io/ioutil"
"unsafe"
)
type JsonPostSample struct {
}
func main() {
params := make\(map\[string\]interface{}\)
//请登录www.chuanglan.com获取API账号、密码以及短信发送的URL
params\["account"\] = "" //创蓝API账号
params\["password"\] = "" //创蓝API密码
params\["phone"\] = "18721755342" //手机号码
//设置您要发送的内容:其中“【】”中括号为运营商签名符号,多签名内容前置添加提交
params\["msg"\] = "【253云通讯】您好,您的验证码是999999"
params\["report"\] = "true"
bytesData, err := json.Marshal\(params\)
if err != nil {
fmt.Println\(err.Error\(\) \)
return
}
reader := bytes.NewReader\(bytesData\)
url := "http://smssh1.253.com/msg/v1/send/json" //短信发送URL
request, err := http.NewRequest\("POST", url, reader\)
if err != nil {
fmt.Println\(err.Error\(\)\)
return
}
request.Header.Set\("Content-Type", "application/json;charset=UTF-8"\)
client := http.Client{}
resp, err := client.Do\(request\)
if err != nil {
fmt.Println\(err.Error\(\)\)
return
}
respBytes, err := ioutil.ReadAll\(resp.Body\)
if err != nil {
fmt.Println\(err.Error\(\)\)
return
}
str := \(\*string\)\(unsafe.Pointer\(&respBytes\)\)
fmt.Println\(\*str\)
}
Node.js
功能说明:该接口要求提前报备签名和模板,提交短信时,系统会自动匹配审核通过的模板,匹配成功任意一个模板即可发送。签名和短信内容需要提前在
控制台报备,审核通过后即可发送。
const http = require('http');
/* 参数的配置 请登录www.chuanglan.com 获取以下API信息 ↓↓↓↓↓↓↓ */
// API账号
let account = '';
// API密码
let password = '';
//接口域名
let host = '';
/* 发送短信方法 ↓↓↓↓↓↓↓ */
const sendSms = (options) => {
// option:发送提交的参数
let params = JSON.stringify(options);
post('/msg/send/json', params);
};
/* 余额查询方法 ↓↓↓↓↓↓↓ */
const getBlance = (options) => {
// option:查询余额提交的参数
let params = JSON.stringify(options);
post('/msg/balance/json', params);
};
/* 发送请求过程,可根据自身系统处理 ↓↓↓↓↓↓↓ */
function post(url, params) {
let options = {
protocol: 'http:', // 创蓝所有接口支持https和http协议,建议https
hostname: host,
port: 80,
path: url,
method: 'POST',
headers: {
'Content-Type': 'application/json; charset=UTF-8'
}
};
const req = http.request(options, (res) => {
console.log(`状态码: ${res.statusCode}`);
res.setEncoding('utf8');
res.on('data', (chunk) => {
console.log(`返回参数: ${chunk}`);
});
});
req.write(params);
req.end();
}
/* 发送短信实例模拟 ↓↓↓↓↓↓↓ */
sendSms({
account: account, // 必传,API账号,管理后台获取
password: password, // 必传,API密码,管理后台获取(8-16位)
msg: '【253云通讯】您的验证码是123456。如非本人操作,请忽略。', // 审核通过的签名以及模板,长度不超过536个字符
phone: '15121060862' // 必传,接收的手机号;多个手机号使用英文逗号间隔,一次不要超过1000个;
// "sendtime": "" // 可不传,定时发送时间的时间戳
// "report": flase, // 可不传,是否需要状态报告,默认false;如需状态报告则传”true”
// "extend": 253, // 可不传,下发短信号码扩展码,建议1-3位
// "uid": "2018abc" // 可不传,该条短信在您业务系统内的ID,如订单号或者短信发送记录流水号
});
/* 查询余额实例模拟 ↓↓↓↓↓↓↓ */
getBlance({
account: account, // 必传,API账号,管理后台获取
password: password // 必传,API密码,管理后台获取(8-16位)
});
Python
功能说明:该接口要求提前报备签名和模板,提交短信时,系统会自动匹配审核通过的模板,匹配成功任意一个模板即可发送。签名和短信内容需要提前在
控制台报备,审核通过后即可发送。
sms.py
#!/usr/local/bin/python
#-*- coding:utf-8 -*-
# Author: jacky
# Time: 14-2-22 下午11:48
# Desc: 短信http接口的python代码调用示例
import httplib
import urllib
import json
#参数的配置 请登录www.chuanglan.com获取以下API信息 ↓↓↓↓↓↓↓
#创蓝接口域名
host = ""
#创蓝API账号
account = ""
#创蓝API密码
password = ""
#端口号
port = 80
#版本号
version = "v1.1"
#余额查询的URL
balance_get_uri = "/msg/balance/json"
#普通短信发送的URL
sms_send_uri = "/msg/v1/send/json"
def get_user_balance():
"""
取账户余额
"""
params = {'account': account, 'password' : password}
params=json.dumps\(params\)
headers = {"Content-type": "application/json"}
conn = httplib.HTTPConnection\(host, port=port\)
conn.request\('POST', balance\_get\_uri, params, headers\)
response = conn.getresponse\(\)
response\_str = response.read\(\)
conn.close\(\)
return response\_str
def send_sms(text, phone):
"""
能用接口发短信
"""
params = {'account': account, 'password' : password, 'msg': urllib.quote\(text\), 'phone':phone, 'report' : 'false'}
params=json.dumps\(params\)
headers = {"Content-type": "application/json"}
conn = httplib.HTTPConnection\(host, port=port, timeout=30\)
conn.request\("POST", sms\_send\_uri, params, headers\)
response = conn.getresponse\(\)
response\_str = response.read\(\)
conn.close\(\)
return response\_str
if __name__ == '__main__':
phone = "187****3161"
#设置您要发送的内容:其中“【】”中括号为运营商签名符号,多签名内容前置添加提交
text = "【253云通讯】您的验证码是1234"
\#查账户余额
print\(get\_user\_balance\(\)\)
\#调用智能匹配模版接口发短信
print\(send\_sms\(text, phone\)\)
java
功能说明:该接口要求提前报备签名和模板,提交短信时,系统会自动匹配审核通过的模板,匹配成功任意一个模板即可发送。签名和短信内容需要提前在
控制台报备,审核通过后即可发送。
import com.alibaba.fastjson.JSONObject;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import com.alibaba.fastjson.JSONObject;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
public class Sms {
public static void main(String[] args) {
//短信下发
String sendUrl = "https://smssh1.253.com/msg/v1/send/json";
Map map = new HashMap();
map.put("account","N*******");//API账号
map.put("password","************");//API密码
map.put("msg","【253云通讯】您好,您的验证码是******");//短信内容
map.put("phone","15300000000");//手机号
map.put("report","true");//是否需要状态报告
map.put("extend","123");//自定义扩展码
JSONObject js = (JSONObject) JSONObject.toJSON(map);
System.out.println(sendSmsByPost(sendUrl,js.toString()));
//查询余额
String balanceUrl = "https://smssh1.253.com/msg/balance/json";
Map map1 = new HashMap();
map1.put("account","N*******");
map1.put("password","************");
JSONObject js1 = (JSONObject) JSONObject.toJSON(map1);
System.out.println(sendSmsByPost(balanceUrl,js1.toString()));
}
public static String sendSmsByPost(String path, String postContent) {
URL url = null;
try {
url = new URL(path);
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
httpURLConnection.setRequestMethod("POST");
httpURLConnection.setConnectTimeout(10000);
httpURLConnection.setReadTimeout(10000);
httpURLConnection.setDoOutput(true);
httpURLConnection.setDoInput(true);
httpURLConnection.setRequestProperty("Charset", "UTF-8");
httpURLConnection.setRequestProperty("Content-Type", "application/json");
httpURLConnection.connect();
OutputStream os=httpURLConnection.getOutputStream();
os.write(postContent.getBytes("UTF-8"));
os.flush();
StringBuilder sb = new StringBuilder();
int httpRspCode = httpURLConnection.getResponseCode();
if (httpRspCode == HttpURLConnection.HTTP_OK) {
BufferedReader br = new BufferedReader(
new InputStreamReader(httpURLConnection.getInputStream(), "utf-8"));
String line = null;
while ((line = br.readLine()) != null) {
sb.append(line);
}
br.close();
return sb.toString();
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
提交响应码说明
状态码 | 描述 | 问题处理人 |
---|
0 | 提交成功 | 无 |
101 | 无此用户(account参数要传API账号不是登录后台的账号,如N111111;或API账号关停了需要联系官网客服解禁) | 技术支持 |
102 | 密码错(请确认密码是否一致正确,请直接复制避免手动输入错误) | 技术支持 |
103 | 提交过快(提交速度超过流速限制) | 技术支持 |
104 | 系统忙(因平台侧原因,暂时无法处理提交的短信) | 技术支持 |
105 | 敏感短信(短信内容包含敏感词) | 客服 |
106 | 消息长度错(>1036 或<=0) | 技术支持 |
107 | 包含错误的手机号码 | 技术支持 |
108 | 手机号码个数错(手机号包含了中文符号;手机号个数错了,群发>1000 或<=0) | 技术支持 |
109 | 无发送额度(当前使用的API账号下没有发送额度) | 商务 |
110 | 不在发送时间内(联系客服或商务解决) | 商务 |
111 | 超出该账户当月发送额度限制(联系客服或商务解决) | 商务 |
112 | 产品错误(通道出现异常,联系商务解决) | 商务 |
113 | 扩展码格式错(非数字或者长度不对) | 技术支持 |
114 | 可用参数组个数错误(msg参数的变量符号固定使用"{$var}";变量符号在20个以内) | 技术支持 |
116 | 签名不合法或未带签名(短信签名需要报备通过后才能使用;重保签名不可用) | 客服 |
117 | IP 地址认证错(登录控制台在对应使用的API账号下加白ip) | 客服 |
118 | 用户没有相应的发送权限(账号被禁止发送,联系客服或商务解禁) | 客服 |
119 | 用户已过期 | 客服 |
120 | 违反防盗用策略(日发送限制,联系客服或商务解决) | 客服 |
123 | 发送类型错误(cmpp协议的账户不能使用https协议方式,请联系我方技术修改) | 技术支持 |
124 | 白模板匹配错误(接口传递的内容与报备的模板内容要完全一致,包括标点符号) | 客服 |
125 | 匹配驳回模板,提交失败(联系客服或商务解决) | 客服 |
127 | 定时发送时间格式错误(格式为 yyyyMMddHHmm) | 技术支持 |
128 | 内容编码失败 | 技术支持 |
129 | JSON 格式错误(header请求头是否生效:Content-Type:application/json;请求参数不是json格式) | 技术支持 |
130 | 请求参数错误(缺少必填参数;参数跟接口地址不匹配,例如变量参数请求普通短信接口地址) | 技术支持 |
132 | 消息长度错(>3500或<=0),超过短信最大支持字数 | 技术支持 |
133 | 单一手机号错误 | 技术支持 |
134 | 违反防盗策略, 超过月发送限制(联系客服或商务解决) | 技术支持 |
135 | 超过同一手机号相同内容发送限制 | 技术支持 |
136 | 不可批量提交"验证码"短信 | 技术支持 |
139 | 超出安全发送时间(时间戳过期) | 技术支持 |
140 | 短信内容解密错误(秘钥没有使用正确) | 技术支持 |
144 | 产品未上线限制日发送数量(签名报备选择的未上线会日限100条,联系客服调整) | 客服 |
145 | 验签失败(验签不过,请参考对应接口的DEMO加签代码示例) | 技术支持 |
152 | MATERIAL_EXIST_ERROR (模板不存在) | 客服 |
153 | MESSAGE_LY_ERROR 消息长度错(>2000或者≤0) | 技术支持 |
154 | 长短信拼接错误 | 技术支持 |
155 | AIM_SEND_FAIL 转发失败 | 技术支持 |
158 | 退订语不符合规范,退订语现在只支持“拒收请回复R”。 | 技术支持 |
159 | 触发反轰炸策略 | 技术支持 |
没有更多了