[PHP] MobilniPlatby.cz [1.0.0-beta2]

Message
Autor
Uživatelský avatar
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]

#141 Příspěvekod Misso » 21 zář 2015, 20:55

zakázané na servery ? hm a ako by som sa pozrel či to je alebo nie je zakázané ?

Uživatelský avatar
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]

#142 Příspěvekod Mysteria » 22 zář 2015, 00:18

Na fóru existuje super věc, která se jmenuje vyhledávání: viewtopic.php?f=85&t=15301#rcon

Uživatelský avatar
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]

#143 Příspěvekod Misso » 22 zář 2015, 16:54

aha.. Ďakujem.

ešte mám taký problém, že ak odošlem tu skúšobnú SMS(test emulator) tak to ukáže takto...
chybaMP.png
chybaMP.png (41.35 KiB) Zobrazeno 4578 x


a v mobilni-platby.php to mám takto:
Spoiler: zobrazit

Kód: Vybrat vše

$levels = [ // Nastavení SMS levelů
   [
      'price'       => 3, // Cena SMSky
      'text'       => 'PM VIPCZ :NICK:', // Text SMSky, :NICK: bude nahrazen skutecným nickem uvedenym v SMS, musi byt unikatni v ramci vsech platebnich levelu
      'answer'    => 'Dekujeme za podporu serveru. VIP ti bude aktivovano ihned.', // 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 "" 31536000',
                        'eco give :NICK: 222000',
         'say &c:NICK: &asa stal &cVIP. &b&lDekujeme!'


a ak použijem ten test emulator tak to má na mobil poslať sms(odpovedd) ?

Uživatelský avatar
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]

#144 Příspěvekod Mysteria » 22 zář 2015, 19:02

Emulátor ti nepošle nic, od toho je to emulátor, abys nemusel na testování posílat reálné SMSky z mobilu.

Co se týká té chyby, zkopíruj mi sem tu URL adresu za Testovaná URL, protože z toho screenu se mi to přepisovat nechce.

Uživatelský avatar
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]

#145 Příspěvekod Misso » 22 zář 2015, 19:14


Uživatelský avatar
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]

#146 Příspěvekod Mysteria » 22 zář 2015, 19:51

Jo to je v pořádku, žádný neviditelný znak nebo něco tam není. Zkus tam místo tohohle napsat něco jinýho, pokud to bude dělat i tak, bych kontaktoval podporu Mobilních Plateb, co je na té odpovědi špatně, že si myslíš, že je všechno v pořádku.

Uživatelský avatar
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]

#147 Příspěvekod Misso » 24 zář 2015, 14:31

Napísal som im a odpísali mi toto: "Dobry den,
v odpovedi mate najaky nepovoleny znak hned na zacatku SMS: Dekujeme za podporu serveru. VIP ti bude aktivovano ihned.
Muze to byt nejake odradkovani, nebo neco podobneho."

nevidím tam nič takého. Skúšal som tam dať len 1 slovo alebo som to skúšal aj bez slov ale stále nič.

toto je začiatok toho skriptu:
Spoiler: zobrazit

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'       => '93.91.250.102',
      'port'       => 27140,
      'password'    => '***'
];

$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 nas prosim na gc.business2@gmail.com..'
];

$levels = [ // Nastavení SMS levelů
   [
      'price'       => 3, // Cena SMSky
      'text'       => 'PM VIPCZ :NICK:', // Text SMSky, :NICK: bude nahrazen skutecným nickem uvedenym v SMS, musi byt unikatni v ramci vsech platebnich levelu
      'answer'    => 'Dekujeme za podporu serveru. VIP ti bude aktivovano ihned.', // Odpoved na spravne 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 "" 31536000',
                        'eco give :NICK: 222000'

Uživatelský avatar
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]

#148 Příspěvekod Mysteria » 24 zář 2015, 14:44

Hoď mi sem ještě celej obsah toho souboru mobilni-platby.php (RCON heslo si samozřejmě vyhvezdičkuj), otestuju to u sebe ve spolupráci s emulátorem. :)

Uživatelský avatar
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]

#149 Příspěvekod Misso » 24 zář 2015, 15:41

Spoiler: zobrazit

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'       => '93.91.250.108',
      'port'       => 26302,
      'password'    => '***'
];

$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 nas prosim na gc.business2@gmail.com.'
];

$levels = [ // Nastavení SMS levelů
   [
      'price'       => 3, // Cena SMSky
      'text'       => 'PM VIPCZ :NICK:', // Text SMSky, :NICK: bude nahrazen skutecným nickem uvedenym v SMS, musi byt unikatni v ramci vsech platebnich levelu
      'answer'    => 'Dekujeme za podporu serveru. VIP ti bude aktivovano ihned.', // Odpoved na spravne 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 "" 31536000',
                        'eco give :NICK: 222000'
      ]
   ], [
      '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.'
      ]
   ]
];

/* 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;
   }
}

Mike8748
Příspěvky: 823
Registrován: 30 bře 2014, 10:05
Reputation: 28

Re: [PHP] MobilniPlatby.cz [1.0.0-beta2]

#150 Příspěvekod Mike8748 » 26 zář 2015, 10:01

sekvence znaků  je BOM signatura, to ti do skriptu vložil tvůj editor v kterém si skript vytvářel/upravoval. v nastavení editoru si vypni vkládání BOM signatury do souborů s kódováním UTF, soubor pozměn (jakkoliv) a znovu ulož.

nebo u souboru změn kódování např. na ISO-8859-2


Zpět na „Návody“

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 11 hostů