一、短信格式

    • 短信由签名和内容两部分组成。用户需要先申请短信签名,审批通过后,再申请短信模板
    • 验证码短信示例:【融合通信】您的注册验证码为123456,十分钟内有效
    • 短信签名是:【融合通信】
    • 短信内容是: 您的注册验证码为${number},十分钟内有效
    • 变量是:${number}
    • 会员营销类短信内容模板:【融合通信】会员尊称+内容+退订
    • 不支持双签名,签名及内容不支持特殊符号,如¥、★、 ※、 →、 ●等

    二、签名规范

    • 短信签名是作为短信发送者属性的一种标识,签名可使用公司简称、产品或业务简称、网站或app简称。不得涉及黄赌毒、诈骗等非法信息,不得使用中性或无意义的词语作为签名来发送,如:【验证码】、【图书馆】【测试】等
    • 短信签名由【】及签名内容组成,如:【融合通信】。签名内容要求2~8个字,由中英文,数字组成,必须含有中文,不支持符号
    • 短信签名需要提供企业营业执照正本或副本复印件(要加盖企业公章),若签名/短信内容涉及到第三方权益,须提供第三方的真实授权书

    三、短信字数

    • 支持469个字符的长短信,70个字符(含签名)算一条。超过70个字符为长短信,67个字符算一条,多条短信将按照具体占用条数计费

    四、内容模板规范

    • 短信模板需明确表述短信发送的实际内容,禁止发送一切有关黄赌毒、诈骗等违法内容
    • 短信模板可以包含多个变量,变量前后需加文字说明,以体现模板使用者的商业意图如:您好,您的快递单号{1},已被放置在{2},取件号{3},请及时取件!
    • 内容中不要使用【】,因为短信签名已包含此符号,如重复出现会导致短信无法发送
    1. 验证码短信格式
      • 注册、修改密码,绑定手机号等需要使用到验证码的短信模板
      • 模板示例:您的验证码为{1},请于{2}分钟内正确输入
    2. 通知短信格式
      • 模板不允许出现相同的变量名称,例如:您家宝贝${name}已经到达${name}现场!
      • 模板不支持短链接与变量直接组合的格式。例如:t.cn${code},t.cn为短链接,${code}为变量
    3. 营销推广短信格式
      • 模板示例:尊敬的{1},滴滴送你20元大礼包(单单5元哦)本周内有效,退订回N
      • 营销推广短信内容后面必须要添加退订标识,支持TD或T或N进行短信退订回复

    五、发送内容规范

    • 系统通知类短信不支持营销内容
    • 营销推广短信不支持给非会员用户发送营销短信
    • 不支持发送未经许可的发送行为,主要指邀请注册、邀请成为会员的商业性信息
    • 金融暂只支持验证码短信
    • 禁止发送涉及:色情、赌博、毒品、党政、维权、众筹、慈善募捐、宗教、迷信、股票、移民、面试招聘、博彩、贷款、催款、信用卡提额、投资理财、中奖、抽奖、一元夺宝、一元秒杀、A货、整形、烟酒、交友、暴力、恐吓、皮草、返利、代开发票、代理注册、代办证件、加群、加QQ或者加微信、贩卖个人信息、运营商策反、流量营销等信息的短信
    • 营销推广短信除上述禁止内容外,另不支持:保险、房地产、教育、培训、游戏、美容、医疗、会所、酒吧、足浴、助考、商标注册、装修、建材、家私、会展、车展、房展等信息的短信
    • 如出现违法违规或者损害到相关他人权益的,平台将保留最终追究的权利!请各会员严格遵守规范要求,加强自身业务安全,健康发送短信

    六、签名审核时间

    • 一般签名预计1小时内审核完成,审核通过后可使用。工作时间:8:30-22:00 ,建议您尽量在17:00前提交申请。特殊签名预计在3-5个工作日内审核完成

    短信发送成功,但实际未能收到短信是什么原因?

    • 手机处于关机、不在服务区、信号差等状态
    • 手机收件箱是不是已满,删除一些看是否可以正常接收
    • 手机是不是双卡双待的手机,把卡拿出来换一下卡槽
    • 手机是不是安装了安全软件,安全软件有可能会进行拦截到垃圾信箱里
    • 如若不行,请您将SIM卡换到其他手机上进行测试

    手机状态正常,为什么无法收到短信?

    • 一般短信接收失败有如下几个原因:
    • 黑名单:退订过业务类套餐、消息,或被投诉过等都会进入黑名单,该类用户需要联系客服申请解除黑名单
    • 超频:在限定时间内,给同一个用户发了超过限制的短信数量。默认:同一个手机号24小时内不能超过10条。如有特殊需求,请联系客服放宽限制
    • 短信内容不规范,内容违规被拦截,请咨询客服并修改内容

    短信为什么会延迟?

    • 短信延迟和手机终端有关,比如用户当时手机信号异常、长期不关机等

    短信三网都可发送吗,能发送海外/港澳台吗?

    • 支持三网发送,目前海外/港澳台暂不支持

    短信提供哪些功能?

    • 目前支持短信下行发送、短信状态报告回执
    • 短信上行功能。上行功能免费,但上行产生的通讯费,由运营商向终端用户收取

    特殊行业短信支持发送吗?

    • 目前支持腾讯游戏、网易游戏会员营销
    • 银行信用卡、理财推广

    版本概况

    版本号 日期 修改人 审阅人 摘要
    V1.0 2010-10-20 - - 初稿
    V1.5 2012-12-17 - - 12修订版
    V2.0 2013-06-17 - - 13修订版
    V2.1 2016-06-03 - - 16修订版
    V2.2 2016-06-29 - - 修正状态报告推送方式

    接口通信方式

    • 各客户平台与融合云平台通过HTTP POST XML或JSON 进行数据的交互。

    消息格式

    • 消息格式分为HTTP消息头和消息体两部分。消息体为完整的XML或JSON。注意消息体编码要求:utf-8。

    测试服务器信息

    • http://123.56.14.50:9191/adc_posthandler_test
    • 用户名密码都是123456,测试用签名:【测试】
    • 测试服务只能用于检测程序是否正确,不能下发短信

    接口常见问题

    1. 这么多接口普通接入需要开发那个?
      • 一般接入只需开发 2.1、2.2、2.4 即可。
    2. 状态报告可以推送给客户么?
      • 可以.客户需要提供ip,端口.我们会以json格式推送状态报告。数据格式请参考 2.7 进行开发。
    3. 下发消息和返回的状态报告如何对应?
      • 下发消息中用户端生成的usermsgid键值(12位由数字和英文字母组成的字符串组合),可与状态报告中的usermsgid进行对应,即可完成下发消息与状态报告的一一对应。
    4. 下发短信内容应该采取什么编码格式?
      • 必须为utf-8格式,不支持gbk等其他格式,并且需要进行base64加密。
    5. 可以多进程或者多线程获取状态报告和上行消息么?
      • 不可以,只能用一个线程获取状态报告和上行。获取状态报告时候,如果有上行,会同时返回状态报告和上行消息。

    发送短信(客户平台->融合云平台)

    发送请求消息参数
    消息头
    POST /url HTTP/1.1
    Host: xxx.xxx.xxx.xxx
    Connection: close
    Content-Type: text/xml; charset=utf-8
    Content-Length: length #消息体(xml)长度
    Action: "submitreq" #注意submitreq两边的双引号要加
    
    消息体
    <?xml version="1.0" encoding="utf-8"?>
    <Body>
     <user>用户名</user>
     <password>密码</password>
     <version>1.2</version>
     <submit>
      <usermsgid>唯一标识,12位由数字和英文字母组成的字符串,由用户生成,该值将与状态报告中的usermsgid一一对应</usermsgid>
      <desttermid>目的号码,用户手机号码</desttermid>
      <srctermid>下发源号码的扩展号码</srctermid>
      <msgcontent>base64(utf-8)</msgcontent>
      <signid>默认填0</signid>
      <desttype>1移动,2联通,3电信</desttype>
      <needreply>0,不需要状态报告 1,需要</needreply>
     </submit>
     <submit>
    …
     </submit>
    </Body>
    
    发送结果消息参数
    消息头
    HTTP/1.1 200 OK
    Connection: close
    Content-Type: text/xml; charset=utf-8
    Content-Length: length #消息体(xml)长度
    
    消息体
    <?xml version="1.0" encoding="utf-8"?>
    <Body>
     <result>0成功,其他失败</result>
    </Body>
    

    群发短信(客户平台->融合云平台)

    发送请求消息参数
    消息头
    POST /url HTTP/1.1
    Host: xxx.xxx.xxx.xxx
    Connection: close
    Content-Type: text/xml; charset=utf-8
    Content-Length: length #消息体(xml)长度
    Action: "batchsubmit" #注意batchsubmit两边的双引号要加
    
    消息体
    <?xml version="1.0" encoding="utf-8"?>
    <Body>
     <user>用户名</user>
     <password>密码</password>
     <version>1.2</version>
     <desttermid>目的号码,用户手机号码,每个号码单元由usermsgid与手机号码组成,中间通过半角冒号分隔,多个号码单元用半角逗号分隔,如:usermsgid1:138********,usermsgid2:138********,最多一次100个号码,usermsgid为唯一标识(12位由数字和英文字母组成的字符串),由用户生成,该值将与状态报告中的usermsgid一一对应</desttermid>
     <srctermid>下发源号码的扩展号码</srctermid>
     <msgcontent>base64(utf-8)</msgcontent>
     <signid>默认填0</signid>
     <desttype>1移动,2联通,3电信</desttype>
     <needreply>0,不需要状态报告 1,需要</needreply>
    </Body>
    
    发送结果消息参数
    消息头
    HTTP/1.1 200 OK
    Connection: close
    Content-Type: text/xml; charset=utf-8
    Content-Length: length #消息体(xml)长度
    
    消息体
    <?xml version="1.0" encoding="utf-8"?>
    <Body>
     <result>0成功,其他失败</result>
    </Body>
    

    查询余额(客户平台->融合云平台)

    发送请求消息参数
    消息头
    POST /url HTTP/1.1
    Host: xxx.xxx.xxx.xxx
    Connection: close
    Content-Type: text/xml; charset=utf-8
    Content-Length: length #消息体(xml)长度
    Action: "checkbalances" #注意checkbalances两边的双引号要加
    
    消息体
    <?xml version="1.0" encoding="utf-8"?>
    <Body>
     <user>用户名</user>
     <password>密码</password>
     <version>1.2</version>
    </Body>
    
    发送结果消息参数
    消息头
    HTTP/1.1 200 OK
    Connection: close
    Content-Type: text/xml; charset=utf-8
    Content-Length: length #消息体(xml)长度
    
    消息体
    <?xml version="1.0" encoding="utf-8"?>
    <Body>
     <result>0或大于0为移动剩余金额,其他为错误</result>
    </Body>
    

    获得上行短信、状态报告和发送应答(客户平台->融合云平台)

    发送请求消息参数
    消息头
    POST /url HTTP/1.1
    Host: xxx.xxx.xxx.xxx
    Connection: close
    Content-Type: text/xml; charset=utf-8
    Content-Length: length #消息体(xml)长度
    Action: "getreportsms2" #注意getreportsms2两边的双引号要加
    
    消息体
    <?xml version="1.0" encoding="utf-8"?>
    <Body>
     <user>用户名</user>
     <password>密码</password>
     <version>1.2</version>
    </Body>
    
    发送结果消息参数
    消息头
    HTTP/1.1 200 OK
    Connection: close
    Content-Type: text/xml; charset=utf-8
    Content-Length: length #消息体(xml)长度
    
    消息体
    <?xml version="1.0" encoding="utf-8"?>
    <Body>
    <result>1表示有数据,0表示没有数据,其余为失败</result>
    <deliver>
    <srctermid>源号码,用户手机号码</srctermid>
    <desttermid>目的号码,长号码</desttermid>
    <msgcontent>base64(utf-8)上行短信内容</msgcontent>
    <srctype>1移动,2联通,3电信</srctype>
    <receivedatetime>接收时间格式:YYYY-MM-DD HH24:MI:SS</receivedatetime>
    </deliver>
    .
    .
    .
    最长到350条,上行一次最多50条、状态报告最多300条
    .
    .
    .
    <report>
    <msgid>空,保留字段</msgid>
    <srctermid>源号码,用户手机号码</srctermid>
    <desttermid>目的号码,长号码</desttermid>
    <msgcontent>状态报告结果,base64编码格式,DELIVRD为成功,其余请参考cmpp3.0协议</msgcontent>
    <srctype>1移动,2联通,3电信,状态报告目前只支持移动</srctype>
    <usermsgid>用户发送时定义的usermsgid</usermsgid>
    <receivedatetime>接收时间格式:YYYY-MM-DD HH24:MI:SS</receivedatetime>
    </report>
     .
     .
     .
    </Body>
    

    发送模板短信(客户平台->融合云平台)

    发送请求消息参数
    消息头
    POST /url HTTP/1.1
    Host: xxx.xxx.xxx.xxx
    Connection: close
    Content-Type: text/xml; charset=utf-8
    Content-Length: length #消息体(xml)长度
    Action: "submitreq" #注意submitreq两边的双引号要加
    
    消息体
    <?xml version="1.0" encoding="utf-8"?>
    <Body>
     <user>用户名</user>
     <password>密码</password>
     <version>1.2</version>
     <submit>
      <usermsgid>唯一标识,12位由数字和英文字母组成的字符串,由用户生成,该值将与状态报告中的usermsgid一一对应</usermsgid>
      <desttermid>目的号码,用户手机号码</desttermid>
      <srctermid>下发源号码的扩展号码</srctermid>
      <msgcontent>base64(utf-8)</msgcontent>
      <signid>默认填0</signid>
      <desttype>1移动,2联通,3电信</desttype>
      <tempid>模板编号</tempid>
      <needreply>0,不需要状态报告 1,需要</needreply>
     </submit>
     <submit>
      …
     </submit>
    </Body>
    
    发送结果消息参数
    消息头
    HTTP/1.1 200 OK
    Connection: close
    Content-Type: text/xml; charset=utf-8
    Content-Length: length #消息体(xml)长度
    
    消息体
    <?xml version="1.0" encoding="utf-8"?>
    <Body>
     <result>0成功,其他失败</result>
    </Body>
    

    群发模板短信(客户平台->融合云平台)

    发送请求消息参数
    消息头
    POST /url HTTP/1.1
    Host: xxx.xxx.xxx.xxx
    Connection: close
    Content-Type: text/xml; charset=utf-8
    Content-Length: length #消息体(xml)长度
    Action: "batchsubmit" #注意batchsubmit两边的双引号要加
    
    消息体
    <?xml version="1.0" encoding="utf-8"?>
    <Body>
     <user>用户名</user>
     <password>密码</password>
     <version>1.2</version>
     <desttermid>目的号码,用户手机号码,每个号码单元由usermsgid与手机号码组成,中间通过半角冒号分隔,多个号码单元用半角逗号分隔,如:usermsgid1:138********,usermsgid2:138********,最多一次100个号码,usermsgid为唯一标识(12位由数字和英文字母组成的字符串),由用户生成,该值将与状态报告中的usermsgid一一对应</desttermid>
     <srctermid>下发源号码的扩展号码</srctermid>
     <msgcontent>base64(utf-8)</msgcontent>
     <signid>默认填0</signid>
     <desttype>1移动,2联通,3电信</desttype>
     <tempid>模板编号</tempid>
     <needreply>0,不需要状态报告 1,需要</needreply>
    </Body>
    
    发送结果消息参数
    消息头
    HTTP/1.1 200 OK
    Connection: close
    Content-Type: text/xml; charset=utf-8
    Content-Length: length #消息体(xml)长度
    
    消息体
    <?xml version="1.0" encoding="utf-8"?>
    <Body>
     <result>0成功,其他失败</result>
    </Body>
    

    状态报告推送(融合云平台->客户平台)

    发送请求消息参数
    消息头
    POST /url HTTP/1.1
    Host: xxx.xxx.xxx.xxx
    Connection: close
    Content-Type: application/json; charset=utf-8
    Content-Length: length #消息体(json)长度
    
    消息体
    {"report": [
     ["123456","13812345678", "1069000000", "REVMSVZSRA==", "1", "012345678901", "2016-06-29 11:16:00"],
     ["123456","13812345679", "1069000000", "REVMSVZSRA==", "1", "012345678902", "2016-06-29 11:16:00"]
    ]
    }
    列表的格式顺序:[接口账户名,手机号码,源号码,状态报告结果(base64),所属运营商,usermsgid,网关接收时间]
    {"mo": [
     ["123456',"13812345678", "1069000000", "REVMSVZSRA==", "1", "2016-06-29 11:16:00"], 
     ["123456',"13812345679", "1069000000", "REVMSVZSRA==", "1", "2016-06-29 11:16:00"]
    ]
    }
    列表的格式顺序是[接口帐户名,手机号,目的号码,状态报告结果(base64),所属运营商,网关接收时间]
    
    发送结果消息参数
    消息头
    HTTP/1.1 200 OK
    Connection: close
    Content-Type: application/json; charset=utf-8
    Content-Length: length #消息体(json)长度
    
    消息体
    {"result":"0"}
    

    常规提交返回错误

    错误码 参考说明
    0 成功
    -1 消息个数大于100
    -2 消息内容不是base64格式
    -3 没有消息内容
    -4 没有目的号码
    -5 desttype填写错误
    -6 手机号码不正确
    -8 needreply填写错误
    -9 余额不足
    -10 数据库准备失败
    -11 用户名密码错误
    -12 xml格式错误
    -13 Action填写错误
    -14 消息内容加上签名长度大于469字
    -15 signid填写错误,未找到对应签名
    -16 联通全网发送失败
    -17 联通全网下发源号码配置错误,与管理员确认
    -18 该签名为指定号码下发,不支持长号码扩展
    -19 短信内容含有敏感词汇
    -20 usermsgid长度不等于12位
    -21 usermsgid不是由数字和英文字母组成
    -23 msgcontent短信内容中的签名错误
    -24 模板编号错误
    -25 发送内容不匹配模板
    -26 消息头中没有Content-Length

    JAVA样例

    package com.cmcc.tj.res;
    import it.sauronsoftware.base64.Base64;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.io.StringReader;
    import java.io.UnsupportedEncodingException;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.net.URLConnection;
    import java.util.HashMap;
    import java.util.Map;
    
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.parsers.ParserConfigurationException;
    
    import org.w3c.dom.Document;
    import org.w3c.dom.Element;
    import org.w3c.dom.NodeList;
    import org.xml.sax.InputSource;
    import org.xml.sax.SAXException;
    
    public class demo {
    public static String[] sendSms(String phoneNumber, String smsContent) {
    System.out.println("sendSms begin");
    String url = "http://123.56.14.50:9191/adc_posthandler_test";          //此处修改为最终发送地址
      String result = testPost(url, phoneNumber, smsContent);
      System.out.println(result);
      if (result == ""){
      	String[] arr = {"-1", "null err"};
      	return arr;
      }else{
      	DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    try {
    DocumentBuilder builder = factory.newDocumentBuilder();
    Document doc = builder.parse(new InputSource(new StringReader(result)));
    Element root = doc.getDocumentElement();
    NodeList books = root.getChildNodes();
    String nl =  books.item(0).getFirstChild().getNodeValue();
    System.out.println(nl);
    if (nl.equalsIgnoreCase("0")){
    return null;
    }else{
    return nl.split(":");
      		}
    } catch (ParserConfigurationException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (SAXException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IOException e) {
    // TODO Auto-generated catch blockwebservice.putheader("
    e.printStackTrace();
    }
      }
    return null;
    }
    public static String testPost(String urlStr, String phoneNumber, String smsContent) {
    String line = "";
      try {
    URL url = new URL(urlStr);
    URLConnection con = url.openConnection();
    con.setDoOutput(true);
    con.setRequestProperty("Pragma:", "no-cache");
    con.setRequestProperty("Cache-Control", "no-cache");
    con.setRequestProperty("Connection", "close");
    con.setRequestProperty("Content-Type", "text/xml; charset=utf-8");
    con.setRequestProperty("Action", "\"submitreq\"");	         //此处按照接口文档说明按收发实际正确配置
    
    String xmlInfo = getXmlInfo(phoneNumber, smsContent);
    System.out.println("urlStr=" + urlStr);
    System.out.println("xmlInfo=" + xmlInfo);
    if (xmlInfo == ""){
    return "";
    }else{
     con.setRequestProperty("Content-Length", Integer.toString(new String(xmlInfo.getBytes("UTF-8")).length()));
     OutputStreamWriter out = new OutputStreamWriter(con.getOutputStream());
     out.write(new String(xmlInfo.getBytes("UTF-8")));
     out.flush();
     out.close();
     BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream()));
    //	            System.out.println(br.readLine());
     for (line = br.readLine(); line != null; line = br.readLine()) {
      break;
     }
    }
      } catch (MalformedURLException e) {
    e.printStackTrace();
    line = "";
      } catch (IOException e) {
    e.printStackTrace();
    line = "";
      }
      return line;
     }
    
    private static String getXmlInfo(String phoneNumber, String smsContent) {
    StringBuffer msg = new StringBuffer();
    msg.append(smsContent);
    String msgutf8;
    try {
    msgutf8 = new String(msg.toString().getBytes("UTF-8"));
    } catch (UnsupportedEncodingException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    msgutf8 = "";
    }
    if (msgutf8 != ""){
      StringBuilder sb = new StringBuilder();
      sb.append("<?xml version=\"1.0\" encoding=\"utf-8\"?><Body>");
      sb.append("<user>123456</user><password>123456</password><version>1.2</version><submit><usermsgid>123456789012</usermsgid><desttermid>" + phoneNumber + "</desttermid><srctermid></srctermid><msgcontent>" + getBase64(msgutf8) + "</msgcontent><signid></signid><desttype>0</desttype><needreply>1</needreply></submit></Body>");	
      //此处改成正式配给的账号密码
      return sb.toString();
    }else{
    return "";
    }
    }
    public static String getBase64(String str) {
    String encoded = Base64.encode(str, "UTF-8");
      return encoded;
     }  
    
    public String getFromBase64(String s) {
    String decoded = Base64.decode(s, "UTF-8");
      return decoded;
     }  
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    
    String[] results = sendSms("13888888888", "测试下发【测试】");
    //此处改成目的手机号码和实际短信内容
    System.out.println(results);
    if (results == null) {
    System.out.println(results);
    }else{
    for (int i = 0 ; i <results.length ; i++ ) {
    System.out.println("--"+results[i]);
    }
    }
    }
    }
    

    PYTHON样例

    #coding=utf-8
    
    import base64
    import httplib
    from xml.sax.saxutils import unescape
    import urllib
    
    ip = "123.56.14.50"
    port = 9191
    mobile = "13888888888"
    src_term = "" # 测试时候填空
    msg = base64.encodestring("这是测试!【测试】")
    
    def sendsms():
     try:
      XmlMessage = """<?xml version="1.0" encoding="UTF-8"?><Body><user>123456</user><password>123456</password><version>1.2</version>%s</Body>
      """.replace('\r', '').replace('\n', '')
      submit = "<submit><usermsgid>012345678912</usermsgid><desttermid>%s</desttermid><srctermid>%s</srctermid><msgcontent>%s</msgcontent><signid></signid><desttype>0</desttype><tempid>1</tempid><needreply>1</needreply></submit>"
      submit = submit %(mobile, src_term, msg)
      XmlMessage = XmlMessage % submit
      conn = httplib.HTTPConnection(ip, port)
      conn.putrequest("POST", "/adc_posthandler_test",0,1)
      conn.putheader("Content-Type", "text/xml; charset=utf-8")
      conn.putheader("Content-Length", "%d" % len(XmlMessage))
      conn.putheader("Pragma", "no-cache")
      conn.putheader("Connection", 'Close')
      conn.putheader("Action", '"submitreq"')
      conn.endheaders()
      conn.send(XmlMessage)
      response = conn.getresponse()
      resp = response.read()
      resp = unescape(resp.replace('\n','').replace('\r',''))
      print resp
     except Exception, e:
      print e
     finally:
      if conn:
    conn.close()
    
    if __name__ == '__main__':
     sendsms()
    

    PHP样例

    <?php
    
    //下面的demo,实现了简单的发送功能。
    
    //首先检测是否支持curl
    if (!extension_loaded("curl")) {
     trigger_error("对不起,请开启curl功能模块!", E_USER_ERROR);
    }
    
    //构造xml
    $xmldata=
    '<?xml version="1.0" encoding="utf-8"?><Body><user>123456</user><password>123456</password>
    <version>1.2</version><submit><usermsgid>L6z6CGj2tK9T</usermsgid><desttermid>17610063060
    </desttermid><srctermid>1451</srctermid><msgcontent>5rWL6K+V54q25oCB5oql5ZGK44CQ5rWL6K+
    V44CR</msgcontent><signid></signid><desttype>0</desttype><needreply>1</needreply></submit>
    </Body>'; //初始一个curl会话 $curl = curl_init(); //设置url curl_setopt($curl, CURLOPT_URL,"http://123.56.14.50:9191/adc_posthandler_test"); //设置发送方式:post curl_setopt($curl, CURLOPT_POST, true); //注意: 'Action: "submitreq"' 里面必须有双引号,其他Action也类似 curl_setopt($curl, CURLOPT_HTTPHEADER, array('Pragma: no-cache', 'Connection: close', 'Content-Type:
    text/xml; charset=utf-8', 'Content-Length: ' . strlen($xmldata), 'Action: "submitreq"')); //设置发送数据 curl_setopt($curl, CURLOPT_POSTFIELDS, $xmldata); //TRUE 将curl_exec()获取的信息以字符串返回,而不是直接输出 curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); //执行cURL会话 ( 返回的数据为xml ) $return_xml = curl_exec($curl); //关闭cURL资源,并且释放系统资源 curl_close($curl); echo $return_xml; exit; ?>