Jump to content

návod SMS zapis do DB


Skyrimak

Recommended Posts

Zdravím,

 

Jelikož hodně lidí se mě ptá jak jsem na http://www.mobilniplatby.cz (nebrat jako reklamu) udělal, že když dojde sms zapíše se mi do DB.

 

tady je script vč. vysvětlivek formou komentářů.

 

<?php
//připojení k DB
$server = "IP"; // jméno serveru
$login = "JMENO"; // přihlašovací jméno
$heslo = "IP"; // heslo
$databaze = "DB"; // název databáze kde máte sql soubor (je níže)
$tabulka = 'ucty';

MySQL_Connect($server, $login, $heslo) or die("Nepodařilo se připojit k databázi"); // připojení k databázi
MySQL_Select_DB($databaze) or die("Nepodařilo se otevřít databázi"); // výběr databáze

$id = $_GET['text']; //Definování textu ze sms třetí slovo
//váš tvar sms je většinou PM NECO
a to co je dané za NECO třeba číslo 10000 je ta $id = $_GET['text']

$smss = mysql_query("SELECT * FROM $tabulka WHERE id='{$id}'"); //Vyber z tabulky podle ID zadaného v sms

while($sms = mysql_fetch_array($smss)){
//Switch funkce když nekdo posle sms v urcite hodnote

switch ($_GET['price']) {
   case 10.00: // sms ceny 10 CZK ( 903 33 10 )
$cena = '0.10'; // pocet kreditu kolik dostanete
$kcena = $sms['kredit'] + $cena; //pricteni kreditu
       break; //Ukončení case 10.00: (tak je to u všch)
   case 20.00:
$cena = '0.20';
$kcena = $sms['kredit'] + $cena;
       break;
   case 30.00:
$cena = '0.30';
$kcena = $sms['kredit'] + $cena;
       break;
   case 50.00:
$cena = '0.50';
$kcena = $sms['kredit'] + $cena;
       break;
   case 79.00:
$cena = '0.80';
$kcena = $sms['kredit'] + $cena;
       break;
   case 99.00:
$cena = '1.2';
$kcena = $sms['kredit'] + $cena;
       break;
}
}
if($_GET['hash'] == 'emulator') die('EMULATOR NENI POVOLEN'); //Zablokování spamování sms přes testovací emulátor

else{
//pokud je sms poslaná z mobilu a ne z emulátoru (co ma mobilniplatby.cz) na webu
//tak se ptovede tohle

$query = mysql_query("UPDATE $tabulka SET kredit = '{$kcena}' WHERE id='{$id}'")or die(mysql_error().' na radku update'); //Zapsání kreditu uživateli

echo "Kredit na ID {$id} zvysen na {$kcena}"; //Odpověd poocí SMS
}
?>

 

SQL

CREATE TABLE `ucty` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `jmeno` varchar(255) DEFAULT NULL,
 `kredit` varchar(11) DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;
INSERT INTO `ucty` VALUES ('1', 'Test', '10.2');

Link to comment
Share on other sites

  • Administrátor

Jen by mě zajímalo já odešlu sms tu přebere poskytovatel mobilních plateb a jak se ty udaje dostanou do toho scriptu ? To tu sms poskytovatel "přesměruje" na url s tímto scriptem ?

Link to comment
Share on other sites

Poskytovatel (operátor) sms přepošle na bránu kam byla poslána třeba PM NECO 10000 na číslo 903 33 99

 

PM je název společnosti která má smlouvu s operatory takze sms jde rovnou k nim

 

jakmile do dojde do společnosti vezmou její druhe slovo NECO což je nazev brany

 

podle ni tě najdou

 

brana ma nastaveny odkaz na script kam se přepošleš třeti slovo jako $_GET['tex'] tzn číslo 10000

 

a script to veme jako ID acc a to vyhledá a připíše tam kredity

Link to comment
Share on other sites

Neviem možno sa mýlim ,ale nemalo by tam byť ošetrenie aby ten GET dotaz (resp. Request) spracovalo iba ak prichádza od IP brány ?... aby sa to nedalo zneužiť.. pre mobilniplatby to je rozsah adresného priestoru 195.47.87.160 - 195.47.87.191

Link to comment
Share on other sites

Zneužít se to nedá je dobré ke scriptu přiložit i .htacces soubor

 

ale i tak každy přistup je zaznamenám a pouze přístup od mobilniplatby to vezme jine pokusi o zaslání se definují jako

if($_GET['hash'] == 'emulator') die('EMULATOR NENI POVOLEN'); //Zablokování spamování sms přes testovací emulátor

 

a script je nepropustí

Link to comment
Share on other sites

  • 2 weeks later...

Skyrimáku, pleteš se. Pokud někdo najde ten script (zjistí jeho název a umístění) pak stačí zadat správný query string a mačkat F5 - tím tvůj script pořád přidává a přidává a pridává (a neni to emulator ;))

 

Nicméně stačila by lehká funkce

function isInRange($addr, $range_lo, $range_hi) {
$range_lo = explode('.', $range_lo);
$range_hi = explode('.', $range_hi);
$addr = explode('.', $addr);
return $addr[3] >= $range_lo[3] && $addr[3] <= $range_hi[3];
}

 

a podmínka někde k začátku

if(isInRange($_SERVER['REMOTE_ADDR'], '195.47.87.160', '195.47.87.191')) 

 

a je po problému.

 

Dále u tohoto poskytovatele bacha na to, že pokud SMS pošle slovák co na to nemá dostatek kreditů, nebude mu to brát peníze, vám přidávat ale budou se mu přičítat peníze/kredity :)

Link to comment
Share on other sites

  • 7 months later...
  • 2 weeks later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...