using System.Collections.Generic; |
using System.Threading.Tasks; |
using System.Security.Cryptography; |
// newtonsoft json 模塊請自行到 http://www.newtonsoft.com/json 下載 |
using Newtonsoft.Json.Linq; |
string url = "https://yun.tim.qq.com/v3/tlssmssvr/sendsms"; |
public SmsSender(int sdkappid, string appkey) |
this.sdkappid = sdkappid; |
public void sendMsg(string nationCode, string phoneNumber, string content) |
JObject data = new JObject(); |
JObject tel = new JObject(); |
tel.Add("nationcode", nationCode); |
tel.Add("phone", phoneNumber); |
data.Add("msg", content); |
string sig = stringMD5(appkey + phoneNumber); |
data.Add("type", "0"); // 默認為單發 |
data.Add("extend", ""); // 根據需要添加,一般保持默認 |
data.Add("ext", ""); // 根據需要添加,一般保持默認 |
string msgString = JsonConvert.SerializeObject(data); |
Console.WriteLine(msgString); |
Random rnd = new Random(); |
int random = rnd.Next(1000000) % (900000) + 1000000; |
string wholeUrl = url + "?sdkappid=" + sdkappid + "&random=" + random; |
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(wholeUrl); |
request.ContentType = "application/x-www-form-urlencoded"; |
byte[] requestData = Encoding.UTF8.GetBytes(msgString); |
request.ContentLength = requestData.Length; |
Stream requestStream = request.GetRequestStream(); |
requestStream.Write(requestData, 0, requestData.Length); |
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); |
Stream responseStream = response.GetResponseStream(); |
StreamReader streamReader = new StreamReader(responseStream, Encoding.GetEncoding("utf-8")); |
string retString = streamReader.ReadToEnd(); |
Console.WriteLine(retString); |
Console.WriteLine(e.ToString()); |
private static string stringMD5(string input) |
MD5 md5 = new MD5CryptoServiceProvider(); |
byte[] targetData = md5.ComputeHash(System.Text.Encoding.UTF8.GetBytes(input)); |
return byteToHexStr(targetData); |
// 將二進制的數值轉換為 16 進制字符串,如 "abc" => "616263" |
private static string byteToHexStr(byte[] input) |
for (int i = 0; i < input.Length; i++) |
returnStr += input[i].ToString("x2"); |
static void Main(string[] args) |
// sdkappid 和 appkey 請根據開放者申請的填寫,下面的是無效的 |
SmsSender sender = new SmsSender(1234567890, "1234567890"); |
// 發送手機號以及發送內容請根據實際情況調整,特別是內容需要匹配模板 |
sender.sendMsg("86", "13012345678", "驗證碼 1234"); |
}
1 協議說明
協議 HTTP POST
編碼格式 UTF8
URL 舉例:https://yun.tim.qq.com/v3/tlssmssvr/sendsms?sdkappid=xxxxx&random=xxxx
接口說明 給用戶發短信驗證碼、短信通知,營銷短信(內容長度不超過450字)。
注:sdkappid請填寫您在騰訊雲上申請到的,random請填成隨機數。
2 請求包體
包體為json字符串,參數如下:
{
"tel": {
"nationcode": "86", //國家碼
"phone": "13788888888" //手機號碼
},
"type": "0", //0:普通短信;1:營銷短信(強調:要按需填值,不然會影響到業務的正常使用)
"msg": "你的驗證碼是1234", //驗證碼,utf8編碼
"sig": "fdba654e05bc0d15796713a1a1a2318c", //app憑證,具體計算方式見下注
"extend": "", //可選字段,默認沒有開通(需要填空)。通道擴展碼,
//在短信回復場景中,騰訊server會原樣返回,開發者可依此區分是哪種類型的回復
"ext": "" //可選字段,不需要就填空。用戶的session內容,騰訊server回包中會原樣返回
}
注:
1、"msg"字段需要匹配審核通過的模板內容
如果您的模板是"你的驗證碼是{1}",則"msg"字段可賦值為:"你的驗證碼是xxxx"。(其中"xxxx"為下發的驗證碼)
如果您有多個短信簽名,請將需要的短信簽名放在短信內容前面
例如您有"【騰訊科技】","【騰訊雲】"兩個簽名,但是想以"【騰訊雲】"簽名發送短信,
則"msg"字段可賦值為:"【騰訊雲】你的驗證碼是xxxx"。(其中"xxxx"為下發的驗證碼)
如果是海外手機,則不要攜帶短信簽名。
2、"extend"字段的配置請聯系騰訊雲短信技術支持
3、"sig"字段 為appkey + phone字段的 md5值,c++ 示例代碼如下:
string strPhone = "13712345678";
string strAppkey = "dffdfd6029698a5fdf4"; //sdkappid對應的appkey,需要業務方高度保密
string sig = md5(strAppkey + strPhone); //將strAppkey和 strPhone拼接后再求md5
3 應答包體
{
"result": "0", //0表示成功(計費依據),非0表示失敗
"errmsg": "", //result非0時的具體錯誤信息
"ext": "some msg", //用戶的session內容,騰訊server回包中會原樣返回
"sid": "xxxxxxx", //標識本次發送id
"fee": 1 //短信計費的條數
}