短信类

CMIOT_API5001-物联卡终端控制下行模板短信

集团客户业务平台可以调用该能力向目标终端号码(不超过300个)发送模板短信,实现定制化的终端控制功能。 集团客户需在API接入申请的时候同步提交模板短信的内容,客户申请模板短信之后,API服务平台将审核模板内容,审核通过后编制4位数字的动作码并反馈给客户。 模板短信中可包含多个变量参数,变量参数用{数字}表示,且必须从1开始连续编号,如{1}、{2}、{3},单个变量值的长度不超过10位字符。短信最终发送的内容,由模板短信+实际传入的变量参数形成,如Set temperature 25,最终发送的单条短信长度不超过140字节。

短信模版示例如下:

动作码模板短信内容
0001location on
0002location off
0003set length {1} width {2} height {3}

API请求参数说明

请求地址:https://api.iot.10086.cn/v2/sendsmstemplet

请求方式:GET/POST


公共参数

参数 是否必须 默认值 含义

appid

应用编码,第三方应用唯一标识。由物联卡集团客户向中国移动提出API接入申请,中国移动物联网全网管理员在运营管理平台上分配并反馈给集团客户(反馈方式:邮箱),appid样例:100001

transid

事务编码,由物联卡集团客户按照相应规则自主生成(不可超过48位)。生成规则:appid+YYYYMMDDHHMISS+8位数字序列(此序列由集团客户自主生成,比如从00000001开始递增等等),transid样例:1000012014101615303080000001

ebid

能力编码,同appid一起由中国移动反馈给集团客户,ebid样例:2300000000000001

token

令牌,appid+password+transid(password同appid、ebid一起由中国移动反馈给集团客户)并使用64位SHA-256算法进行加密,token样例: 4962ad69adcbf490c9f749fff734b 5706a874ebab1120aaa23c9d288290534ca


业务参数

参数 是否必须 默认值 含义

actionid

动作码,动作码对应相应的短信模板

msisdns

发送控制短信的物联卡号码,最长13位数字,举例:14765004176,批量发送多个号码用下划线分隔。例如:xxxx_xxxx_xxxx。

params

变量参数,单个变量值的长度不超过10位字符,多个参数用下划线分隔。例如:section_792312_666。如果没有变量参数,params传入空值。 多个变量参数时,按顺序逐个替换短信模板量。例如,短信模板为set length {1} width {2} height {3},参数为10_3_7。最终的短信为set length 10 width 3 height 7。 变量参数内容不允许包含“_”下划线。 变量参数+模板短信形成的最终短信内容不得超过140字节。


返回参数说明

应答公共信息:

参数 是否必须 默认值 含义

status

返回码:

0-正确,非0-失败

message

错误信息。错误码对应的错误描述,参考错误码列表

result

返回结果集(status为“0”时,result包含正确的结果数据;status为“非0”时, result可能为空,也可能包含其他提示数据)

应答数据信息:

参数 是否必须 默认值 含义

succSvcNum

成功号码个数

failSvcNum

失败号码个数

failSvcDetail

failSvcNum返回“0”时,failSvcDetail为空,此时不需要解析failSvcDetail的数据,只有在failSvcNum不为“0”时,failSvcDetail才有数据

failSvcDetail:

参数 是否必须 默认值 含义

status

错误码

message

错误信息。错误码对应的错误描述,参考错误码列表

msisdn

错误的号码


API请求URL示例

https://api.iot.10086.cn/v2/sendsmstemplet?appid=xxx&transid=xxx&ebid=xxx&token=xxx

&actionid=xxx&msisdns=xxx_xxx_xxx&

params=xxx_xxx –有变量参数

https://api.iot.10086.cn/v2/sendsmstemplet?appid=xxx&transid=xxx&ebid=xxx&token=xxx

&actionid=xxx&msisdns=xxx_xxx_xxx –无变量参数


API请求示例代码

  • Java
  • PHP
  • Python
  • C#
复制代码

package com.iot;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;


/**
    *
    * @author IOT JAVA请求API服务平台接口demo 
    * CMIOT_API5001-物联卡终端控制下行模板短信
    */
public class CMIOT_API5001 {

    // 请求URL的IP和端口,需要按实际环境修改
    public static final String ipAndPort = "http://api.iot.10086.cn";
    // 请求的版本号
    public static final String version = "/v2";
    // 请求具体的接口名称
    public static final String apiName = "/sendsmstemplet";

