Nop -关于Nopcommerce中的短消息模块<八>
2012-03-06 11:10
288 查看
Nop-关于Nopcommerce中的短消息模块<八>
分类:14:4517人阅读
[csharp]view
plaincopy
关于短消息:
先研究Nopcommerce自带的短消息配置/短信管理,首先,这个是插件模式的使用:关于短消息:
项目结构很典型,MVC,带有View,就是有配置界面的,然后RouteProvider.cs:
[csharp]viewplain copyroutes.MapRoute("Plugin.SMS.Clickatell.Configure", "Plugins/SMSClickatell/Configure", new{controller="SmsClickatell",action="Configure"}, new[]{"Nop.Plugin.SMS.Clickatell.Controllers"}
再有就是插件暴露什么信息:
Group:SMSprovidersFriendlyName:ClickatellSMSProviderSystemName:Mobile.SMS.ClickatellVersion:1.00SupportedVersions:2.30Author:nopCommerceteamDisplayOrder:1FileName:Nop.Plugin.SMS.Clickatell.dll
SMScontroller通过Plugin过滤SMSplugin然后通过GridView
http://localhost:3861/Admin/SMS/Providers
[csharp]viewplain copypublicActionResultProviders(){if(!_permissionService.Authorize(StandardPermissionProvider.ManageSmsProviders))returnAccessDeniedView();varsmsProvidersModel=newList<SmsProviderModel>();varsmsProviders=_smsService.LoadAllSmsProviders();foreach(varsmsProviderinsmsProviders){vartmp1=smsProvider.ToModel();tmp1.IsActive=smsProvider.IsSmsProviderActive(_smsSettings);smsProvidersModel.Add(tmp1);}vargridModel=newGridModel<SmsProviderModel>{Data=smsProvidersModel,Total=smsProvidersModel.Count()};returnView(gridModel);}
[csharp]viewplain copy
[csharp]viewplain copy//.ClientTemplate("<ahref=\"ConfigureProvider?systemName=<#=SystemName#>\">"+T("Admin.Configuration.SMSProviders.Configure").Text+"</a>")
通过超链接,选择编辑,在URL看到的还是ConfigureProvider?systemName=Mobile.SMS.Clickatell
[csharp]viewplain copypublicActionResultConfigureProvider(stringsystemName)
{
if(!_permissionService.Authorize(StandardPermissionProvider.ManageSmsProviders))
returnAccessDeniedView();
varsmsProvider=_smsService.LoadSmsProviderBySystemName(systemName);
if(smsProvider==null)
thrownewArgumentException("NoSMSproviderfoundwiththespecifiedsystemname","systemName");
varmodel=smsProvider.ToModel();
stringactionName,controllerName;
RouteValueDictionaryrouteValues;
smsProvider.GetConfigurationRoute(outactionName,outcontrollerName,outrouteValues);
model.ConfigurationActionName=actionName;
model.ConfigurationControllerName=controllerName;
model.ConfigurationRouteValues=routeValues;
returnView(model);
}
通过ConfigureProvider的View中加载了Plugin的View(可以参考文件Presentation\Nop.Web\Administration\Views\Sms\ConfigureProvider.cshtml):
@if(!String.IsNullOrEmpty(Model.ConfigurationActionName)){@Html.Action(Model.ConfigurationActionName,Model.ConfigurationControllerName,Model.ConfigurationRouteValues);}
如果需要增加自己的SMS组件,可参考同样的流程:
====
发送消息的流程在这插件中控制:
1.添加某个WebService引用,因为网站通过该Service来发送消息,最后结算也是通过消息数目结算的
2.在XXXProvider中完成SMSsend
[csharp]viewplain copypublicboolSendSms(stringtext)
{
try
{
using(varsvc=newPushServerWSPortTypeClient(newBasicHttpBinding(),newEndpointAddress("http://api.clickatell.com/soap/webservice_vs.php")))
{
stringauthRsp=svc.auth(Int32.Parse(_clickatellSettings.ApiId),_clickatellSettings.Username,_clickatellSettings.Password);
if(!authRsp.ToUpperInvariant().StartsWith("OK"))
{
thrownewNopException(authRsp);
}
//认证通过
stringssid=authRsp.Substring(4);//ssid作为参数一部分
string[]sndRsp=svc.sendmsg(ssid,
Int32.Parse(_clickatellSettings.ApiId),_clickatellSettings.Username,
_clickatellSettings.Password,newstring[1]{_clickatellSettings.PhoneNumber},//发送接收的电话号码,如果要群发要改写一个方法
String.Empty,text,0,0,0,0,0,0,0,0,0,
String.Empty,0,String.Empty,String.Empty,String.Empty,0);
if(!sndRsp[0].ToUpperInvariant().StartsWith("ID"))
{
thrownewNopException(sndRsp[0]);
}
returntrue;
}
}publicboolSendSmses(stringtext,string[]PhoneNumbers)
{
foreach(stringPhNoinPhoneNumbers)
{
SendSms(PhNo);
}
returntrue;
}
相关文章推荐
- Nop -关于Nopcommerce中的短消息模块<八>
- Nop- Automapper在Nopcommerce中的使用<五>
- Nop- Automapper在Nopcommerce中的使用<五>
- Nop-关于FluentValidation与验证<二>
- Nop-关于FluentValidation与验证<二>
- python基础学习笔记<函数式编程与模块>
- 关于Spring中找不到<mvc:resources/>标签的解决办法
- <转载> JavaSript模块规范 - AMD规范与CMD规范介绍
- asp.net中关于&lt;% %&gt;、&lt;%= %&gt;的用法——个人总结
- 关于标签<meta http-equiv="X-UA-Compatible" content="IE=edge" />
- <Web>关于盒模型的外边距问题
- <iOS>关于Xcode上的Other linker flags
- Android开源中国客户端学习 微博分享模块 <8>
- 关于‹和›转义成< 和>的问题
- HTML字符实体(关于&amp;nbsp;&amp;gt;&amp;lt;等)
- 关于 template <typename T>
- 【Qt编程】基于Qt的词典开发系列<八>--用户登录及API调用的实现
- 《Windows程序设计》读书笔记------------->>关于Unicode<<
- 关于HashTable和Dictionnary<>访问键和值的区别!!
- 关于web.xml中<web-app>报错解决方案