Ico_big_info How does the Pay-by-SMS Widget work?

FortuMoPay - это готовое с использованию решение для приёма международных мобильных платежей, предназначенное для игр и интернет-проектов. Оно отлично подходит для продажи виртуальной валюты в онлайн играх или предоставления платного доступа к контенту. Настроить сервис FortuMoPay легко (нужны минимальные владения программированием), быстро (всего несколько минут) и бесплатно (нет платы за подключение, нет абонентской платы)!

Big_bullet Параметры

После завершения платежа Fortumo уведомит об этом твою систему, отправив HTTP GET запрос на URL, который ты указал в настройках сервиса (напр. http://example.com/sms.php). Запрос будет считаться успешным, если твой сервер ответит HTTP кодом 200, в противном случае запрос будет повторён (вплоть до 10 раз).

sender
Номер телефона отправителя сообщения в международном формате без знака плюс. Например 89634812815 для сообщения из России или 37256455115 для Эстонии.
country
Код страны оператора сотовой сети, к которой принадлежит мобильный телефон отправителя сообщения. Код состоит из двух символов согласно стандарту ISO 3166-1 (RU для России, UA для Украины, LT для Литвы, LV для Латвии, EE для Эстонии и так далее). Имей ввиду, что код не всегда соответствует текущему местоположению отправителя. Например человек с российским телефоном может отправлять сообщениях, находясь на роуминге в Германии, и значением параметра будет по-прежнему RU.
currency
Код местной валюты в соответствии со стандартом ISO 4217 (RUB, UAH, EUR, SEK, NOK, DKK, LTL, LVL, EEK, USD, GBP и так далее).
amount
Количество купленной валюты
price
Итоговая цена для абонента в местной валюте, включая НДС.
user_share
Твоя доля от цена для абонента.
cuid
Строка, которую ты предоставил как ID ресурса в своей системе. Таким образом ты можешь связать платёж с конкретным ресурсом (например пользователем или игрой), указав его ID в конце URL платёжного виджета.
payment_id
Уникальный идентификатор платежа.
service_id
Строковый идентификатор текущего сервиса Fortumo, например f7fa12b381d290e268f99e382578d64a. Если ты используешь несколько различных сервисов для одного сайта, то эта строка поможет определить, для какого из сервисов был произведён платёж.
operator
Название сотового оператора отправителя сообщения.
status
Статус платежа, который будет отмечен как completed для успешных платежей или будет содержать слово failed в случае ошибки.
test
Этот параметр присутствует только если сообщение было отправлено через тестовую среду Fortumo, его значением может быть 'ok' или 'fail'.
sig
Защитная подпись, с помощью которой можно убедится, что запрос пришёл именно от Fortumo. Подробнее можешь прочитать в разделе Безопасность.

Безопасность

Очень важно убедиться, что запрос пришёл именно от Fortumo, а не от кого-то другого. Для это есть несколько способов, которые подойдут для большинства пользователей.:

  1. Убедись, что IP адрес, с которого пришёл запрос, соответствует одному из используемых в Fortumo. В данный момент для выполнения запросов мы используем IP адреса 81.20.151.38, 81.20.148.122, 79.125.125.1 и 209.20.83.207. Если они изменятся, соответствующее уведомление будет отправлено по электронной почте. В PHP для такой проверки можно использовать переменную $_SERVER["REMOTE_ADDR"], в perl это $ENV{REMOTE_ADDR}, а для ASP.NET это Request.ServerVariables["REMOTE_ADDR"].
  2. Выбери бессмысленное имя для директории и скрипта. Например http://yourdomain.com/sms.php хуже чем http://yourdomain.com/go850g3oigjrtog/sms.php.
  3. Проверь защитную подпись. Все запросы подписываются с помощью секретной фразы, известной только тебе и Fortumo. Текущую секретную фразу можно увидеть на странице настройки сервиса. Защитная подпись добавляется к запросу с помощью параметра sig и представляет собой контрольную сумму MD5 от строки, состоящей из всех параметров запроса и секретной фразы. Ты можешь составить такую строку, узнать её контрольную сумму и убедиться, что значение совпадает с защитной подписью. Ниже приведён пример подобной проверки на языке PHP.

Big_bullet Пример sms.php

<?php
  
  // 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'];//phone num.
  $amount = $_GET['amount'];//credit
  $cuid = $_GET['cuid'];//resource i.e. user
  $payment_id = $_GET['payment_id'];//unique id

  //hint: find or create payment by payment_id
  //additional parameters: operator, price, user_share, country
  
  if(preg_match("/failed/i", $_GET['status'])) {
   // mark payment as failed
  } else {
   // mark payment successful
  }

  // print out the reply
  echo('OK');
 
  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);
  }
?>
Копировать в буфер обмена