您的位置:首页 > 运维架构

Nop -关于Nopcommerce中的短消息模块<八>

2012-03-06 11:10 288 查看


Nop-关于Nopcommerce中的短消息模块<八>

分类:NopCommerce2012-02-24
14:4517人阅读评论(0)收藏举报



[csharp]view
plaincopy

关于短消息:

先研究Nopcommerce自带的短消息配置/短信管理,首先,这个是插件模式的使用:

项目结构很典型,MVC,带有View,就是有配置界面的,然后RouteProvider.cs:
[csharp]viewplaincopyroutes.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]viewplaincopypublicActionResultProviders(){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]viewplaincopy
[csharp]viewplaincopy//.ClientTemplate("<ahref=\"ConfigureProvider?systemName=<#=SystemName#>\">"+T("Admin.Configuration.SMSProviders.Configure").Text+"</a>")


通过超链接,选择编辑,在URL看到的还是ConfigureProvider?systemName=Mobile.SMS.Clickatell

[csharp]viewplaincopypublicActionResultConfigureProvider(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]viewplaincopypublicboolSendSms(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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: