[PHP] MobilniPlatby.cz [1.0.0-beta2]
- Mysteria
- Příspěvky: 9122
- Registrován: 26 pro 2009, 15:40
- Reputation: 7
- Bydliště: Česká republika
- Kontaktovat uživatele:
Re: [PHP] MobilniPlatby.cz [1.0.0-beta2]
Pokud to předtím fungovalo (nejspíš jo, když jsi to používal), tak museli oni něco změnit ve specifikaci. Zítra se na to zkusím podívat.
Výběr z vlastních projektů: MinecraftServerList.cz ✔ Minecraft Extended Punishment List ✔ Killing Floor2 servery ✔
Spoiler: zobrazit
Re: [PHP] MobilniPlatby.cz [1.0.0-beta2]
ok ďakujem a ano pred tym to fungovalo
- Mysteria
- Příspěvky: 9122
- Registrován: 26 pro 2009, 15:40
- Reputation: 7
- Bydliště: Česká republika
- Kontaktovat uživatele:
Re: [PHP] MobilniPlatby.cz [1.0.0-beta2]
Tak jsem to vyzkoušel a normálně mi to emulátorem projede:
Takže abych to mohl zjistit, kde je problém u tebe, tak mi sem hoď screenshot z emulátoru mobilních plateb a zkopíruj kód s nastaveníma platebních levelů ve scriptu (tak jako jsem to sem udělal já) a pak to vyzkouším s tvýma nastaveníma a uvidíme.
Spoiler: zobrazit
Kód: Vybrat vše
$levels = [ // Nastavení SMS levelů
[
'price' => 99, // Cena SMSky
'text' => 'VIP :NICK:', // Text SMSky, :NICK: bude nahrazen skutečným nickem uvedeným v SMS, musí být unikátní v rámci všech platebních levelů
'answer' => 'Dekujeme za zakoupeni VIP za 99Kc.', // Odpověď na správně zaslanou SMS
'commands' => [ // RCON příkazy vykonané po úspěšném zpracování SMSky, :NICK: bude nahrazen skutečným nickem uvedeným v SMS
'pex user :NICK: group add VIP',
'say Uzivatel :NICK: si prave zakoupil VIP za 99Kc.'
]
], [
'price' => 199,
'text' => 'eVIP :NICK:',
'answer' => 'Dekujeme za zakoupeni eVIP za 199Kc.',
'commands' => [
'pex user :NICK: group add eVIP',
'say Uzivatel :NICK: si prave zakoupil eVIP za 199Kc.'
]
]
];
Takže abych to mohl zjistit, kde je problém u tebe, tak mi sem hoď screenshot z emulátoru mobilních plateb a zkopíruj kód s nastaveníma platebních levelů ve scriptu (tak jako jsem to sem udělal já) a pak to vyzkouším s tvýma nastaveníma a uvidíme.
Výběr z vlastních projektů: MinecraftServerList.cz ✔ Minecraft Extended Punishment List ✔ Killing Floor2 servery ✔
Spoiler: zobrazit
Re: [PHP] MobilniPlatby.cz [1.0.0-beta2]
Nastavenia:
https://ctrlv.cz/f4lQ
https://ctrlv.cz/hebX
Kód: Vybrat vše
<?php
/**
* Název: MobilniPlatby.cz - PHP script pro zaslání RCON příkazů na MineCraft server po odeslání prémiové SMS
* Autor: Mysteria - http://www.mysty.cz
* Verze: 1.0.0-beta2
* Poslední update: 27. 7. 2014
* Více informací & download: http://forum.fakaheda.eu/viewtopic.php?f=85&t=20682#p134652
*/
$settings = (object)[ // Nastavení serverového RCONu
'ip' => 'xxxxxxxxxxxxx',
'port' => xxxxx,
'password' => 'heslo'
];
$messages = (object)[ // Nastavení chybových SMS zpráv
'sms_bad_price' => 'Litujeme, ale poslali jste SMS za :REALPRICE:Kc misto SMS za :PRICE:Kc.',
'sms_not_found' => 'Litujeme, ale poslali jste SMS, ktera nebyla automaticky rozpoznana. Kontaktujte prosim administratory.'
];
$levels = [ // Nastavení SMS levelů
[
'price' => 79, // Cena SMSky
'text' => 'SCV :NICK:', // Text SMSky, :NICK: bude nahrazen skutečným nickem uvedeným v SMS, musí být unikátní v rámci všech platebních levelů
'answer' => 'Dekujeme za zakoupeni VIP.', // Odpověď na správně zaslanou SMS
'commands' => [ // RCON příkazy vykonané po úspěšném zpracování SMSky, :NICK: bude nahrazen skutečným nickem uvedeným v SMS
'pex user :NICK: group set VIP',
'economy give :NICK: 12500000',
'say Uzivatel :NICK: si prave zakoupil VIP.'
]
], [
'price' => 149,
'text' => 'SCE :NICK:',
'answer' => 'Dekujeme za zakoupeni ExtraVIP.',
'commands' => [
'pex user :NICK: group set ExtraVIP',
'economy give :NICK: 25000000',
'say Uzivatel :NICK: si prave zakoupil ExtraVIP.'
]
], [
'price' => 299,
'text' => 'SCT :NICK:',
'answer' => 'Dekujeme za zakoupeni TrialOP.',
'commands' => [
'pex user :NICK: group set TrialOP',
'economy give :NICK: 50000000',
'say Uzivatel :NICK: si prave zakoupil TrialOP.'
]
]
];
/* Do not make any changes below this line if you don't know what are you doing! */
$rcon = new Rcon($settings->ip, $settings->port, $settings->password, 3);
if (!$rcon->connect()) exit('Cannot connect to server RCON. Please check your settings.');
$url = (object)filter_input_array(INPUT_GET);
try {
if (isset($url->shortcode)) {
$url->sms = trim($url->sms);
if (mb_strlen($url->shortcode) === 7) {
$realPrice = (int)substr($url->shortcode, -2, 2);
foreach ($levels as $level) {
$level = (object)$level;
if ($level->price >= 100) continue;
$realNick = explode(' ', $url->sms)[array_search(':NICK:', explode(' ', $level->text))];
if (strtolower($url->sms) === strtolower(str_replace(':NICK:', $realNick, $level->text))) {
if ($realPrice === $level->price) {
foreach ($level->commands as $command) $rcon->send_command(str_replace(':NICK:', $realNick, $command));
File::write('./mobilni-platby.log', date('d. m. Y H:i:s', time()) . " => [SUCCESS] SMS zpráva s obsahem '$url->sms' s cenou {$realPrice}Kč byla úspěšně zpracována." . PHP_EOL);
header('Content-type:text/plain');
header('Content-length:' . mb_strlen($level->answer));
exit($level->answer);
} else {
File::write('./mobilni-platby.log', date('d. m. Y H:i:s', time()) . " => [!ERROR!] SMS zpráva s obsahem '$url->sms' s cenou {$realPrice}Kč nebyla zpracována, protože měla mít cenu {$level->price}Kč." . PHP_EOL);
$answer = str_replace(':PRICE:', $level->price, str_replace(':REALPRICE:', $realPrice, $messages->sms_bad_price));
header('Content-type:text/plain');
header('Content-length:' . mb_strlen($answer));
exit($answer);
}
}
}
File::write('./mobilni-platby.log', date('d. m. Y H:i:s', time()) . " => [!ERROR!] SMS zpráva s obsahem '$url->sms' s cenou {$realPrice}Kč nebyla zpracována, protože nebyla rozpoznána." . PHP_EOL);
header('Content-type:text/plain');
header('Content-length:' . mb_strlen($messages->sms_not_found));
exit($messages->sms_not_found);
} else {
foreach ($levels as $level) {
$level = (object)$level;
if ($level->price <= 99) continue;
$realNick = explode(' ', $url->sms)[array_search(':NICK:', explode(' ', $level->text))];
if (strtolower($url->sms) === strtolower(str_replace(':NICK:', $realNick, $level->text))) {
$file = "./database/$url->id.txt";
$commands = NULL;
foreach ($level->commands as $command) $commands .= str_replace(':NICK:', $realNick, $command) . ';;;';
File::write($file, $commands);
$level->answer .= ";90333$level->price";
File::write('./mobilni-platby.log', date('d. m. Y H:i:s', time()) . " => [SUCCESS] SMS zpráva ID $url->id s obsahem '$url->sms' s cenou {$level->price}Kč byla úspěšně zpracována." . PHP_EOL);
header('Content-type:text/plain');
header('Content-length:' . mb_strlen($level->answer));
exit($level->answer);
}
}
File::write('./mobilni-platby.log', date('d. m. Y H:i:s', time()) . " => [!ERROR!] SMS zpráva ID $url->id s obsahem '$url->sms' s cenou {$level->price}Kč nebyla zpracována, protože nebyla rozpoznána." . PHP_EOL);
header('Content-type:text/plain');
header('Content-length:' . mb_strlen($messages->sms_not_found));
exit("$messages->sms_not_found;FREE90333199");
}
} elseif (isset($url->request)) {
if ($url->status === 'DELIVERED') {
$file = "./database/$url->request.txt";
if (is_array($commands = explode(';;;', File::read($file)))) foreach ($commands as $command) $rcon->send_command($command);
File::remove($file);
File::write('./mobilni-platby.log', date('d. m. Y H:i:s', time()) . " => [SUCCESS] Doručenka SMS zprávy ID $url->request byla úspěšně zpracována." . PHP_EOL);
} else File::write('./mobilni-platby.log', date('d. m. Y H:i:s', time()) . " => [!ERROR!] Doručenka SMS zprávy ID $url->request nebyla zpracována, protože přišla se statusem $url->status ($url->message)." . PHP_EOL);
header('HTTP/1.1 204 No Content');
exit;
}
} catch (\FileException $e) { exit($e->getMessage()); }
class File {
public static function read($source, $mode = 'r') {
if (file_exists($source)) {
if ($file = fopen($source, $mode)) {
if ($content = fread($file, filesize($source))) {
if (fclose($file)) {
return $content;
} else throw new \FileException("Cannot close file $source.");
} else throw new \FileException("Cannot read file $source.");
} else throw new \FileException("Cannot open file $source.");
} else throw new \FileException("Cannot find file $source.");
}
public static function write($destination, $content, $mode = 'a') {
if (!is_dir(dirname($destination))) if (!mkdir(dirname($destination), 0777, TRUE)) throw new \FileException("Cannot create path $destination.");
if ($file = fopen($destination, $mode)) {
if (fwrite($file, $content)) {
if (fclose($file)) {
return TRUE;
} else throw new \FileException("Cannot close file $destination.");
} else throw new \FileException("Cannot write file $destination.");
} else throw new \FileException("Cannot find file $destination.");
}
public static function remove($source) {
if (file_exists($source)) {
if (unlink($source)) {
return TRUE;
} else throw new \FileException("Cannot remove file $source.");
} else throw new \FileException("Cannot find file $source.");
}
}
class FileException extends \Exception { }
class Rcon {
private $host;
private $port;
private $password;
private $timeout;
private $socket;
private $authorized;
private $last_response;
const PACKET_AUTHORIZE = 5;
const PACKET_COMMAND = 6;
const SERVERDATA_AUTH = 3;
const SERVERDATA_AUTH_RESPONSE = 2;
const SERVERDATA_EXECCOMMAND = 2;
const SERVERDATA_RESPONSE_VALUE = 0;
public function __construct($host, $port, $password, $timeout) {
$this->host = $host;
$this->port = $port;
$this->password = $password;
$this->timeout = $timeout;
}
public function get_response() {
return $this->last_response;
}
public function connect() {
$this->socket = fsockopen($this->host, $this->port, $errno, $errstr, $this->timeout);
if (!$this->socket) {
$this->last_response = $errstr;
return false;
}
//set timeout
stream_set_timeout($this->socket, 3, 0);
//authorize
$auth = $this->authorize();
if ($auth) {
return true;
}
return false;
}
public function disconnect() {
if ($this->socket) {
fclose($this->socket);
}
}
public function is_connected() {
return $this->authorized;
}
public function send_command($command) {
if (!$this->is_connected()) return false;
// send command packet.
$this->write_packet(Rcon::PACKET_COMMAND, Rcon::SERVERDATA_EXECCOMMAND, $command);
// get response.
$response_packet = $this->read_packet();
if ($response_packet['id'] == Rcon::PACKET_COMMAND) {
if ($response_packet['type'] == Rcon::SERVERDATA_RESPONSE_VALUE) {
$this->last_response = $response_packet['body'];
return $response_packet['body'];
}
}
return false;
}
private function authorize() {
$this->write_packet(Rcon::PACKET_AUTHORIZE, Rcon::SERVERDATA_AUTH, $this->password);
$response_packet = $this->read_packet();
if ($response_packet['type'] == Rcon::SERVERDATA_AUTH_RESPONSE) {
if ($response_packet['id'] == Rcon::PACKET_AUTHORIZE) {
$this->authorized = true;
return true;
}
}
$this->disconnect();
return false;
}
/**
* Writes a packet to the socket stream..
*/
private function write_packet($packet_id, $packet_type, $packet_body) {
/*
Size 32-bit little-endian Signed Integer Varies, see below.
ID 32-bit little-endian Signed Integer Varies, see below.
Type 32-bit little-endian Signed Integer Varies, see below.
Body Null-terminated ASCII String Varies, see below.
Empty String Null-terminated ASCII String 0x00
*/
//create packet
$packet = pack("VV", $packet_id, $packet_type);
$packet = $packet . $packet_body . "\x00";
$packet = $packet . "\x00";
// get packet size.
$packet_size = strlen($packet);
// attach size to packet.
$packet = pack("V", $packet_size) . $packet;
// write packet.
fwrite($this->socket, $packet, strlen($packet));
}
private function read_packet() {
//get packet size.
$size_data = fread($this->socket, 4);
$size_pack = unpack("V1size", $size_data);
$size = $size_pack['size'];
// if size is > 4096, the response will be in multiple packets.
// this needs to be address. get more info about multi-packet responses
// from the RCON protocol specification at
// https://developer.valvesoftware.com/wiki/Source_RCON_Protocol
// currently, this script does not support multi-packet responses.
$packet_data = fread($this->socket, $size);
$packet_pack = unpack("V1id/V1type/a*body", $packet_data);
return $packet_pack;
}
}
https://ctrlv.cz/f4lQ
https://ctrlv.cz/hebX
- Mysteria
- Příspěvky: 9122
- Registrován: 26 pro 2009, 15:40
- Reputation: 7
- Bydliště: Česká republika
- Kontaktovat uživatele:
Re: [PHP] MobilniPlatby.cz [1.0.0-beta2]
První dvě chyby z toho druhýho screenu jsou způsobený "nevhodným" nastavení webhostingu (nevím co přesně to způsobuje, ale už jsem se s tím setkal u Wedosu). Řešení je přesunout to pod jiný webhosting, ideálně od Fakahedy, tam to funguje. Třetí chyba na tom samém screenu ukazuje nějaký problém při komunikace přes RCON se serverem, tomu já ale detailně nerozumím (používám knihovnu od někoho jiného), ale možná se to taky vyřeší přesunutím pod jinej webhosting.
Na tu chybovou hlášku, že script neodpovídá dle specifikace se podívám.
Na tu chybovou hlášku, že script neodpovídá dle specifikace se podívám.
Výběr z vlastních projektů: MinecraftServerList.cz ✔ Minecraft Extended Punishment List ✔ Killing Floor2 servery ✔
Spoiler: zobrazit
- Mysteria
- Příspěvky: 9122
- Registrován: 26 pro 2009, 15:40
- Reputation: 7
- Bydliště: Česká republika
- Kontaktovat uživatele:
Re: [PHP] MobilniPlatby.cz [1.0.0-beta2]
Takže všechno mi funguje i s tvým nastavením.
Co se týká té chyby (Text odpovědní zprávy je přípustný pouze v případě předání informace o NEDORUČENÍ), tak ta nastává jenom v případě, že si necháš 2x (nebo vícekrát) udělat
Test potvrzení o doručení. Tzn, nahoře emuluješ správu za více než 99Kč, projde, dole dáš test potvrzení o doručení, projde, uděláš test o doručení znova už neprojde s touhle chybou. Což je ale samozřejmě v pořádku dle specifikace, protože jedna úspěšně doručená SMS nemůže být znova potvrzena.
Spoiler: zobrazit
Co se týká té chyby (Text odpovědní zprávy je přípustný pouze v případě předání informace o NEDORUČENÍ), tak ta nastává jenom v případě, že si necháš 2x (nebo vícekrát) udělat
Test potvrzení o doručení. Tzn, nahoře emuluješ správu za více než 99Kč, projde, dole dáš test potvrzení o doručení, projde, uděláš test o doručení znova už neprojde s touhle chybou. Což je ale samozřejmě v pořádku dle specifikace, protože jedna úspěšně doručená SMS nemůže být znova potvrzena.
Výběr z vlastních projektů: MinecraftServerList.cz ✔ Minecraft Extended Punishment List ✔ Killing Floor2 servery ✔
Spoiler: zobrazit
- Misso
- Příspěvky: 1201
- Věk: 27
- Registrován: 27 dub 2013, 17:20
- Reputation: 0
- Bydliště: Slovakia
- Kontaktovat uživatele:
Re: [PHP] MobilniPlatby.cz [1.0.0-beta2]
čo mám dať ako URL script ? (všetko som spravil podľa návodu)
- Mysteria
- Příspěvky: 9122
- Registrován: 26 pro 2009, 15:40
- Reputation: 7
- Bydliště: Česká republika
- Kontaktovat uživatele:
Re: [PHP] MobilniPlatby.cz [1.0.0-beta2]
No jeho adresu, tzn. tam kam jsi ho nahrál. U mě je to třeba http://mysty.cz/mp/mobilni-platby.php.
Výběr z vlastních projektů: MinecraftServerList.cz ✔ Minecraft Extended Punishment List ✔ Killing Floor2 servery ✔
Spoiler: zobrazit
- Misso
- Příspěvky: 1201
- Věk: 27
- Registrován: 27 dub 2013, 17:20
- Reputation: 0
- Bydliště: Slovakia
- Kontaktovat uživatele:
Re: [PHP] MobilniPlatby.cz [1.0.0-beta2]
Potrebujem pomoc Všetko som spravil podľa návodu.
toto je časť z mobilni-platby.php (pozerajte len na tu sms 3KC )
takto to vypadá u mobilniplatby.cz čo som si vytvoril bránu za 3KC
a toto vypíše ak idem testovať tú sms
Čo mám zle ?
toto je časť z mobilni-platby.php (pozerajte len na tu sms 3KC )
Spoiler: zobrazit
takto to vypadá u mobilniplatby.cz čo som si vytvoril bránu za 3KC
a toto vypíše ak idem testovať tú sms
Čo mám zle ?
- Mysteria
- Příspěvky: 9122
- Registrován: 26 pro 2009, 15:40
- Reputation: 7
- Bydliště: Česká republika
- Kontaktovat uživatele:
Re: [PHP] MobilniPlatby.cz [1.0.0-beta2]
Používáš webhosting, který ti cpe do webu reklamu, nejspíš to vypadá na Endoru mám pravdu? Přesuň to na nějaký webhosting, který to nedělá.
Výběr z vlastních projektů: MinecraftServerList.cz ✔ Minecraft Extended Punishment List ✔ Killing Floor2 servery ✔
Spoiler: zobrazit
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 30 hostů