最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#使用融合通信API發(fā)送手機短信息

 更新時間:2024年11月15日 08:26:49   作者:初九之潛龍勿用  
融合云通信服務(wù)平臺,為企業(yè)提供全方位通信服務(wù),發(fā)送手機短信是其一項核心功能,本文將講述如何使用融合云服務(wù)API為終端手機用戶發(fā)送短信信息,并使用?C#?進行實現(xiàn),感興趣的可以了解下

功能實現(xiàn)

融合云通信服務(wù)平臺,為企業(yè)提供全方位通信服務(wù),發(fā)送手機短信是其一項核心功能,本文將講述如何使用融合云服務(wù)API為終端手機用戶發(fā)送短信信息,并使用 C# 進行實現(xiàn)。

范例運行環(huán)境

操作系統(tǒng): Windows Server 2019 DataCenter

.net版本: .netFramework4.7.2 或以上

開發(fā)工具:VS2019  C#

實現(xiàn)范例

類設(shè)計

設(shè)計UTC(融合通信)類,子類SMS類實現(xiàn)發(fā)送短信功能,SMS類設(shè)計見下表:

序號成員類型名稱類型說明
1屬性ErrorMessagestring此值代表調(diào)用API時發(fā)生的任何錯誤信息
2屬性ResultJsonstring返回調(diào)用API成功后返回的結(jié)果(并不代表一定發(fā)送成功)
3屬性errcodestring成功調(diào)用API后返回的錯誤碼:0代表發(fā)送成功,其它值請參照 errmsg 值提示
4屬性errmsgstring請參照 errcode屬性的解釋
5屬性cTypestring默認(rèn)值為xml(小寫值),還可選擇 json(小寫值),這是云平臺提供的兩種 POST 消息體的類型
6屬性signstring申請云API開發(fā)者,被授權(quán)提供的簽名,如【XX公司】
7屬性uidstring申請云API開發(fā)者,被授權(quán)提供的用戶名
8屬性pwdstring申請云API開發(fā)者,被授權(quán)提供的密碼
9屬性desttypestring目標(biāo)手機用戶運營商類型:1 移動,2 聯(lián)通,3電信 ,默認(rèn)為 0 (通用)
10屬性sendUrlstring申請云API開發(fā)者,被授權(quán)提供的可調(diào)用API地址,一般會有兩個地址:
POST XML 消息體的請調(diào)用例如:
http://api.uctyun.cn:0000/adc_posthandler_new
POST JSON 消息體的請調(diào)用例如:
http://api.uctyun.cn:0000/adc_posthandler_json
11屬性postInfostring這是一個調(diào)試信息,返回生成的 POST 消息體信息
12方法sendvoidsend方法有兩個參數(shù):
1:string phoneNumber (手機號)
2:string msgContent (要發(fā)送的消息)
本方法無返回類型,返回值均返寫到 ErrorMessage / ResultJson / errcode / errmsg / postInfo 屬性值上

類代碼實現(xiàn)

實現(xiàn)代碼如下:

