makara
2008
18
09

在中国使用 SMS Framework 发送短信

Blog
created on 周四, 2008-09-18 02:02

短信平台这东西相信大家都不陌生,但作为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及函数,其中最基本的是:

  1. hook_gateway_info() —— 用来添加短信接口,即实现某一个短信协议。简单说就是定义一个新的函数,参数是接受号码和短信内容等等,功能是通过协议将这些内容打包发送出去。
  2. sms_send() —— 用来发送短信,参数也是接受号码和短信内容等等。这是留给前台使用的,它会调用一个指定的Gateway来发送短信。

我们这里要实现的是Gateway,至于使用方面,可以写一个简单的页面,调用sms_send()来测试。开工之前请参考“API.txt”以及sms_clickatell等实现了Gateway的插件。

以 WINIC( http://www.winic.org/ )的 Webservice(Soap)为例,要写的内容有:

  1. Module —— 名字就叫sms_winic,要写info文件;
  2. 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', // 同上 ), );
  3. 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提供的文档分析这个信息,反馈给用户或是进行下一步操作,这个函数的任务就完成了。
  4. configure form —— 一个标准的form函数,可以放用户名密码等需要配置的内容;
  5. 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 发送信息。

回复

此内容将保密,不会被其他人看见。
  • 行和段被自动切分。
  • Avast! This website be taken over by pirates on September 19th. Yarr!
  • Allowed HTML tags: <a> <p> <br> <i> <b> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Glossary terms will be automatically marked with links to their descriptions
  • 网页地址和电子邮件地址将会被自动转换为链接。

更多格式化选项信息