    /**
        * 获取请求接口的返回信息
        *
        * @param url
        *            请求接口时需要传入的URL
        */
    public static String sendRequest(String url) {

        InputStream inputStream = null;
        BufferedReader bufferedReader = null;
        HttpURLConnection httpURLConnection = null;
        try {
            URL requestURL = new URL(url);
            // 获取连接
            httpURLConnection = (HttpURLConnection) requestURL.openConnection();
            httpURLConnection.setConnectTimeout(10000);	//建立连接的超时时间,毫秒
            httpURLConnection.setReadTimeout(25000);	//获得返回的超时时间,毫秒
            httpURLConnection.setRequestMethod("GET");

            // 通过输入流获取请求的内容
            inputStream = httpURLConnection.getInputStream();
            bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
            String temp = null;
            StringBuffer stringBuffer = new StringBuffer();
            // 循环读取返回的结果
            while ((temp = bufferedReader.readLine()) != null) {
                stringBuffer.append(temp);
            }
            return stringBuffer.toString();
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            //断开连接
            if (httpURLConnection!=null) {
                httpURLConnection.disconnect();
            }
            // 关闭流
            if(bufferedReader!=null){
                    try {
                        bufferedReader.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }

            }
            if(inputStream!=null){
                    try {
                        inputStream.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
            }

        }
        return null;

    }

    /**
        * 构造请求地址URL
        * @param paramMap 请求参数
        * @return URL
        */
    private static String buildUrl(Map<String, String> paramMap){
        String url = null;
        StringBuffer urlString = new StringBuffer();
        urlString.append(ipAndPort).append(version).append(apiName);

        if (!paramMap.isEmpty()) {
            // 参数列表不为空,地址尾部增加'?'
            urlString.append('?');
            // 拼接参数
            Set<Map.Entry<String, String>> entrySet = paramMap.entrySet();
            for (Map.Entry<String, String> entry : entrySet) {
                try {
                    urlString.append(entry.getKey()).append('=').append(URLEncoder.encode(entry.getValue(), "UTF-8")).append('&');
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                }
            }
            // 去掉最后一个字符“&”
            url = urlString.substring(0, urlString.length() - 1);
        }
        return url;
    }

    public static void main(String[] args) throws IOException {
        // 封装请求接口的参数,需要按实际环境修改
        HashMap<String, String> map = new HashMap<>();
        map.put("appid", "A0B40MY");
        map.put("ebid", "0006000000336");
        map.put("transid", "A0B40MY2016101711070753214709");
        map.put("token", "e88c43da11c00342a8d49bf5ac778184378e5c7f5926c87698bb8a67f0dd39e6");
        map.put("msisdns", "1064826090110_1064826090118_1064830000000_1064826029898_1064820200526");//发送控制短信的物联卡号码
        map.put("actionid", "4417");//动作码
        map.put("params", "66_77_88");

        // 通过参数构造请求URL和参数
        String url = buildUrl(map);
        // 获取接口返回信息
        String result = sendRequest(url);
        System.out.println(result);

    }
}

<?php
//设置页面显示编码UTF-8
header("Content-Type: text/html;charset=utf-8");
// 请求URL的IP和端口,需要按实际环境修改
$ipAndPort = "http://api.iot.10086.cn";
// 请求的版本号
$version = "/v2";
// 请求具体的接口名称  CMIOT_API5001-物联卡终端控制下行模板短信
$apiName = "/sendsmstemplet";

/**
 * 请求API的方法
 * @param GET方式请求地址 $URL
 * @return 返回请求的数据
 */
function requestAPI($URL) {
	//创建一个新的CURL资源赋值给 $curl
	$curl=curl_init();
	//设置URL
	curl_setopt($curl, CURLOPT_URL, $URL);
	//执行请求
	$result=curl_exec($curl);
	// ===用于区分空输入和布尔值false
	if ($result===false) {
		echo "error !  plese check you requset url...";
	}
	//释放资源
	curl_close($curl);
	return $result;

}

/**
 * 构造URL方法
 * @param unknown $params
 */
function buildURL($params){
	$strURL=null;
	foreach ($params as $key=>$value){
		$strURL=$strURL.$key."=".urlencode($value)."&";
	}
	//去除最后一个"&";
	$strURL=substr($strURL, 0, -1);
	global  $ipAndPort;
	global  $version;
	global  $apiName;
	//拼接URL
	$strURL=$ipAndPort.$version.$apiName.'?'.$strURL;
	return  $strURL;


}


//定义参数,需要按实际环境修改
$params=array(

	'appid'=>'A0B40MY',
	'ebid'=>'0006000000336',
	'transid'=>'A0B40MY2016101711070753214709',
	'token'=>'e88c43da11c00342a8d49bf5ac778184378e5c7f5926c87698bb8a67f0dd39e6',
	'msisdns'=>'1064826090110_1064826090118_1064830000000_1064826029898_1064820200526',
	'actionid'=>'4417',
	'params'=>'66_77_88'

);

$requestURL=buildURL($params);
requestAPI($requestURL);
?>
						
# -*- coding: utf-8 -*-
'''
@author IOT Python2.79请求API服务平台接口

CMIOT_API5001-物联卡终端控制下行模板短信
'''


import urllib, urllib2,datetime


def send_request_get(ipAndPort,version,api_name,**kwargs):
    '''
    说明:组装url并调用接口
    :param ipAndPort: ip及端口信息
    :param version: 版本号
    :param api_name: api名称
    :param kwargs:  参数
    :return: 调用API返回的信息
    '''
    base_url = ipAndPort + version + api_name
    params = urllib.urlencode(kwargs)
    url = '?'.join([base_url,params])
    print u'调用URL:'+url

