using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
namespace NoteSMS
{
public class Note
{
public Note()
{
}
/// <summary>
///
/// </summary>
/// <param name="_x_eid">企业ID</param>
/// <param name="_x_uid">账号</param>
/// <param name="_x_pwd">登陆密码</param>
/// <param name="_x_pwd_md5">登陆密码MD5值</param>
/// <param name="_x_gate_id">短信通道</param>
public Note(string _x_eid, string _x_uid, string _x_pwd, string _x_pwd_md5, string _x_gate_id)
{
x_eid = _x_eid;
x_uid = _x_uid;
x_pwd = _x_pwd;
x_pwd_md5 = _x_pwd_md5;
x_gate_id = _x_gate_id;
}
/// <summary>
///
/// </summary>
/// <param name="_x_eid">企业ID</param>
/// <param name="_x_uid">账号</param>
/// <param name="_x_pwd">登陆密码</param>
/// <param name="_x_pwd_md5">登陆密码MD5值</param>
/// <param name="_x_gate_id">短信通道</param>
/// <param name="_apiurl">网关地址: GB2312网关 http://gateway.woxp.cn:6630/gb2312/web_api/ UTF-8网关(为空时默认) http://gateway.woxp.cn:6630/utf8/web_api/</param>
/// <param name="_apicode">apiurl对应的编码类型:utf8、gb2312,为空时默认utf8</param>
public Note(string _x_eid, string _x_uid, string _x_pwd, string _x_pwd_md5, string _x_gate_id, string _apiurl, string _apicode)
{
x_eid = _x_eid;
x_uid = _x_uid;
x_pwd = _x_pwd;
x_pwd_md5 = _x_pwd_md5;
x_gate_id = _x_gate_id;
apiurl = _apiurl;
apicode = _apicode;
}
#region 参数
//http://www.woxp.cn/
//http://www.xhsms.com/
/// <summary>
/// 企业ID
/// </summary>
private string _x_eid = "XXXXXX ";
/// <summary>
/// 短信通道
/// </summary>
private string _x_gate_id = "300";
/// <summary>
/// 账号
/// </summary>
private string _x_uid = "XXXXXX ";
/// <summary>
/// 登陆密码MD5值
/// </summary>
private string _x_pwd_md5 = "E10ADC3949BA59ABBE56E057F20F883E";//
/// <summary>
/// 登陆密码
/// </summary>
private string _x_pwd = "123456";
/// <summary>
/// apiurl对应的编码类型:utf8、gb2312
/// </summary>
private string _apicode = "utf8";
/// <summary>
/// 请求的api地址
/// </summary>
private string _apiurl = "http://gateway.woxp.cn:6630/utf8/web_api/";
/// <summary>
/// 企业ID
/// </summary>
public string x_eid
{
get
{
return _x_eid;
}
set
{
_x_eid = value;
}
}
/// <summary>
/// 账号
/// </summary>
public string x_uid
{
get
{
return _x_uid;
}
set
{
_x_uid = value;
}
}
/// <summary>
/// 登陆密码MD5值
/// </summary>
public string x_pwd_md5
{
get
{
return _x_pwd_md5;
}
set
{
_x_pwd_md5 = value;
}
}
/// <summary>
/// 短信通道
/// </summary>
public string x_gate_id
{
get
{
return _x_gate_id;
}
set
{
if (value == "")
{
_x_gate_id = "300";
}
_x_gate_id = value;
}
}
/// <summary>
/// 密码
/// </summary>
public string x_pwd
{
get
{
return _x_pwd;
}
set
{
_x_pwd = value;
}
}
/// <summary>
/// 请求的api地址
/// </summary>
public string apiurl
{
get
{
return _apiurl;
}
set
{
if (value.Trim() == "")
{
_apiurl = "http://gateway.woxp.cn:6630/utf8/web_api/";
}
else
{
_apiurl = value;
}
}
}
/// <summary>
/// apiurl对应的编码类型:utf8、gb2312
/// </summary>
public string apicode
{
get
{
return _apicode;
}
set
{
if (value.Trim() == "utf8")
{
_apicode = "";
return;
}
_apicode = value;
}
}
#endregion
#region Web Service引用实现发送短信
//Web Service引用,项目好像是好.net2.0才行
//Web Service地址: GB2312网关 http://gateway.woxp.cn:6630/gb2312/ws_api/WebSMS.asmx
// UTF-8 网关 http://gateway.woxp.cn:6630/utf8/ws_api/WebSMS.asmx
private cn.woxp.gateway.WebSMS wsms = new cn.woxp.gateway.WebSMS();
private string strIdentity = "";
/// <summary>
/// 如果TargetNo为空或者MsgContent为空或者boGetAcount=true
/// </summary>
/// <param name="TargetNo">发送对方的手机号码,多个用','分开。每次最多提交100条.是否支持移动还是联通或者小灵通请参考通道说明</param>
/// <param name="MsgContent">发送短信内容,长度要求请参考通道说明</param>
/// <param name="boGetAcount">是否获取短信剩余条件</param>
/// <returns>st|msg;st>0=成功</returns>
public string sendMsg(string TargetNo, string MsgContent, bool boGetAcount)
{
string result = "";
try
{
int Eid = Int32.Parse(x_eid);
string uid = x_uid;// this.t_uid.Text.ToString().Trim();
string pwd = x_pwd;// this.t_pwd.Text.ToString().Trim();
int gateId = Int32.Parse(x_gate_id);
#region 获取网关身份识别字符串, 供网关功能调用前的验证
//公共参数说明
//string eid_pwd_gateId
//详细说明
//用户身份标识串, 由【企业ID号-会员账号-密码MD5-通道ID】组成。中间用"-"分隔开.
// 例如10002-admin-87373df3f89fa9932a9c6c58cc75e309-100(通道是可选值,不提供该值,系统使用默认通道),MD5不区分大小写
// 该值可通过GetIdentityMark函数获取.
// 获取网关身份识别字符串, 供网关功能调用前的验证
//public string GetIdentityMark(int Eid, string uid, string pwd, int gateId)
//参数名称 参数说明
//Eid 企业ID代码, 个人用户为0
//uid 注册时的账号
//pwd 登陆密码.
//gateId 短信通道ID, 详细请参考通道说明
//返回值说明
//返回用户身份标识字符串
strIdentity = wsms.GetIdentityMark(Eid, uid, pwd, gateId);
if (strIdentity == null || strIdentity == "")
{
result = "-1|获取身份标识串失败";
return result;
}
#endregion
//获取剩余短信条数
if (TargetNo == "" || MsgContent == "")
{
string msg = wsms.GetBalanceCount(strIdentity).ToString("0.00");
if (msg.StartsWith("-"))
{
result = "-2|查询账户余额失败," + errormsg(msg);
return result;
}
else
{
result = "1|" + msg;
return result;
}
}
#region 快速发送短信,直接提交到网关
//快速发送短信,直接提交到网关。
//public SendResult FastSend(string eid_pwd_gateId, string No_List, string Memo, string SendTime, string strSubId)
//参数名称 参数说明
//TargetNo 发送对方的手机号码,多个用','分开。每次最多提交100条.是否支持移动还是联通或者小灵通请参考通道说明
//MsgContent 发送短信内容,长度要求请参考通道说明
//DateTime 定时发送时间,必须大于当前时间.空代表立即发送
//strSubId 如果通道支持子号码扩展,值为子号码.否则使用空值
//全速提交短信
cn.woxp.gateway.SendResult status = wsms.FastSend(strIdentity, TargetNo, MsgContent, "", "");
if (status.RetCode > 0)
{
//RetCode: 返回发送状态,大于0代表成功
//BlackWords: 被屏蔽的关键字
//FailNo:发送失败号的码列表,","分开
//ShieldNo:被屏蔽的号码列表,","分开
//ErrorDesc:错误的描述
//this.l_money.Text = wsms.GetMoney(strIdentity).ToString("0.00");
//js = "发送成功!共发送:" + status.RetCode.ToString() + "条";
//MessageBox.Show(js, "发送短信状态", MessageBoxButtons.OK, MessageBoxIcon.Information);
result = "2|发送成功,共发送:" + status.RetCode.ToString() + "条";
if (boGetAcount)
{
string _Amount = wsms.GetMoney(strIdentity).ToString("0.00"); ;
result += "|" + _Amount;
}
}
else
{
result = "-3|发送失败";
}
if (status.FailNo.Trim() != "" || status.ShieldNo.Trim() != "" || status.ErrorDesc.Trim() != "")
{
result += "{";
if (status.FailNo.Trim() != "")
{
result += "发送失败的号码列表:" + status.FailNo.Trim() + "|";
}
if (status.ShieldNo.Trim() != "")
{
result += "被屏蔽的号码列表:" + status.ShieldNo.Trim() + "|";
}
if (status.ErrorDesc.Trim() != "")
{
result += "发送失败的号码列表:" + status.ErrorDesc.Trim() + "|";
}
result = result.Substring(0, result.Length - 1);
result += "}";
}
#endregion
}
catch (Exception ex)
{
result = "-4|出错:"+ex.Message;
}
return result;
}
#endregion
#region HTTP网关接口
//网关地址: GB2312网关 http://gateway.woxp.cn:6630/gb2312/web_api/
// UTF-8网关 http://gateway.woxp.cn:6630/utf8/web_api/
//发送短信,<=0返回失败.大于0成功条数,个人的。企业ID为0
//http://gateway.woxp.cn:6630/gb2312/web_api/?x_eid=企业ID&x_uid=账号&x_pwd_md5=登陆密码MD5值&x_ac=10&x_gate_id=300&x_target_no=手机号码&x_memo=短信内容
/// <summary>
///
/// </summary>
/// <param name="TargetNo">接受者号码</param>
/// <param name="MsgContent"> 短信发送内容.长度请参考通道说明(必须使用URL编码)</param>
/// <param name="SendTime">定时短信, 格式YYYY-MM-DD HH:MM:SS,24小时制.值为空或无该参数代表立即发送 否</param>
/// <returns>大于0成功,小于0失败(可通过errormsg返回失败原因)<</returns>
public string sendMsg_http(string TargetNo, string MsgContent, string SendTime)
{
//System.Web.HttpUtility引用,右击项目-->添加引用,请切换到浏览标签,在 C:\Windows\Microsoft.NET\Framework\v2.0.50727 目录下找到,其中 v2.0.50727 是你实际使用的 .NET 版本。(一定要是这个,4.0目录下的无效)
string _MsgContent = "";
if (apicode.ToLower().Trim() == "gb2312")
{
//按照GB2312进行编码
_MsgContent = System.Web.HttpUtility.UrlEncode(MsgContent, System.Text.Encoding.GetEncoding("GB2312"));
}
else
{
//按照UTF-8进行编码
_MsgContent=System.Web.HttpUtility.UrlEncode(MsgContent);
}
var url = apiurl;// "http://gateway.woxp.cn:6630/utf8/web_api/";
var postdata = "?x_eid=" + x_eid + "&x_uid=" + x_uid;
postdata += "&x_pwd_md5=" + x_pwd_md5 + "&x_ac=10&x_gate_id=" + x_gate_id + "&x_target_no=" + TargetNo + "&x_memo=" + _MsgContent + "";
postdata += "&x_send_time=";
string msg = GetHtmlFromUrl(url + postdata);
return msg;
}
// x_eid 会员企业ID号, 个人用户为0 是
//2 x_uid 会员账号 是
//3 x_pwd_md5 登陆密码的MD5值 是
//4 x_new_pwd 修改密码时需要此参数。代表要变更的新密码 否
//5 x_sub_id 扩展子号码, 发送短信时需要, 根据通道是否支持子号码扩展而提供 否
//6 x_target_no 接受者号码,多个号码用“,”分开 否
//7 x_memo 短信发送内容.长度请参考通道说明(必须使用URL编码) 否
//8 x_send_time 定时短信, 格式YYYY-MM-DD HH:MM:SS,24小时制.值为空或无该参数代表立即发送 否
//9 x_gate_id 发送短信时通道ID,通道发送失败可以切换其它通道,无该值系统使用默认通道 否
//10 x_ac 本此提交的行为。比如是发送短信。查询余额, 参数值如下
//提示:HTTP调用URL接口时, 参数值必须URL编码后再调用
//--x_eid企业代码,个人账号值为0
//--x_gate_id值为300.代表组合通道
//--x_target_no可以多个号码最多100个每次。之间用[,] 分开。例如:15910011001,1591061000,15912341234
//--x_memo短信内容70字
//--查询余额
//http://gateway.woxp.cn:6630/gb2312/web_api/?x_eid=企业ID&x_uid=账号&x_pwd_md5=登陆密码MD5值&x_ac=30&x_gate_id=300
/// <summary>
/// 查询余额
/// </summary>
/// <returns>-1=查询账户余额失败; (>=0)=返回当前余额 </returns>
public string GetBalanceCount()
{
//gb2312
string result = "";//http://gateway.woxp.cn:6630/utf8/web_api/
var url =apiurl+ "?x_eid=" + x_eid + "&x_uid=" + x_uid + "&x_pwd_md5=" + x_pwd_md5 + "&x_ac=30";
string msg = GetHtmlFromUrl(url);
if (msg == null) { msg = "-1"; }
result = msg;
return result;
}
public string GetHtmlFromUrl(string url)
{
string strRet = null;
if (url == null || url.Trim().ToString() == "")
{
return strRet;
}
string targeturl = url.Trim().ToString();
try
{
HttpWebRequest hr = (HttpWebRequest)WebRequest.Create(targeturl);
hr.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)";
hr.Method = "GET";
hr.Timeout = 30 * 60 * 1000;
WebResponse hs = hr.GetResponse();
Stream sr = hs.GetResponseStream();
System.IO.StreamReader ser = new StreamReader(sr, Encoding.Default);
strRet = ser.ReadToEnd();
}
catch (Exception ex)
{
strRet = null;
}
return strRet;
}
#region 发送短信返回值
/// <summary>
/// 参数x_ac=10发送短信时。返回值
/// </summary>
/// <param name="ErrorId"></param>
/// <returns></returns>
public string errormsg(string ErrorId)
{
if (ErrorId == null)
{
ErrorId = "-199";
}
if (!ErrorId.StartsWith("-"))
{
return "发送成功!共发送:" + ErrorId + "条";
}
//编号 值 说明
//1 大于0 发送成功, 此次发送成功条数
//-100到-199 运营商返回失败代码
string errmsg = "";
switch (ErrorId)
{
#region
case "-1":
errmsg = "参数无效";
break;
case "-2":
errmsg = "通道不存在或者当前业务不支持此通道";
break;
case "-3":
errmsg = "定时格式错误";
break;
case "-4":
errmsg = "接收号码无效";
break;
case "-5":
errmsg = "提交号码个数超过上限,每个通道都有批量提交的上限.详细值请参考通道说明";
break;
case "-6":
errmsg = "发送短信内容长度不符合要求,参考通道要求长度";
break;
case "-7":
errmsg = "当前账户余额不足";
break;
case "-8":
errmsg = "网关发送短信时出现异常";
break;
case "-9":
errmsg = "用户或者密码没输入";
break;
case "-10":
errmsg = "企业ID或者会员账号不存在";
break;
case "-11":
errmsg = "密码错误";
break;
case "-12":
errmsg = "账户锁定";
break;
case "-13":
errmsg = "网关状态关闭";
break;
case "-14":
errmsg = "验证用户时执行异常";
break;
case "-15":
errmsg = "网关初始化失败";
break;
case "-16":
errmsg = "当前IP已被系统屏蔽,可能是与您设置的接入IP不同或者是失败次数太多";
break;
case "-17":
errmsg = "发送异常";
break;
case "-18":
errmsg = "账号未审核";
break;
case "-19":
errmsg = "当前时间不允许此通道工作,主要对群发通道限制";
break;
case "-20":
errmsg = "传输密钥未设置,请登陆平台设置";
break;
case "-21":
errmsg = "提取密钥异常";
break;
case "-22":
errmsg = "签名验证失败";
break;
case "-23":
errmsg = "发现屏蔽关键字";
break;
default:
errmsg = "运营商返回失败代码";
break;
#endregion
}
return errmsg;
}
#endregion
#endregion
}
}