C#调用短信接口(通过简单的工厂模式整合多个短信平台)
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Web; namespace DUANXIN
{
public class SendSmsFactory
{
public static SendSmsBase CreateFactory(string className)
{
SendSmsBase sendsms = null;
switch(className)
{
case "WJSendSms":
sendsms = new WJSendSms();
break;
case "DXTSMSsend":
sendsms = new DXTSMSsend();
break;
default:
sendsms = null;
break; }
return sendsms;
}
}
public class SendSmsBase
{
public string Name{get;set;} //用户名
public string Key {get;set;} //接口秘钥
public virtual string SendSmsInfo(string smsMob, string smsText)
{
return string.Empty;
} }
public class WJSendSms : SendSmsBase
{
//平台地址 http://www.smschinese.cn/ public WJSendSms()
{
Name = "m386161511"; //用户名
Key = "ce10b1813233ad17a162"; //接口秘钥
}
public override string SendSmsInfo(string smsMob, string smsText)
{
string url = "http://utf8.sms.webchinese.cn/?Uid=" + Name + "&key=" + Key + "&smsMob=" + smsMob + "&smsText=" + smsText;
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 = * * ;
WebResponse hs = hr.GetResponse();
Stream sr = hs.GetResponseStream();
StreamReader ser = new StreamReader(sr, Encoding.Default);
strRet = ser.ReadToEnd();
}
catch (Exception ex)
{
strRet = null;
}
return GetResult(strRet);
}
/// <summary>确认返回信息 </summary>
public string GetResult(string strRet)
{
int result = ;
try
{
result = int.Parse(strRet);
switch (result)
{
case -:
strRet = "没有该用户账户";
break;
case -:
strRet = "接口密钥不正确,不是账户登陆密码";
break;
case -:
strRet = "MD5接口密钥加密不正确";
break;
case -:
strRet = "账户余额不足";
break;
case -:
strRet = "该用户被禁用";
break;
case -:
strRet = "短信内容出现非法字符";
break;
case -:
strRet = "手机号格式不正确";
break;
case -:
strRet = "手机号码为空";
break;
case -:
strRet = "短信内容为空";
break;
case -:
strRet = "短信签名格式不正确,接口签名格式为:【签名内容】";
break;
case -:
strRet = "IP限制";
break;
default:
strRet = "发送短信数量:" + result;
break;
}
}
catch (Exception ex)
{
strRet = ex.Message;
}
return strRet;
}
}
public class DXTSMSsend : SendSmsBase
{
//平台地址 http://www.106jiekou.com/ public DXTSMSsend()
{
Name = "m386161511";
Key = "m386161511";
}
public override string SendSmsInfo(string mobile, string content)
{
string PostUrl = "http://sms.106jiekou.com/utf8/sms.aspx";
string returncode = string.Empty;
string postStrTpl = "account={0}&password={1}&mobile={2}&content={3}";
UTF8Encoding encoding = new UTF8Encoding();
byte[] postData = encoding.GetBytes(string.Format(postStrTpl, Name, Key, mobile, content));
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(PostUrl);
myRequest.Method = "POST";
myRequest.ContentType = "application/x-www-form-urlencoded;charset=UTF-8";
myRequest.ContentLength = postData.Length;
Stream newStream = myRequest.GetRequestStream();
newStream.Write(postData, , postData.Length);
newStream.Flush();
newStream.Close();
HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
if (myResponse.StatusCode == HttpStatusCode.OK)
{
StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
returncode = reader.ReadToEnd(); }
else
{
returncode = "";
}
return GetResult(returncode);
}
public string GetResult(string returncode)
{
string returntext = string.Empty;
switch (Convert.ToInt32(returncode))
{
case :
returntext = "发送成功";
break;
case :
returntext = "验证失败";
break;
case :
returntext = "手机号码格式不正确";
break;
case :
returntext = "会员级别不够";
break;
case :
returntext = "内容未审核";
break;
case :
returntext = "内容过多";
break;
case :
returntext = "账户余额不足";
break;
case :
returntext = "Ip受限";
break;
case :
returntext = "手机号码发送太频繁,请换号或隔天再发";
break;
case :
returntext = "帐号被锁定";
break;
case :
returntext = "手机号发送频率持续过高,黑名单屏蔽数日";
break;
case :
returntext = "系统升级";
break;
default:
returntext = "访问失败";
break;
}
return returntext; }
}
}
简单使用演示(记得引入using DUANXIN)
SendSmsBase SmsClass = new SendSmsBase();
SmsClass = SendSmsFactory.CreateFactory("DXTSMSsend");
string content = "您的手机号:" + model.Phone + ",注册验证码:" + code + ",一天内提交有效,如不是本人操作请忽略!";
returncode=SmsClass.SendSmsInfo(model.Phone, content);
if (returncode == "账户余额不足")
{ SmsClass = SendSmsFactory.CreateFactory("WJSendSms");
SmsClass.SendSmsInfo(model.Phone, content);
}
注意有些短信平台有模板限制,
也可自己继续添加短信接口以实现暂时的免费发送。
C#调用短信接口(通过简单的工厂模式整合多个短信平台)的更多相关文章
- Java EE设计模式(主要简单介绍工厂模式,适配器模式和模板方法模式)
Java EE设计模式分为三种类型,共23种: 创建型模式:单例模式.抽象工厂模式.建造者模式.工厂模式.原型模式. 结构型模式:适配器模式.桥接模式.装饰模式.组合模式.外观模式.享元模式.代理模式 ...
- 从接口、抽象类到工厂模式再到JVM来总结一些问题
俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习! 涉及到的知识点总结如下: 为什么使用接口? 接口和抽象类的区别 简单工厂模式总结 Java中new和newInstance的区别 J ...
- js简单的工厂模式
<!DOCTYPE html> <html> <head> <title></title> </head> <body&g ...
- JS创建对象的四种简单方式 (工厂模式和自定义构造函数创建对象的区别)
// 对象:特指的某个事物,具有属性和方法(一组无序的属性的集合) // 特征------>属性 // 行为------>方法 // 创建对象的四种方式 1 // 1.字面量的方式,就是实 ...
- java简单的工厂模式
定义:专门定义一个类来创建其他类的实例,被创建的实例通常都具有共同的父类和接口.意图:提供一个类由它负责根据一定的条件创建某一及具体类的实例 //简单工厂,存在不符合开闭原则的地方,可以在参考抽象工厂 ...
- JS模式:又一个简单的工厂模式
<!DOCTYPE html> <html> <head> <title></title> </head> <body&g ...
- c++ 设计模式之简单的工厂模式
调试环境:vs2010 // test0.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> ...
- python调用腾讯云短信接口
目录 python调用腾讯云短信接口 账号注册 python中封装腾讯云短信接口 python调用腾讯云短信接口 账号注册 去腾讯云官网注册一个腾讯云账号,通过实名认证 然后开通短信服务,创建短信应用 ...
- 0009 注册登录(第二步:获取短信接口access token)
1 在GeneralTools目录下创建一个常量文件Constants.py 获取短信验证之前需要申请腾讯云短信服务. """ 腾讯云短信相关常量 "" ...
随机推荐
- cocos2dx lua 学习笔记(一)
macosx 安装 lua curl -R -O http://www.lua.org/ftp/lua-5.1.4.tar.gz tar zxf lua-5.1.4.tar.gz cd lua-5.1 ...
- Duanxx的STM32学习:STM32下载方式选择
前几天熟悉了STM32的启动方式.主要由Boot0和Boot1设置 如今须要解决的就是STM32的下载的问题. 一開始的时候,我选择的是SWD下载.这样的下载方式须要Boot0=0.Boot1=0.占 ...
- Linux下命令行显示当前全路径方法
/etc/profile 和 ~/.bashrc 或者直接在用户的.bash_profile中添加 export PS1='[\u@\h \W]\$' 然后执行source命令
- windows下使用vnc viewer远程连接Linux桌面(转)
在windows下使用vnc viewer远程连接Linux桌面,主要配置步骤: Linux: 1.rpm -qa vnc //查看是否安装vnc服务,如果没有安装,可以使用yum,或者rpm进行安装 ...
- Spring随笔 - 事务隔离级别
Spring提供5中事务隔离级别: ISOLATION_DEFAULT:使用数据库后端的默认隔离级别. ISOLATION_READ_UNCOMMITTED:允许读取尚未提交的数据变更.可能会导致脏读 ...
- 在Google map图上做标记,并把标记相连接
<!DOCTYPE html> <html> <head> <title>GeoLocation</title> <meta name ...
- Android各层推荐开发书籍及参考资料
Android各层推荐开发书籍及参考资料 转自:http://blog.csdn.net/fancylovejava/article/details/8657058 Android系统按照架构来说一共 ...
- JAVA的IO运用
IO OF JAVA想写好一篇关于JAVA的IO的文章不容易,因为它涉及的东西很多难以写得有深度和有思路.我虽不才但也写.这篇文章有我个人不少的见解,虽然涉足计算机不深但我不想用一大堆这个可能那个可能 ...
- linux GUI程序开发
1,C++ OOP中 class与C 面向过程开发中struct非常相似
- 搭建本地Ubuntu 镜像服务器
一.需求分析 最近公司软件Team 有个需求是这样的:能不能在局域网搭建一个Ubuntu 镜像服务器, 这样作的好处是可以节省Ubuntu某些常用工具的安装时间. 二.部署过程 2.1 测试环境 目前 ...