-
fortumo开放增值短信平台技术说明
开放增值短信平台是fortumo服务里最具弹性的服务类别,您能自行开发几乎任何您能想象到的应用方式,不过使用本服务必须具备编程技巧,且您会需要一个能存放您程序(如PHP编码等)的网络服务器。
当您创建的服务收到一则信息时,fortumo会发出一道HTTP GET的指令到您在创建服务时所设定存放程序的地址(如,http://yourdomain.com/sms.php),而fortumo从您存放程序处所得到的内容(实际上fortumo只截取前120个字符或50个中文字),随后会被发送回给用户成为回复信息。在fortumo送出的HTTP GET指令会包含传送者的电话号码及短信内容等,您只需将这些信息加以处理转换为您的回复信息。详细参数定义,请参考下表。



-
设置说明
message- 信息内容不包括关键词。如短信息为X TXT KEY 123,那么此条短信参数即为123。如果信息中只有关键词而并无其他内容,那么参数即为零。
sender- 短信发送者的电话号码均为无加号的国际通用模式。例如,8610123456789
country- 国家代码均为发送者移动运营商所在国家代码。根据ISO3166-1标准使用双字符代码(如,CN-中国,SE-瑞典,NO-挪威,EE-爱沙尼亚等),但此国家未必为发送者实际所在地。如,持有瑞典手机的短信发送者可于地处挪威时发送短信,但在“国家”一栏中代码仍显示为SE.
price- 即为最终使用者以当地货币支付的短信资费(包含增值税)。
currency- 根据ISO4217标准,采用当代货币标识(如RMB, EUR等)。
service_id- 即为识别Fortumo服务平台的串码。如,f7fa12b381d290e268f99e382578d64a。如果您在同一网络地址中使用多个服务平台,那么您可使用此串码确认短信息所对应的平台。
message_id- 即为短信服务平台所收到的每条短信所对应的串码。
keyword- 即为短信内容中的关键词部分。如果短信内容为X TXT KEY 123,那么此参数即为X TXT KEY.
shortcode- 即为短信发送地址的号码。
operator- Name of the sender's mobile network operator.
billing_type- 可以是MO-或MT-Billing。点击此处Fortumo FAQ阅读更多关于Billing类型的资讯。
status- Billing status, which is either
pending(in message delivery request),okorfailed(in billing report). test- This parameter is present only when message is sent through Fortumo testing interface by yourself and it's value is always 'true'.
sig- 即为您需核实的请求签名,以确保此请求来自Fortumo。具体环节参见下文Security部分。
通常用户只需
message和sender设置,但我们也为高级使用项目增添了设置说明。


-
Security
确保服务脚本命令由Fortumo而非其他机构发出尤为重要。目前大部分服务提供商较为满意的几种安全措施如下::
-
核实发出请求的服务器IP地址是否属于Fortumo服务器之一。我们目前使用的IP地址为81.20.151.38, 81.20.148.122 和209.20.83.207。如有变更,我们会发送电子邮件告知。在PHP中,您可使用$_SERVER["REMOTE_ADDR"]变量进行核实。 -
不要选用过于明显的名字作为名录或脚本名称。如http://yourdomain.com/go850g3oigjrtog/sms.php要好于http://yourdomain.com/sms.php。 -
核查随函签名是否匹配。所有获取请求都签有只有您和Fortumo了解的机密信息。您可从服务设置页面了解此信息。此签名作为“签名设置”添加,并可通过计算md5总核请求设置和机密信息。您可以进行同样的计算来核实请求中的“签名设置”是否与您的计算结果相匹配。详细计算过程请参见下文PHP范例。
-


-
Sample sms.php
<?php //set true if you want to use script for billing reports //first you need to enable them in your account $billing_reports_enabled = false; // check that the request comes from Fortumo server if(!in_array($_SERVER['REMOTE_ADDR'], array('81.20.151.38', '81.20.148.122', '209.20.83.207'))) { die("Error: Unknown IP"); } // check the signature $secret = ''; // insert your secret between '' if(!empty($secret) && !check_signature($_GET, $secret)) { die("Error: Invalid signature"); } $sender = $_GET['sender']; $message = $_GET['message']; // do something with $sender and $message $reply = "Thank you $sender for sending $message"; // print out the reply echo($reply); //customize this according to your needs if($billing_reports_enabled && preg_match("/Failed/i", $_GET['status']) && preg_match("/MT/i", $_GET['billing_type'])) { // find message by $_GET['message_id'] and suspend it } function check_signature($params_array, $secret) { ksort($params_array); $str = ''; foreach ($params_array as $k=>$v) { if($k != 'sig') { $str .= "$k=$v"; } } $str .= $secret; $signature = md5($str); return ($params_array['sig'] == $signature); } ?>
复制到剪贴板





