How does the Pay-by-SMS Widget work?
FortuMoPay - это готовое с использованию решение для приёма международных мобильных платежей, предназначенное для игр и интернет-проектов. Оно отлично подходит для продажи виртуальной валюты в онлайн играх или предоставления платного доступа к контенту. Настроить сервис FortuMoPay легко (нужны минимальные владения программированием), быстро (всего несколько минут) и бесплатно (нет платы за подключение, нет абонентской платы)!
Параметры
После завершения платежа Fortumo уведомит об этом твою систему, отправив HTTP GET запрос на URL, который ты указал в настройках сервиса (напр. http://example.com/sms.php). Запрос будет считаться успешным, если твой сервер ответит HTTP кодом 200, в противном случае запрос будет повторён (вплоть до 10 раз).
sendercountrycurrencyamountpriceuser_sharecuidpayment_idservice_idoperatorstatuscompleted для успешных платежей или будет содержать слово failed в случае ошибки.testsigОчень важно убедиться, что запрос пришёл именно от Fortumo, а не от кого-то другого. Для это есть несколько способов, которые подойдут для большинства пользователей.:
$_SERVER["REMOTE_ADDR"], в perl это $ENV{REMOTE_ADDR}, а для ASP.NET это Request.ServerVariables["REMOTE_ADDR"].
sig и представляет собой контрольную сумму MD5 от строки, состоящей из всех параметров запроса и секретной фразы. Ты можешь составить такую строку, узнать её контрольную сумму и убедиться, что значение совпадает с защитной подписью. Ниже приведён пример подобной проверки на языке PHP.
Пример 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); } ?>Копировать в буфер обмена