public class UTC
{
            public class SMS
            {
                public string ErrorMessage = "";
                public string ResultJson = "";
                public string errcode = "";
                public string errmsg = "";
                public string cType = "xml";
                public string sign { get; set; }
                public string uid { get; set; }
                public string pwd { get; set; }
                public string desttype { get; set; }
                public string sendUrl { get; set; }
                public string postInfo = "";
                public SMS() {
                    desttype = "0";
 
                }
                public void send(string phoneNumber, string msgContent) {
                    byte[] bytes = System.Text.Encoding.UTF8.GetBytes(msgContent + sign);
                    string base64msg = System.Convert.ToBase64String(bytes);
 
                    
                    string[] headers = new string[3];
                    headers[0] = "Connection:close";
                    headers[1] = "Content-Type:text/" + cType + ";charset=utf-8";
                    headers[2] = "Action:\"submitreq\"";
 
                    string postData = "{\"user\":\"" + uid + "\",\"password\":\"" + pwd + "\",\"submit\":[" +
                                    "{\"srctermid\":\"\"," +
                                    "\"desttermid\":\"" + phoneNumber + "\",\"msgcontent\":\"" + base64msg + "\"," +
                                    "\"usermsgid\":\"" + msgid + "\"," +
                                    "\"desttype\":\"" + desttype + "\"}]}";
                    if (cType == "xml")
                    {
                        string xmlData = "<?xml version=\"1.0\" encoding=\"utf-8\"?><Body>" +
                        "<user>" + uid + "</user><password>" + pwd + "</password>" +
                        "<version>1.2</version><submit><usermsgid>" + msgid + "</usermsgid><desttermid>" +
                        phoneNumber + "</desttermid><srctermid></srctermid><msgcontent>" + base64msg
                        + "</msgcontent><signid>0</signid><desttype>" + desttype + "</desttype><needreply>1</needreply>" +
                        "</submit></Body> ";
                        postData = xmlData;
                    }
                    postInfo = postData;
 
                    ErrorMessage = "";
                    ResultJson = "";
                    errcode = "";
                    errmsg = "";
                    string rs=GetResponseResult(sendUrl, Encoding.UTF8, "POST", postData, headers);
                    ErrorMessage = ws.ErrorMessage;
                    ResultJson = rs;
                    if (ErrorMessage == "" && ResultJson != "")
                    {
                        if (cType == "xml")
                        {
                            string[] rv_xml = GetBetweenStr(rs, "<result>", "</result>").Split(':');
                            errcode = rv_xml[0];
                            if (rv_xml.Length>1)
                            {
                                errmsg = rv_xml[1];
                            }
                        }
                        else if (cType == "json")
                        {
                            try
                            {
                                Newtonsoft.Json.Linq.JObject jsonObj = Newtonsoft.Json.Linq.JObject.Parse(rs);
                                string[] rv = jsonObj["result"].ToString().Split(':');
                                errcode = rv[0];
                                if (rv.Length > 1)
                                {
                                    errmsg = rv[1];
                                }
                            }
                            catch (Exception e)
                            {
                                ErrorMessage += "\r\n" + e.Message;
                                ResultJson = rs;
                            }
                        }
                    }
 
                }
        public string GetBetweenStr(string wholestr,string beginstr,string endstr)
		{				
 
			string _temp="";
            if (beginstr == null && endstr == null) return "";
			int _start=(beginstr==null?0:wholestr.IndexOf(beginstr,0));
            if (_start == -1)
            {
                return "";
            }
            if (beginstr == null)
            {
                beginstr = "";
                if (wholestr.IndexOf(endstr, 0) == -1)
                {
                    return "";
                }
            }
            if (endstr != null)
            {
                int _end = wholestr.IndexOf(endstr,_start+beginstr.Length);
                if ((_end - _start - beginstr.Length > 0) && (_end > _start))
                {
                    _temp = wholestr.Substring(_start + beginstr.Length, _end - _start - beginstr.Length);
                }
            }
            else
            {
                if (wholestr.IndexOf(beginstr, 0) == -1)
                {
                    return "";
                }
                int _end = wholestr.Length;
                if ((_end - _start - beginstr.Length > 0) && (_end > _start))
                {
                    _temp = wholestr.Substring(_start + beginstr.Length, _end - _start - beginstr.Length);
                }
            }
			return _temp;
		    }
 
       }
}

調(diào)用范例

示例代碼如下:

UTC.SMS utcsms = new UTC.SMS();
utcsms.cType = "xml";   //設(shè)置為 POST XML 消息體類型
utcsms.uid = "888888";              
utcsms.pwd = "TJ999999";
utcsms.sign = "【XX公司】";
utcsms.sendUrl = "http://api.uctyun.cn:0000/adc_posthandler_new";
//utcsms.sendUrl = "http://api.uctyun.cn:0000/adc_posthandler_json";  //如果是JSON請訪問這個類型的API 地址
 
//發(fā)送短信,提供手機號和短信息內(nèi)容
utcsms.send("13899999999", "融合通信提醒您,您正在執(zhí)行登錄操作,驗證碼:12345678");
 
string debug = string.Format("API:errcode:{4}\r\nerrmsg:{5}\r\n{3}\r\nErrMessage:{0}\r\nResultJson:{1}\r\nPostInfo:{2}", utcsms.ErrorMessage, utcsms.ResultJson, utcsms.postInfo, utcsms.sendUrl,utcsms.errcode,utcsms.errmsg);

