Pull to refresh

Проверка счета Киевстар модема в Linux

PHP *
Навеяно этим топиком. Однажды у меня случился переезд и на новом месте проживания и мне потребовался срочно интернет. Насмотревшись рекламы Киевстара модем за 199 грн, я приобрел данный набор. Настройка в Ubuntu через NetworkManager не потребовало никаких усилий. Но мне не хватало проверки денег на счету (не через браузер). Представляю вам скрипт, который мне помог это решить.



<?php

function decodePDU($in) {
 $b = 0; $d = 0;
 $out = "";
 foreach (str_split($in, 2) as $ss) {
  $byte = hexdec($ss);
  $c = (($byte & ((1 << 7-$d)-1)) << $d) | $b;
  $b = $byte >> (7-$d);
  $out .= chr($c);
  $d++;
  if ($d == 7) {
   $out .= chr($b);
   $d = 0; $b = 0;
  }
 }
 return $out;
}

function encodePDU($in) {
 $out = "";
 for ($i = 0; $i < strlen($in); $i++) {
  $t = $i%8+1;
  if ($t == 8)
   continue;
  $c = ord($in[$i])>>($i%8);
  $oc = $c;
  $b = ord($in[$i+1]) & ((1 << $t)-1);
  $c = ($b << (8-$t)) | $c;
  $out .= strtoupper(str_pad(dechex($c), 2, '0', STR_PAD_LEFT));
 }
 return $out;
}

if (!isset($argv) || !$argv[1]){
 die("Neet number of service. Sample: <script>.php *111#\n");
}

$number = $argv[1];

print "Number of service: $number \n";

$f = fopen ("/dev/ttyUSB2", "rw+");
fputs($f, "AT+CUSD=1,".encodePDU($number).",15\r\n");

while ($s = fgets($f)) {
 if (substr($s, 0, 5) == "+CUSD") {
  $s = decodePDU(substr(trim($s), 10, -3));
  echo $s."\n";
  if (strpos($s, "1 - Dalee") !== false) {
   fputs($f, "AT+CUSD=1,".encodePDU("1").",15\r\n");
  }
  else
   break;
 }
}

fclose($f);

?>


* This source code was highlighted with Source Code Highlighter.


Пример использования:

$ php huawei_e1550.php *111#
Number of service: *111#
Na rahunku: 9.62 grn. Nomer die do 15/06/11. Bonusy: 0.00 grn; 0.0 Kbytes
$ php huawei_e1550.php *121#
Number of service: *121#
Paket Vil'nyj Internet: na rahunku 0.000 Mb, termin dii do 01.01.0001


Возможно скрипт подойдет не только для Киевстар модема (для других не тестировался).
Также хочу заметить, что в Ubuntu 10.4 чтобы модем работал в режиме модема (а не как флешка), потребуется поставить пакет usb-modeswitch.

Всем спасибо за внимание.
Tags:
Hubs:
Total votes 55: ↑40 and ↓15 +25
Views 5.7K
Comments Comments 37