Nop -關於Nopcommerce中的短消息模塊

 

Nop -關於Nopcommerce中的短消息模塊<八>

分類: Nop Commerce 17人閱讀 評論(0) 收藏 舉報

[csharp] view plaincopy
  1. 關於短消息:   

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

項目結構很典型,MVC,帶有View,就是有配置界面的,然後RouteProvider.cs:

[csharp] view plaincopy
  1. routes.MapRoute("Plugin.SMS.Clickatell.Configure",  
  2.                 "Plugins/SMSClickatell/Configure",  
  3.                 new { controller = "SmsClickatell", action = "Configure" },  
  4.                 new[] { "Nop.Plugin.SMS.Clickatell.Controllers" }  
再有就是插件暴露什麼信息:
Group: SMS providers FriendlyName: Clickatell SMS Provider SystemName: Mobile.SMS.Clickatell Version: 1.00 SupportedVersions: 2.30 Author: nopCommerce team DisplayOrder: 1 FileName: Nop.Plugin.SMS.Clickatell.dll
 
SMScontroller 通過Plugin過濾SMS plugin然後通過Grid View
http://localhost:3861/Admin/SMS/Providers
[csharp] view plaincopy
  1. public ActionResult Providers()        {            if (!_permissionService.Authorize(StandardPermissionProvider.ManageSmsProviders))                return AccessDeniedView();             var smsProvidersModel = new List<SmsProviderModel>();            var smsProviders = _smsService.LoadAllSmsProviders();            foreach (var smsProvider in smsProviders)            {                var tmp1 = smsProvider.ToModel();                tmp1.IsActive = smsProvider.IsSmsProviderActive(_smsSettings);                smsProvidersModel.Add(tmp1);            }            var gridModel = new GridModel<SmsProviderModel>            {                Data = smsProvidersModel,                Total = smsProvidersModel.Count()            };            return View(gridModel);        }  
[csharp] view plaincopy
  1.    
[csharp] view plaincopy
  1. //  .ClientTemplate("<a href=\"ConfigureProvider?systemName=<#= SystemName #>\">" + T("Admin.Configuration.SMSProviders.Configure").Text + "</a>")  
通過超鏈接,選擇編輯,在URL看到的還是ConfigureProvider?systemName=Mobile.SMS.Clickatell
 
[csharp] view plaincopy
  1. public ActionResult ConfigureProvider(string systemName)  
  2.         {  
  3.             if (!_permissionService.Authorize(StandardPermissionProvider.ManageSmsProviders))  
  4.                 return AccessDeniedView();  
  5.    
  6.             var smsProvider = _smsService.LoadSmsProviderBySystemName(systemName);  
  7.             if (smsProvider == null)   
  8.                 throw new ArgumentException("No SMS provider found with the specified system name""systemName");  
  9.    
  10.             var model = smsProvider.ToModel();  
  11.             string actionName, controllerName;  
  12.             RouteValueDictionary routeValues;  
  13.             smsProvider.GetConfigurationRoute(out actionName, out controllerName, out routeValues);  
  14.             model.ConfigurationActionName = actionName;  
  15.             model.ConfigurationControllerName = controllerName;  
  16.             model.ConfigurationRouteValues = routeValues;  
  17.             return View(model);  
  18.         }  
通過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.添加某個Web Service引用,因爲網站通過該Service來發送消息,最後結算也是通過消息數目結算的

2.在XXXProvider中完成SMSsend

  
[csharp] view plaincopy
  1. public bool SendSms(string text)  
  2.         {  
  3.             try  
  4.             {  
  5.                 using (var svc = new PushServerWSPortTypeClient(new BasicHttpBinding(), new EndpointAddress("http://api.clickatell.com/soap/webservice_vs.php")))  
  6.                 {  
  7.                     string authRsp = svc.auth(Int32.Parse(_clickatellSettings.ApiId), _clickatellSettings.Username, _clickatellSettings.Password);  
  8.                      if (!authRsp.ToUpperInvariant().StartsWith("OK"))  
  9.                     {  
  10.                         throw new NopException(authRsp);  
  11.                     }  
  12.  //認證通過  
  13.                     string ssid = authRsp.Substring(4);//ssid作爲參數一部分  
  14.                     string[] sndRsp = svc.sendmsg(ssid,  
  15.                         Int32.Parse(_clickatellSettings.ApiId), _clickatellSettings.Username,  
  16.                         _clickatellSettings.Password, new string[1] { _clickatellSettings.PhoneNumber }, //發送接收的電話號碼,如果要羣發要改寫一個方法  
  17.                         String.Empty, text, 0, 0, 0, 0, 0, 0, 0, 0, 0,  
  18.                         String.Empty, 0, String.Empty, String.Empty, String.Empty, 0);   
  19.                     if (!sndRsp[0].ToUpperInvariant().StartsWith("ID"))  
  20.                     {  
  21.                         throw new NopException(sndRsp[0]);  
  22.                     }  
  23.                     return true;  
  24.                 }  
  25.             }  public bool SendSmses(string text, string[] PhoneNumbers)  
  26.         {  
  27.             foreach (string PhNo in PhoneNumbers)  
  28.             {  
  29.                 SendSms(PhNo);   
  30.             }  
  31.             return true;  
  32.         }  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章