總結(jié)

GetResponseResult 方法本次得到了更新,主要包括消息頭的 Connection 名稱,在 C#中使用 request.KeepAlive= Value == "close"?false : true; 的寫法來實現(xiàn)。更新后的代碼如下:

        public string GetResponseResult(string url, System.Text.Encoding encoding, string method, string postData,string[] headers,string ContentType= "application/x-www-form-urlencoded",bool secValid=true)
        {
            method = method.ToUpper();
            if (secValid == false)
            {
                ServicePointManager.ServerCertificateValidationCallback = validSecurity;
            }
            System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls | System.Net.SecurityProtocolType.Tls11 | System.Net.SecurityProtocolType.Tls12;
            
            if (method == "GET")
            {
                try
                {
                    WebRequest request2 = WebRequest.Create(@url);
                    request2.Method = method;
                    WebResponse response2 = request2.GetResponse();
                    Stream stream = response2.GetResponseStream();
                    StreamReader reader = new StreamReader(stream, encoding);
                    string content = reader.ReadToEnd();
                    return content;
                }
                catch (Exception ex)
                {
                    ErrorMessage = ex.Message;
                    return "";
                }
 
            }
            Stream outstream = null;
            Stream instream = null;
            StreamReader sr = null;
            HttpWebResponse response = null;
            HttpWebRequest request = null;
            byte[] data = encoding.GetBytes(postData);
            // 準(zhǔn)備請求...
            try
            {
                // 設(shè)置參數(shù)
                request = WebRequest.Create(url) as HttpWebRequest;
                CookieContainer cookieContainer = new CookieContainer();
                request.CookieContainer = cookieContainer;
                request.AllowAutoRedirect = true;
                request.Method = method;
                request.Timeout = 1000000;
                if (headers != null)
                {
                    for(int i = 0; i < headers.GetLength(0); i++)
                    {
                        if (headers[i].Split(':').Length <2)
                        {
                            continue;
                        }
 
                        if (headers[i].Split(':').Length > 1) {
                            if (headers[i].Split(':')[0] == "Host") {
                                request.Host = headers[i].Split(':')[1];
                                continue;
                            }else if (headers[i].Split(':')[0] == "Content-Type")
                            {
                                request.ContentType = headers[i].Split(':')[1];
                                continue;
                            }
                            else if (headers[i].Split(':')[0] == "Connection")
                            {
                                request.KeepAlive= headers[i].Split(':')[1]== "close"?false : true;
                                continue;
                            }
 
                        }
                        request.Headers.Add(headers[i]);
                    }
                }
                request.ContentType = ContentType;
                request.ContentLength = data.Length;
                outstream = request.GetRequestStream();
                outstream.Write(data, 0, data.Length);
                outstream.Close();
                //發(fā)送請求并獲取相應(yīng)回應(yīng)數(shù)據(jù)
                response = request.GetResponse() as HttpWebResponse;
                //直到request.GetResponse()程序才開始向目標(biāo)網(wǎng)頁發(fā)送Post請求
                instream = response.GetResponseStream();
                sr = new StreamReader(instream, encoding);
                //返回結(jié)果網(wǎng)頁(html)代碼
                string content = sr.ReadToEnd();
                sr.Close();
                sr.Dispose();
                
                return content;
            }
            catch (Exception ex)
            {
                ErrorMessage = ex.Message;
                return "";
            }
        }//get response result

更多介紹請參閱我的文章:《C# 實現(xiàn)訪問 Web API Url 提交數(shù)據(jù)并獲取處理結(jié)果》

