using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Threading; using System.Net; using System.IO; using System.Security.Cryptography; using System.Web.Script.Serialization; using System.Runtime.Serialization; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Newtonsoft.Json.Converters; namespace Grape.JG.BLL { public partial class Sendsms_Http_Form { public string access_token = ""; public Sendsms_Http_Form() { } public string Sendsms_Http_Form_Load(string phone,string nr) { //登录并发送 return LoginGo(phone, nr);//手机号,短信内容 } public static string LoginGo(string phone, string nr) { //Http地址 string ContentType = "application/x-www-form-urlencoded";//类型application/x-www-form-urlencoded //string Url = "http://112.33.1.13:80/app/http";//http地址 string Url = "http://mas.ecloud.10086.cn/app/http";//正式http地址 string Ecname = "xxx";//集团用户名 string Username = "xxx";//sdk帐号 string Password = "xxx";//sdk密码 string LoginType = "/authorize?"; //短信(普通) string mas_user_id = "24adfceb-7008-47b3-a133-8201f7cf52550"; string mobiles =phone ;//电话号码 string content = nr ;//"这是一条测试短信121313--"; string sign = "Y5l81CYQ0";//签名编码 string serial = "1065731010358"; string SentType = "/sendSms?"; string access_token = "NHh6LOX98qY81VS1dbF9FWU9jLlM9F4"; string LoginStatus=""; string T_StengStatus = ""; try { LoginStatus = PostHttp_Login(Url, LoginType, Ecname, Username, Password, ContentType);//登录验证 JObject json = JObject.Parse(LoginStatus); access_token = json["access_token"].Value<string>(); mas_user_id = json["mas_user_id"].Value<string>(); string MacString = mas_user_id + mobiles + content + sign + serial + access_token; string mac = GetMd5Hash(MacString); T_StengStatus = Http_SendSms(Url, SentType, mas_user_id, mobiles, content, sign, serial, mac, ContentType); } catch (Exception ex) { Console.WriteLine(ex.Message); } return T_StengStatus; } //登录验证 public static string PostHttp_Login(string url,string LoginType, string Ecname, string Username, string Password, string contentType) { url += LoginType; string responseContent = "准备登录"; string body = "ec_name=" + Ecname + "&user_name=" + Username + "&user_passwd=" + Password; responseContent = HttpPost(url, body, contentType); return responseContent; } //短信发送 private static string Http_SendSms(string url,string senttype, string mas_user_id, string mobiles, string content, string sign, string seria, string mac,string contentType) { url += senttype; string body = "mas_user_id=" + mas_user_id + "&mobiles=" + mobiles + "&content=" + content + "&sign=" + sign + "&serial=" + seria + "&mac=" + mac; // Console.WriteLine("【连接】:" + url + body); string SentStatus = "准备发送"; SentStatus = HttpPost(url, body, contentType); //SentStatus = WebPost(url, body, contentType); return SentStatus; } private static string Http_SendTSms(string url, string senttype, string mas_user_id,string tempId,string param ,string mobiles, string content, string sign, string seria, string mac, string contentType) { url += senttype; string body = "mas_user_id=" + mas_user_id + "&template_id=" + tempId+ "¶ms=" + param +"&mobiles=" + mobiles + "&content=" + content + "&sign=" + sign + "&serial=" + seria + "&mac=" + mac; //Console.WriteLine("【连接】:" + url + body); string SentStatus = "准备发送"; SentStatus = HttpPost(url, body, contentType); //SentStatus = WebPost(url, body, contentType); return SentStatus; } //MD5计算mac public static string GetMd5Hash(String input) { if (input == null) { return null; } MD5 md5Hash = MD5.Create(); // 将输入字符串转换为字节数组并计算哈希数据 byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(input)); // 创建一个 Stringbuilder 来收集字节并创建字符串 StringBuilder sBuilder = new StringBuilder(); // 循环遍历哈希数据的每一个字节并格式化为十六进制字符串 for (int i = 0; i < data.Length; i++) { sBuilder.Append(data[i].ToString("X2")); } // 返回十六进制字符串 return sBuilder.ToString(); } //HttpPost方法 //body是要传递的参数,格式"roleId=1&uid=2" //post的cotentType填写: //"application/x-www-form-urlencoded" //soap填写:"text/xml; charset=utf-8" //http登录post private static string HttpPost(string Url,string Body,string ContentType) { string ResponseContent = ""; HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(Url); httpWebRequest.ContentType = "application/x-www-form-urlencoded"; ; httpWebRequest.Method = "POST"; httpWebRequest.Timeout = 20000; //setInstanceFollowRedirects httpWebRequest.MediaType = "json"; byte[] btBodys = Encoding.UTF8.GetBytes(Body); httpWebRequest.ContentLength = btBodys.Length; httpWebRequest.GetRequestStream().Write(btBodys, 0, btBodys.Length); try { HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse(); StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream()); ResponseContent = streamReader.ReadToEnd(); httpWebResponse.Close(); streamReader.Close(); httpWebRequest.Abort(); httpWebResponse.Close(); } catch (Exception ex) { return ex.Message; } return ResponseContent; } //HttpPost方法 //body是要传递的参数,格式"roleId=1&uid=2" //post的cotentType填写: //"application/x-www-form-urlencoded" //soap填写:"text/xml; charset=utf-8" //http登录post private static string WebPost(string Url, string Body, string ContentType) { string ResponseContent = ""; HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(Url); httpWebRequest.ContentType = ContentType; httpWebRequest.Method = "POST"; httpWebRequest.Timeout = 20000; byte[] btBodys = Encoding.UTF8.GetBytes(Body); httpWebRequest.ContentLength = btBodys.Length; httpWebRequest.GetRequestStream().Write(btBodys, 0, btBodys.Length); StreamReader stream = null; try { using (WebResponse response = httpWebRequest.GetResponse()) { stream = new StreamReader(response.GetResponseStream()); } } catch (WebException e) { stream = new StreamReader(e.Response.GetResponseStream()); } ResponseContent = stream.ReadToEnd(); return ResponseContent; } } }
我发送短信,调用方法
public void(){
Sendsms_Http_Form_Load("15111111111","第一");
Sendsms_Http_Form_Load("150123456789","第二条");
}
连续发送多次后出错,显示超时。
现在怎样写个方法让他这两条之间延迟发送。
可以写个JS方法执行完才能再次点击按钮就好了
JS代码如下(obj传按钮objMessage传提示)
function Btn_Disable(obj,objMessage)
{
var varReturn=false;
if(objMessage != null)
{
if(confirm(objMessage))
{
varReturn = true;
obj.disabled = true;
__doPostBack(obj.id);
}
else
{
varReturn=false;
}
}
else
{
varReturn = true;
obj.disabled = true;
__doPostBack(obj.id);
}
return varReturn;
}
使用多线线程发送
不会用多线程
@aCHENa: 这个可以自行搜索相关资料
第一条发送了么?
有时第一条发送后会出错
@aCHENa: 显示超时是短信提供服务的问题?
@顾晓北: 是的。移动平台有限速设置,超过限制就出错
@aCHENa: 既然这样,那你就只有自己限制了,如果你是测试,你可以线程sleep一下。
写一个发送类封装一下发送方法,每次发送判断下与上次发送的时间间隔,如果不足你设置的最小时间间隔,sleep一下。
线程比较好处理,不会有卡顿的现象.