动态调用dll
/// <summary>
/// 短信发送接口实现工厂
/// </summary>
public static class EosSMSProviderFactory
{
public static bool InitProvider()
{
IEosSMSProvider provider = GetProvider();
return provider != null;
}
/// <summary>
/// 获得当前配置的发送短信接口
/// </summary>
/// <returns></returns>
public static IEosSMSProvider GetProvider()
{
string smsProviderClass = ConfigurationManager.AppSettings["sms.provider"];
if (string.IsNullOrEmpty(smsProviderClass))
return null;
return (IEosSMSProvider)Activator.CreateInstance(getType(smsProviderClass));
}
public static Type getType(string smsProviderClass)
{
Type providerType = Type.GetType(smsProviderClass);
if (providerType != null)
{
return providerType;
}
string dllname = smsProviderClass.Substring(smsProviderClass.IndexOf(",")+1).Trim().ToLower();
if (!dllname.EndsWith(".dll")){
dllname = dllname + ".dll";
}
string dllfile = AppDomain.CurrentDomain.BaseDirectory + "bin\\Plugin\\"+dllname;
Assembly assembly = Assembly.LoadFrom(dllfile);
string classname = smsProviderClass.Substring(0, smsProviderClass.IndexOf(","));
return assembly.GetType(classname);
}
}
短信发送接口
/// <summary>
/// Eos短信发送接口
/// 实现这个接口后可被Eos系统调用
/// </summary>
public interface IEosSMSProvider
{
/// <summary>
/// 发送手机短信
/// 如果不设置固定发送时间,则参数sendTime设为空
/// </summary>
/// <param name="receivers">接收人号码列表</param>
/// <param name="content">短信内容</param>
/// <param name="sendTime">固定发送时间</param>
/// <returns>返回信息</returns>
string SendMessage(string[] receivers, string content, string sendTime);
/// <summary>
/// 接受上行回复
/// </summary>
/// <returns></returns>
string GetReceivedMsg();
}
实现接口类 完成短信发送
class aliyunSMSProvider : IEosSMSProvider
{
private string AppKey = "23537294";
private string AppSecret = "2bc5652127261532fb3f77fa51139fe8";
private string SignName = "短信测试";
private string TemplateCode = "SMS_2*****";
private const String Host = "http://sms.market.alicloudapi.com";
private const String path = "/singleSendSms";
private string RegionId = "cn-hangzhou";
public aliyunSMSProvider()
{
Init();
}
private void Init()
{
AppKey = ConfigurationManager.AppSettings["aliyun.appKey"];
AppSecret = ConfigurationManager.AppSettings["aliyun.appSecret"];
SignName = ConfigurationManager.AppSettings["aliyun.SignName"];
TemplateCode = ConfigurationManager.AppSettings["aliyun.TemplateCode"];
}
public string SendMessage(string[] receivers, string content, string sendTime)
{
DateTime dtSendTime;
bool withSendTime = DateTime.TryParse(sendTime, out dtSendTime);
string receiverText = "";
string sendTimeText = "";
if (withSendTime)
{
sendTimeText = dtSendTime.ToString("yyyy-MM-dd hh:mm:ss");
}
foreach (string phonenumber in receivers)
{
if (receiverText == "")
{
receiverText = phonenumber;
}
else
{
receiverText += ";" + phonenumber;
}
}
IClientProfile profile = DefaultProfile.GetProfile(RegionId, AppKey, AppSecret);
IAcsClient client = new DefaultAcsClient(profile);
SingleSendSmsRequest request = new SingleSendSmsRequest();
//String json = "{{\"name\":\"{0}\"}}";
//json = string.Format(ParamString, content);
request.SignName = SignName;
request.TemplateCode = TemplateCode;
request.RecNum = receiverText;
request.ParamString = content;
SingleSendSmsResponse httpResponse = client.GetAcsResponse(request);
return httpResponse.HttpResponse.isSuccess().ToString();
}
public string GetReceivedMsg()
{
return "";
}
}