Техническое описание системы SMS-взаимодействия Fortumo
SMS-оплата - это самое гибкое решение в Fortumo. Оно позволяет создавать практически любые приложения и сервисы с использованием оплаты посредством sms сообщений. Для использования SMS-Оплаты нужны определённые навыки в программировании и веб-сервер для обеспечения работы твоего приложения (например php или ruby скрипт). Взаимодействие между нашим сервером и твоим скриптом будет производиться путем HTTP GET запросов. Существуют три типа HTTP запросов, которые описаны ниже. Параметры в этих запросах всегда те же. Самый важный и обязательный в обработке сообщений первый тип.
Твой аккаунт имеет встроенную функцию для тестирования работы SMS-сервисов. После указания URL обработчика запросов перейди на вкладку "Тест" и отправь тестовый запрос с сервера Fortumo на обработчик. При этом параметр test будет иметь значение true.
Параметры
messagesendercountrypricecurrencyservice_idmessage_idkeywordshortcodeoperatorbilling_typestatuspending (используется в запросах на отправку ответного сообщения), ok или failed (используются в отчётах об оплате).testsigНаиболее часто используются параметры message и sender, но для более требовательных пользователей мы добавили остальные параметры.
Очень важно убедиться, что запрос пришёл именно от Fortumo, а не от кого-то другого. Для это есть несколько способов, которые подойдут для большинства пользователей.:
$_SERVER["REMOTE_ADDR"], в perl это $ENV{REMOTE_ADDR}, а для ASP.NET это Request.ServerVariables["REMOTE_ADDR"].
sig и представляет собой контрольную сумму MD5 от строки, состоящей из всех параметров запроса и секретной фразы. Ты можешь составить такую строку, узнать её контрольную сумму и убедиться, что значение совпадает с защитной подписью. Ниже приведён пример подобной проверки на языке PHP.
Пример 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', '79.125.125.1', '209.20.83.207'))) { header("HTTP/1.0 403 Forbidden"); die("Error: Unknown IP"); } // check the signature $secret = ''; // insert your secret between '' if(empty($secret) || !check_signature($_GET, $secret)) { header("HTTP/1.0 404 Not Found"); die("Error: Invalid signature"); } $sender = $_GET['sender']; $message = $_GET['message']; $message_id = $_GET['message_id'];//unique id //hint:use message_id to log your messages //additional parameters: country, price, currency, operator, keyword, shortcode // 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); } ?>Копировать в буфер обмена