using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.IO;
using System.Security.Cryptography;
namespace TestMt
{
///
/// mt3 接口测试类。 直接调用 TestMt3.Main1 方法
/// 修改 src 用户名 和 pwd 密码, dest: 目的号码, sender:原号码
///
public class TestMt3
{
public static void Main1(string[] args)
{
String URL = "http://210.51.190.233:8085/mt/mt3.ashx"; //接口地址
String fmt = "src={0}&pwd={1}&ServiceID=SEND&dest={2}&sender={3}&msg={4}&codec=8"; // HTTP 请求参数格式
string src = ""; // 你的用户名, 必须有值
string pwd = ""; // 你的密码, 必须有值
string dest = "861370xxxxxxx";// 你的目的号码【收短信的电话号码】, 必须有值
// 你的原号码,可空【大部分国家原号码带不过去,只有少数国家支持透传,所有一般为空】
string sender = "8613701234567";
// 短信内容
string msg = "大家啊 , 测试一下 啊 ...hello ..";//你的短信内容
// codec=8, Unicode 编码, 3, ISO-8859-1, 0 ASCII
// 短信内容 HEX 编码,8 为 UTF-16BE HEX 编码, dataCoding = 8 ,支持所有国家的语言,建议直接使用 8
string hexmsg = encodeHexStr(8, msg);
// 格式化 HTTP 请求参数格式
string poststring = string.Format(fmt, new string[] { src, pwd, dest, sender, hexmsg });
byte[] postData = System.Text.Encoding.ASCII.GetBytes(poststring);
// HTTP 封包请求,返回结果,如果是以 “-” 开头的为发送失败,请查看错误代码,否则为MSGID
string rs = doPostRequest(URL, postData); // HTTP 封包请求
Console.WriteLine("SEND RESULT:" + rs);
Console.ReadLine();
}
//字符编码成HEX
private static String encodeHexStr(int dataCoding, String realStr)
{
string strhex = "";
try
{
Byte[] bytSource = null;
if (dataCoding == 15)
{
bytSource = Encoding.GetEncoding("GBK").GetBytes(realStr);
}
else if (dataCoding == 3)
{
bytSource = Encoding.GetEncoding("ISO-8859-1").GetBytes(realStr);
}
else if (dataCoding == 8)
{
bytSource = Encoding.BigEndianUnicode.GetBytes(realStr);
}
else
{
bytSource = Encoding.ASCII.GetBytes(realStr);
}
for (int i = 0; i < bytSource.Length; i++)
{
strhex = strhex + bytSource[i].ToString("X2");
}
}
catch (System.Exception err)
{
return realStr;
}
return strhex;
}
//hex编码还原成字符
private static String decodeHexStr(int dataCoding, String hexStr)
{
String strReturn = "";
try
{
int len = hexStr.Length / 2;
byte[] bytSrc = new byte[len];
for (int i = 0; i < len; i++)
{
string s = hexStr.Substring(i * 2, 2);
bytSrc[i] = Byte.Parse(s, System.Globalization.NumberStyles.AllowHexSpecifier);
}
if (dataCoding == 15)
{
strReturn = Encoding.GetEncoding("GBK").GetString(bytSrc);
}
else if (dataCoding == 3)
{
strReturn = Encoding.GetEncoding("ISO-8859-1").GetString(bytSrc);
}
else if (dataCoding == 8)
{
strReturn = Encoding.BigEndianUnicode.GetString(bytSrc);
}
else
{
strReturn = System.Text.ASCIIEncoding.ASCII.GetString(bytSrc);
}
}
catch (System.Exception err)
{
return hexStr;
}
return strReturn;
}
//POST方式发送得结果
public static String doPostRequest(string url, byte[] bData)
{
System.Net.HttpWebRequest hwRequest;
System.Net.HttpWebResponse hwResponse;
string strResult = string.Empty;
try
{
hwRequest = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url);
hwRequest.Timeout = 30000;
hwRequest.Method = "POST";
hwRequest.ContentType = "application/x-www-form-urlencoded";
hwRequest.ContentLength = bData.Length;
System.IO.Stream smWrite = hwRequest.GetRequestStream();
smWrite.Write(bData, 0, bData.Length);
smWrite.Close();
}
catch (System.Exception err)
{
WriteErrLog(err.ToString());
return strResult;
}
//get response
try
{
hwResponse = (HttpWebResponse)hwRequest.GetResponse();
StreamReader srReader = new StreamReader(hwResponse.GetResponseStream(), Encoding.ASCII);
strResult = srReader.ReadToEnd();
srReader.Close();
hwResponse.Close();
}
catch (System.Exception err)
{
WriteErrLog(err.ToString());
}
return strResult;
}
//GET方式发送得结果
public static String doGetRequest(string url)
{
HttpWebRequest hwRequest;
HttpWebResponse hwResponse;
string strResult = string.Empty;
try
{
hwRequest = (System.Net.HttpWebRequest)WebRequest.Create(url);
hwRequest.Timeout = 30000;
hwRequest.Method = "GET";
hwRequest.ContentType = "application/x-www-form-urlencoded";
}
catch (System.Exception err)
{
WriteErrLog(err.ToString());
return strResult;
}
//get response
try
{
hwResponse = (HttpWebResponse)hwRequest.GetResponse();
StreamReader srReader = new StreamReader(hwResponse.GetResponseStream(), Encoding.ASCII);
strResult = srReader.ReadToEnd();
srReader.Close();
hwResponse.Close();
}
catch (System.Exception err)
{
WriteErrLog(err.ToString());
}
return strResult;
}
public static void WriteErrLog(string strErr)
{
Console.WriteLine(strErr);
System.Diagnostics.Trace.WriteLine(strErr);
}
const string SEND_SUC = "0"; // 发送成功
const string SEND_ERROR = "-01"; // 系统维护中,请联系客服
const string NOT_ENOUGHCREDITS = "-02"; // 当前账号余额不足
const string ACCOUNT_BLOCKED = "-03"; // 帐号停止
const string NETWORK_NOTCOVERED = "-04"; // 目的号码运营商不在服务覆盖范围
const string DEST_NUMBER_EXCEED_MAX = "-05"; // 目的手机号码数量超长(30/次,超30个请自行做循环)
const string INVALID_USER_OR_PASS = "-06"; // 用户或密码错误
const string MISSING_DESTINATION_ADDRESS = "-07"; // 目的号码不能为空
const string MISSING_SMSTEXT = "-08"; // 短信内容不能为空
const string MISSING_SENDERNAME = "-09"; //源号码不能为空
const string DEST_INVALIDFORMAT = "-10"; // DEST参数格式错误
const string MISSING_USERNAME = "-11"; // 用户名空
const string MISSING_PASS = "-12"; // 密码空
const string NETWORK_FAIL = "-13"; // 网络错误
const string INTERAL_ERROR = "-14"; // 内部错误
const string INVALID_DESTINATION_ADDRESS = "-15"; // 非法手机号码,手机号码格式不对
// 短信内容超长!(UNICODE最大70个字符,Alphabet编码(英文即以此方式传输)最大160字符)
const string INVALID_SMS_MAX_LENGTH = "-16";
const string BLACKWORD_IN_SMS = "-17"; // 短信内容含有非法字符
const string DEST_IN_BLACKLIST = "-18"; //目的手机号码限制
const string INVALID_DCS = "-19"; // 短信内容编码不对(比如发中文、韩文、日文而用Alphabet编码方式)
const string INTERAL_ERROR_SERVICE_NO_START = "-20"; // 预处理服务没有启动
}
}