Проверка на код от sms
Автор: BG_NIKE
Поради твърде големият интерес за този код с резрешението на админ пускам кода отново.Доста хора ме питат само за него.Правим два файла wisdom.php и test.php.
wisdom.php
<?
class clsHTTP {
var $referer;
var $postStr;
var $retStr;
var $theData;
var $theCookies;
function clsHTTP(){
}
function setReferer($sRef){
$this->referer = $sRef;
}
function addField($sName, $sValue){
$this->postStr .= $sName . "=" . $this->HTMLEncode($sValue) . "&";
}
function clearFields(){
$this->postStr = "";
}
function checkCookies(){
$cookies = explode("Set-Cookie:", $this->theData );
$i = 0;
if ( count($cookies)-1 > 0 ) {
while(list($foo, $theCookie) = each($cookies)) {
if (! ($i == 0) ) {
@list($theCookie, $foo) = explode(";", $theCookie);
list($cookieName, $cookieValue) = explode("=", $theCookie);
@list($cookieValue, $foo) = explode("\r\n", $cookieValue);
$this->setCookies(trim($cookieName), trim($cookieValue));
}
$i++;
}
}
}
function setCookies($sName, $sValue){
$total = count(explode($sName, $this->theCookies));
if ( $total > 1 ) {
list($foo, $cValue) = explode($sName, $this->theCookies);
list($cValue, $foo) = explode(";", $cValue);
$this->theCookies = str_replace($sName . $cValue . ";", "", $this->theCookies);
}
$this->theCookies .= $sName . "=" . $this->HTMLEncode($sValue) . ";";
}
function getCookies($sName){
list($foo, $cValue) = explode($sName, $this->theCookies);
list($cValue, $foo) = explode(";", $cValue);
return substr($cValue, 1);
}
function clearCookies(){
$this->theCookies = "";
}
function getContent(){
list($header, $foo) = explode("\r\n\r\n", $this->theData);
list($foo, $content) = explode($header, $this->theData);
return substr($content, 4);
}
function getHeaders(){
list($header, $foo) = explode("\r\n\r\n", $this->theData);
list($foo, $content) = explode($header, $this->theData);
return $header;
}
function getHeader($sName){
list($foo, $part1) = explode($sName . ":", $this->theData);
list($sVal, $foo) = explode("\r\n", $part1);
return trim($sVal);
}
function postPage($sURL){
$sInfo = $this->parseRequest($sURL);
$request = $sInfo['request'];
$host = $sInfo['host'];
$port = $sInfo['port'];
$this->postStr = substr($this->postStr, 0, -1);
$httpHeader = "POST $request HTTP/1.0\r\n";
$httpHeader .= "Host: $host\r\n";
$httpHeader .= "Connection: Close\r\n";
$httpHeader .= "User-Agent: cHTTP/0.1b (incompatible; M$ sucks; Open Source Rulez)\r\n";
$httpHeader .= "Content-type: application/x-www-form-urlencoded\r\n";
$httpHeader .= "Content-length: " . strlen($this->postStr) . "\r\n";
$httpHeader .= "Referer: " . $this->referer . "\r\n";
$httpHeader .= "Cookie: " . $this->theCookies . "\r\n";
$httpHeader .= "\r\n";
$httpHeader .= $this->postStr;
$httpHeader .= "\r\n\r\n";
$this->theData = $this->downloadData($host, $port, $httpHeader);
$this->checkCookies();
}
function getPage($sURL){
$sInfo = $this->parseRequest($sURL);
$request = $sInfo['request'];
$host = $sInfo['host'];
$port = $sInfo['port'];
$httpHeader = "GET $request HTTP/1.0\r\n";
$httpHeader .= "Host: $host\r\n";
$httpHeader .= "Connection: Close\r\n";
$httpHeader .= "User-Agent: cHTTP/0.1b (incompatible; M$ sucks; Open Source Rulez)\r\n";
$httpHeader .= "Referer: " . $this->referer . "\r\n";
$httpHeader .= "Cookie: " . substr($this->theCookies, 0, -1) . "\r\n";
$httpHeader .= "\r\n\r\n";
$this->theData = $this->downloadData($host, $port, $httpHeader);
}
function parseRequest($sURL){
list($protocol, $sURL) = explode('://', $sURL);
list($host, $foo) = explode('/', $sURL);
list($foo, $request) = explode($host, $sURL);
@list($host, $port) = explode(':', $host);
if ( strlen($request) == 0 ) $request = "/";
if ( strlen($port) == 0 ) $port = "80";
$sInfo = Array();
$sInfo["host"] = $host;
$sInfo["port"] = $port;
$sInfo["protocol"] = $protocol;
$sInfo["request"] = $request;
return $sInfo;
}
function HTMLEncode($sHTML){
$sHTML = urlencode($sHTML);
return $sHTML;
}
function downloadData($host, $port, $httpHeader){
$fp = fsockopen($host, $port);
$retStr = "";
if ( $fp ) {
fwrite($fp, $httpHeader);
while(! feof($fp)) {
$retStr .= fread($fp, 1024);
}
fclose($fp);
}
return $retStr;
}
}Тук нищо не се промена.Кодът е взет преди доста време от www.php.net,за това не мога да дам линк. Smile
test.php
<?
require_once("wisdom.php");
$do = $_POST['do'];
$kod = $_POST['kod'];
$ip = $_SERVER['REMOTE_ADDR'];
$pref = ВАШИЯТ ПРЕФИКС;
if ($do)
{
$http = new clsHTTP();
$http->getPage("http://wisdom.bg/smscheckcode.php?prefix=$pref&code=$kod&user_ip=$ip");
$var = unserialize($http->getContent());
$http->getPage("http://wisdom.bg/smscheckcode.php?prefix=$pref&code=$kod&mark_as_used=1&user_ip=$ip");
$res = $var['result'];
if($res == "TRUE")
{
echo "<b>Успешно</b>";
}else{
echo "<b>Грешен код!</b>";
}
}
?>
<form method="post" action="test.php">Код:<input name="kod" type="text" size="10"><input type="submit" name="do" value="Зареди"></form>ВАЖНО! Преди да пишете и да се чудите защо Ви пише „Грешен код“,а всъщност сте сигурни,че той е верен,проверете дали сте задали правилно ипто на сайта си в Контрол панела.
За въпроси на ЛС или във форума.
Демо http://n-bg.net/wisdom/test.php Но не е 24 часа.Ще видя да го кача някъде.
Разяснения:
Инструкции за работа с избрания метод:
„Автоматично генериране на потребителски код“ е метод, при който нашата система генерира за всеки входящ SMS случаен код, който изпращаме с обратен SMS на потребителя.
Съдържанието на обратния SMS се определя по зададения от Вас шаблон в полето „Шаблон за отговор“. Примерен шаблон: „Kod za neshtosi.com: A3JFB5“ (сайтът и кодът са примерни).
След като потребителят получи SMS с въпросния код, той го въвежда в специално поставена форма в сайта Ви. При submit на формата обработващият я скрипт прави проверка в нашата система дали въведеният код е валиден и предоставя на потребителя достъп до съответната платена услуга.
Адресът на скрипта за проверка на кода е: http://wisdom.bg/smscheckcode.php. Достъпът до този скрипт е ограничен, затова е необходимо в системните настройки да посочите IP адрес на сайта, от който ще се извиква.
В полето „Шаблон за отговор“ можете да редактирате текстa на обратния SMS, който се изпраща на потребителя в отговор на входящия. Текстът трябва да е на латиница и да е до 150 символа. На мястото в стринга, където ще бъде кодът за достъп, поставете фразата .
В полето „Време за валидност“ посочете времето (в часове), в което желаете кодът да е валиден за използване след генерирането му.
Примерен казус:
Вашият префикс е „test“ и потребител изпраща на еднолевовия ни номер 1910 SMS със съдържание „test 123“. GSM номерът му е 0898-912-974, а IP адресът – 212.104.101.106.
В отговор потребителят получава SMS със код за сайта Ви „A3JFB5“. Въвежда този код във формата в сайта Ви и изпраща формата. Тогава скриптът Ви, който я обработва, трябва да направи следната GET заявка, за да провери дали кодът е валиден: http://wisdom.bg/smscheckcode.php?prefix=test&code=A3JFB5&user_ip=212.104.101.106
В резултат на GET заявката системата ни връща текстово съдържание, което представлява сериализиран масив от данни на php. След unserialize, масивът изглежда по следния начин:
Array
(
"result" => TRUE,
"error" => NULL,
"date" => 1167602401,
"sms_id" => 5,
"nmb_from" => "359898912974",
"sms_number" => "1910",
"sms_price" => "1",
"sms_text" => "text 123",
"sms_reply" => "Kod za mysite.com: A3JFB5",
);Масивът е асоциативен и има 8 елемента. Ако „result“ има стойност TRUE – това означава, че въведеният код е валиден и Вие трябва да дадете на потребителя достъп до платената услуга. Ако стойността е FALSE, значи е възникнала грешка. Съобщението на грешката е в елемента „error“, който в противен случай е със стойност NULL. Елементът „date“ е датата на SMS-а (unix timestamp). „sms_id“ е уникално ID на sms-a. „nmb_from“ е GSM номера, от който е изпратен входящият SMS. „sms_number“ е краткият SMS номер с добавена стойност на Wisdom.BG. „sms_price“ представлява цената на входящия SMS (без ДДС). „sms_text“ съдържа текстът, който потребителят е изпратил като SMS. „sms_reply“ е текстът на обратния SMS с кода за достъп.
В случай, че кодът е невалиден или възникне някаква грешка, масивът съдържа два елемента: „result“ има стойност FALSE, а „error“ е текстът на грешката.
След като скриптът Ви получи информация, че кодът е валиден, той трябва с още една GET заявка да маркира кода като използван, за да не бъде валиден при опит за повторното му въвеждане. Ако желаете кодовете Ви да са валидни за няколко извиквания, тази GET заявка я изпълнявайте след последното използване на всеки код. Примерна GET заявка за маркиране на код като използван:
http://wisdom.bg/smscheckcode.php?prefix=test&code=A3JFB5&mark_as_used=1&user_ip=212.104.101.106
Забележка: Системата на Wisdom.BG изисква IP адреса на потребителя единствено с цел защита на скриптовете от злоупотреби чрез flood.