到此這篇關(guān)于C#使用融合通信API發(fā)送手機短信息的文章就介紹到這了,更多相關(guān)C#發(fā)送手機短信息內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#設(shè)置程序開機啟動的實現(xiàn)示例

    C#設(shè)置程序開機啟動的實現(xiàn)示例

    本文主要介紹了C#設(shè)置程序開機啟動的實現(xiàn)示例,可以通過修改注冊表將啟動信息寫入注冊表來實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • C#算法函數(shù):獲取一個字符串中的最大長度的數(shù)字

    C#算法函數(shù):獲取一個字符串中的最大長度的數(shù)字

    這篇文章介紹了使用C#獲取一個字符串中最大長度的數(shù)字的實例代碼,有需要的朋友可以參考一下。
    2016-06-06
  • 使用C#將Markdown轉(zhuǎn)換為Word或PDF的實現(xiàn)方法

    使用C#將Markdown轉(zhuǎn)換為Word或PDF的實現(xiàn)方法

    在現(xiàn)代軟件開發(fā)和內(nèi)容創(chuàng)作中,我們經(jīng)常需要在不同的文檔格式之間進行轉(zhuǎn)換,Markdown以其簡潔、易讀寫和版本控制友好的特性,越來越受到開發(fā)者的青睞,本文將深入探討如何利用C#和強大的Spire.Doc for .NET庫,輕松實現(xiàn)Markdown到Word和PDF的高效、可靠轉(zhuǎn)換
    2025-09-09
  • C#/VB.NET?實現(xiàn)彩色PDF轉(zhuǎn)為灰度PDF

    C#/VB.NET?實現(xiàn)彩色PDF轉(zhuǎn)為灰度PDF

    本文以C#代碼為例介紹如何實現(xiàn)將彩色PDF文件轉(zhuǎn)為灰度(黑白)的PDF文件,即將PDF文檔里面的彩色圖片或者文字等通過調(diào)用方法轉(zhuǎn)為文檔頁面為灰色調(diào)、無彩色效果的文檔。快來跟隨小編一起學(xué)習(xí)吧
    2021-11-11
  • C#設(shè)置PDF表單不可編輯以及提取表單數(shù)據(jù)的操作

    C#設(shè)置PDF表單不可編輯以及提取表單數(shù)據(jù)的操作

    PDF表單是PDF中的可編輯區(qū)域,允許用戶填寫指定信息,當(dāng)表單填寫完成后,有時候我們可能需要將其設(shè)置為不可編輯,以保護表單內(nèi)容的完整性和可靠性,本文將給大家介紹C#設(shè)置PDF表單不可編輯以及提取表單數(shù)據(jù)的操作,需要的朋友可以參考下
    2024-06-06
  • 關(guān)于C#中ajax跨域訪問問題

    關(guān)于C#中ajax跨域訪問問題

    最近做項目,需要跨域請求訪問數(shù)據(jù)問題。下面通過本文給大家分享C#中ajax跨域訪問代碼詳解,需要的朋友可以參考下
    2017-05-05
  • C#與C++枚舉的區(qū)別對比和使用案例

    C#與C++枚舉的區(qū)別對比和使用案例

    本文詳細(xì)講解了C#與C++枚舉的區(qū)別對比和使用案例,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • C#實現(xiàn)虛擬鍵盤的實例詳解

    C#實現(xiàn)虛擬鍵盤的實例詳解

    這篇文章主要為大家詳細(xì)介紹了如何利用C#實現(xiàn)虛擬鍵盤,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下
    2022-12-12
  • C#窗體傳值代碼方法

    C#窗體傳值代碼方法

    在本篇文章里小編給大家整理的是關(guān)于C#窗體傳值代碼內(nèi)容,需要的朋友們可以跟著學(xué)習(xí)參考下。
    2020-02-02
  • C#使用ODBC與OLEDB連接數(shù)據(jù)庫的方法示例

    C#使用ODBC與OLEDB連接數(shù)據(jù)庫的方法示例

    這篇文章主要介紹了C#使用ODBC與OLEDB連接數(shù)據(jù)庫的方法,結(jié)合實例形式分析了C#基于ODBC與OLEDB實現(xiàn)數(shù)據(jù)庫連接操作簡單操作技巧,需要的朋友可以參考下
    2017-05-05

最新評論

平果县| 那坡县| 盈江县| 泰和县| 新干县| 凤台县| 高密市| 旌德县| 朝阳县| 无锡市| 彰武县| 元江| 冕宁县| 奉节县| 寿光市| 肃宁县| 桂阳县| 香河县| 彭山县| 望江县| 皮山县| 桃源县| 黑龙江省| 玉山县| 马边| 简阳市| 嘉善县| 大竹县| 乌兰浩特市| 汽车| 永州市| 固原市| 华安县| 互助| 南通市| 治多县| 集贤县| 天长市| 望城县| 田阳县| 布拖县|