在中国使用 SMS Framework 发送短信
Blog短信平台这东西相信大家都不陌生,但作为Drupal插件,还是蛮新鲜的。这款插件叫“SMS Framework”,地址是 http://drupal.org/project/smsframework 。它发布了1.0。
SMS Framework 的核心部分是一个很基本的框架,它定义了一系列函数或说接口,可以让其他开发者方便地创建前台界面或是后台短信接口(Gateway),同时也提供了一些利用这个框架创建的实用插件。比如 sms_user 可以让每个用户关联一个号码,sms_clickatell 是一个 Gateway,等等(具体参考文末附录)。这些插件还并不完善,所以到目前为止,SMS Framework 还只是一个开发工具。而本文想说的就是利用它开发可以在中国发送短信的Drupal插件。
首先要介绍的是如何在网络上向手机发送短信。简单说,这是通过网站的服务器,根据特定的协议,向短信提供商(中国移动等或二级经销商)发送网络请求来实现的。而协议由提供商决定,它可能是特别定制的(比如中国移动),也可能是REST(常见为HTTP GET),也可能是SOAP等等。这也就产生了一个选择提供商的问题。一般来讲,顶级提供商更适合比较有实力的公司选用,因为它们不仅申请门槛较高,而且由于协议是特制的,开发成本也比较高;而相对的,二级经销商较适合快速申请,快速开发,但功能和灵活性上就会有不同程度的限制了。
接下来我们看 SMS Framework 本身。这里我使用的是九月初的HEAD版本。(要注意的是,由于这个模组还处在开发初期,API和函数等变化很频繁,也很大,所以应该以模组本身为准。)它定义了一系列Hook及函数,其中最基本的是:
- hook_gateway_info() —— 用来添加短信接口,即实现某一个短信协议。简单说就是定义一个新的函数,参数是接受号码和短信内容等等,功能是通过协议将这些内容打包发送出去。
- sms_send() —— 用来发送短信,参数也是接受号码和短信内容等等。这是留给前台使用的,它会调用一个指定的Gateway来发送短信。
我们这里要实现的是Gateway,至于使用方面,可以写一个简单的页面,调用sms_send()来测试。开工之前请参考“API.txt”以及sms_clickatell等实现了Gateway的插件。
以 WINIC( http://www.winic.org/ )的 Webservice(Soap)为例,要写的内容有:
- Module —— 名字就叫sms_winic,要写info文件;
- sms_winic_gateway_info() —— 定义Gateway的各种信息和函数;
return array( 'winic' => array( 'name' => 'WINIC', 'configure form' => 'sms_winic_admin_form', // 指定一个函数名,需要自己实现 'send' => 'sms_winic_send', // 同上 'send form' => 'sms_winic_send_form', // 同上 ), ); - sms_winic_send($number, $message, $options) —— 发送函数本身;
首先使用 “$soapclient = new SoapClient($winic_url);” 生成Client(需要PHP的Soap支持);
然后可以使用 “__getFunctions()”、“__getTypes()”等方法获取Soap服务端提供的方法,这些可以在测试时使用。
针对WINIC提供的方法,调用一条 “$response = $soapclient->SendMessages($parameters);” 即可发送信息。而$parameters需要包含的信息如下:array 'tos' => string '号码,号码' 'msg' => string '短信内容' 'otime' => string '' 'uid' => string 'test' 'pwd' => string '123456'一般情况,Soap服务端会返回一个Object,包含一个状态信息,根据WINIC提供的文档分析这个信息,反馈给用户或是进行下一步操作,这个函数的任务就完成了。 - configure form —— 一个标准的form函数,可以放用户名密码等需要配置的内容;
- send form —— 也是一个标准的form函数,可以用来为发送表格添加额外的表单项。
至此,一个简单的Gateway就实现了。要使用或测试它,先在配置页面将它设置为Default,然后在你喜欢的位置调用sms_send()。
可以看到,SMS Framework 使得实现一个短信协议变得非常直观,这与Drupal本身的理念很接近,而一个Gateway本身的复杂程度大部分取决于短信协议的复杂程度。
正文完。
注:我已经提交了sms_winic: http://drupal.org/node/310154
附录 —— 现有插件及功能说明
- sms.module —— 核心API
- sms_clickatell.module —— Clickatell gateway (http://clickatell.com/) 短信接口
- sms_muse.module —— Muse gateway (http://mobilemuse.ca/) 短信接口
- sms_email_gateway.module —— 通过 Email 发送短信
- sms_user.module —— 用来和Drupal用户集成,允许每个用户设置一个手机号码
- sms_sendtophone.module —— 提供一些发送短信的功能界面
- sms_blast.module —— 发群体短信
- sms_receive.module —— 提供接收短信的支持(尚未完善)
- sms_og.module —— 为 Organic Groups 提供接收短信的支持(依赖于sms_receive)
- 除了这些内置的模组以外,另外一个模组 —— Messaging module (http://drupal.org/project/messaging),也提供了对它的支持,也就是说 messaging 可以利用 sms 发送信息。













