-
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。閱讀更多關於billing類型:Fortumo FAQ.
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); } ?>
複製到剪貼板





