一、短信格式

    • 短信由簽名和內容兩部分組成。用戶需要先申請短信簽名,審批通過后,再申請短信模板
    • 驗證碼短信示例:【融合通信】您的注冊驗證碼為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。

    測試服務器信息

    • //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 = "//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,"//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; ?>