    try:
        response = urllib2.urlopen(url)
    except urllib2.URLError,e:
        raise ValueError(e)
    response_message = response.read()
    return response_message

class API_Demo_Request:
    def test_09_CMIOT_API2110(self):
        #1.接口的参数及数据准备
        appid='A0B40MY'              #应用编码--需要按实际环境修改
        ebid='0006000000336'     #能力编码--需要按实际环境修改
        transid = "A0B40MY2016101711070753214709"   #transid--需要按实际环境修改
        token = "e88c43da11c00342a8d49bf5ac778184378e5c7f5926c87698bb8a67f0dd39e6"#token--需要按实际环境修改
        msisdns='1064826090110_1064826090118_1064830000000_1064826029898_1064820200526'    #物联卡号--需要按实际环境修改
        actionid='4417'
        params='66_77_88'
        api_name = "sendsmstemplet"        #请求具体的接口名称
        ipAndPort = "http://api.iot.10086.cn" #请求URL的IP和端口--需要按实际环境修改
        version = "/v2/"   #请求的版本号--需要按实际环境修改

        #2.接口调用"
        response_message = send_request_get(ipAndPort,version,api_name,appid=appid,ebid=ebid,transid=transid,token=token,msisdns=msisdns,actionid=actionid,params=params)

        #3.接口调用返回的信息
        print response_message
if __name__=='__main__':
    API_Demo_Request().test_09_CMIOT_API2110()
					

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;

namespace HttpDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            // CMIOT_API5001-物联卡终端控制下行模板短信
            string domain = "http://api.iot.10086.cn/v2/";//需要按照实际环境修改
            string enabler = "sendsmstemplet";

            //以下业务参数需要根据实际情况修改
            string appid = "0NZ";   //应用编号
            string transid = "0NZ2017051611163080000001";//事务编码
            string ebid = "0001000000559";//能力编号
            string token = "4b524a2958e823bd9245f733dc9a38a14784baef5151edf0f532296611c07564";
            string msisdns = "1064826090110_1064826090118_1064830000000_1064826029898_1064820200526"; //发送控制短信的物联卡号码
            string actionid = "4417"; 
            string params1 = "66_77_88"; 

            string paramters = "?appid=" + appid + "&transid=" + transid + "&ebid=" + ebid + "&token=" + token + "&msisdns=" + msisdns + "&actionid=" + actionid + "¶ms=" + params1;  
            string uri = domain + enabler + paramters;
            string response = RequestSync(uri, "POST");  //同步get请求把post改为get即可
            Debug.WriteLine(response);
            Console.ReadLine();
        }

        //同步get 或 post
        public static string RequestSync(string uri, string method)
        {
            WebRequest request = WebRequest.Create(uri);
            //get 或者 post
            request.Method = method;
            //读取返回消息
            string res = string.Empty;
            try
            {
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
                res = reader.ReadToEnd();
                reader.Close();
            }
            catch (Exception ex)
            {
                res = ex.ToString();
            }
            return res;
        }
    }
}

API响应示例

                {
    "status": "0"
    "message": "正确",
    "result": [
        {
        "succSvcNum": "3",
        "failSvcNum": "2",
        "failSvcDetail": [
            {
                "status": "12",
                "message": "MSISDN号不是所查询的集团下的用户",
                "msisdn": "1064826090110"
            },
            {
                "status": "12",
                "message": " MSISDN号不是所查询的集团下的用户",
                "msisdn": "1064826090118"
            }
        ]
        }
    ]
}
            

错误码

  • 查看错误码

API工具

  • token生成工具
  • SDK工具下载