Advertisement
justhrun

curl->mandiri-cron.php

Jul 29th, 2014
931
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 10.76 KB | None | 0 0
  1. #!/usr/local/bin/php
  2. <?php
  3. /*
  4.     2014-05-21: v2.5
  5.     - kalo terjadi perubahan posisi transaksi di bank, maka saldo jd kacau
  6.     2014-05-20: v2.2
  7.     - width keterangan mandiri ada yg sampe 107char, table harus di-ALTER
  8.     - keterangan kadang ada special char, hrs dimanipulasi
  9.     2014-05-19: v2.1
  10.     - ganti algo crosschek
  11.     - masiiih aja ada yg double
  12.     2014-05-19: v2.0
  13.     - design ala bca
  14.     - gotcha....i got u
  15.     - gk ada saldo harian: HARUS diakalin, HARUS BISA
  16.     - embeeerrr... style table-nya lbh ribed
  17.     - penasaran, pake php+curl ala bca
  18.     2014-05-18 : v1.1
  19.     - cross-match dgn table order -> email
  20.     - detect & clean double entry ? gmn caranya yach? key-nya susah
  21. */
  22.  
  23.         $MYSQL=false;
  24. // mandatory utk php 4.5 and above
  25.         date_default_timezone_set('Asia/Jakarta');
  26.  
  27. // utk manipulasi & validasi tanggal
  28. // mandiri gk perlu manipulasi krn udah dd/mm/yyyy
  29. //      define('JANUARI',1);
  30. //      define('DESEMBER',12);
  31.  
  32.         $pastday = 7;           // cek mutasi dari $pastday hari lalu sampai hari ini
  33.         $isFirst = true;
  34.  
  35. // userid & PIN mandiri & Account
  36.         define('USERID','blablaba99');
  37.         define('PASSWD','123456');
  38.         define('ACCNUM','1234567890123');
  39.  
  40. if($MYSQL) {
  41. // config mysql
  42.         define('DB_HOSTNAME', 'localhost');
  43.         define('DB_USERNAME', 'userdbnya');
  44.         define('DB_PASSWORD', 'passwdnya');
  45.         define('DB_DATABASE', 'dbnamenya');
  46.         $mysqlId = mysql_connect(DB_HOSTNAME,DB_USERNAME,DB_PASSWORD);
  47.         mysql_select_db(DB_DATABASE,$mysqlId);
  48.  
  49. // baca dulu last_id di table
  50.         $result = mysql_query("select max(id) from `mbank_mandiri`",$mysqlId);
  51.         list($last_id) = mysql_fetch_row($result);
  52.         mysql_free_result($result);
  53.  
  54. // kalo last_id positif => table udah ada isinya
  55. // baca dulu saldo terakhir
  56.         $last_saldo = 0;
  57.         if($last_id) {
  58.                 $result = mysql_query("SELECT saldo from mbank_mandiri WHERE id='$last_id'",$mysqlId);
  59.                 list($last_saldo) = mysql_fetch_row($result);
  60.                 mysql_free_result($result);
  61.                 $isFirst = false;
  62.         }
  63. }
  64.  
  65. // penetapan tanggal from-to mutasi
  66.         if($isFirst) {          // kalo table msh kosong, ambil dr tanggal 1
  67.                 $from_date = date("Y-m-01");
  68.         } else {
  69.                 $from_date = date("Y-m-d",strtotime("-$pastday day"));
  70.         }
  71.         $to_date = date("Y-m-d");
  72.  
  73. //      ###### ATO BATAS MUTASI DITETAPKAN SECARA MANUAL
  74. //      $from_date = "2014-04-10";
  75. //      $to_date = "2014-04-20";
  76.  
  77. // load Class
  78.         include('mandiri.class.php');
  79.         $mandiri = new bankMandiri;
  80.         $mandiri->userid = USERID;
  81.         $mandiri->password = PASSWD;
  82.         $mandiri->rekening = ACCNUM;
  83.  
  84.         $soawal = 0;
  85.         $soakhir = 0;
  86.         $insert = 0;
  87.         $isbank = true;
  88.         $TMPTAB = "mandiri_swap";
  89.  
  90. // ################ START ACTION ################# \\
  91. if($mandiri->login()){
  92.         $result = $mandiri->mutasi($from_date,$to_date);
  93.         $mandiri->logout();
  94.  
  95.         $soawal = $result['soawal'];
  96.         $mutasi = $result['mutasi'];
  97.         $soakhir= $result['soakhir'];
  98.  
  99.   if($MYSQL) {
  100.         $nrow = count($mutasi);
  101.         if(!$nrow) {    // gk dpt hasil mutasi
  102.                 mysql_query("INSERT INTO mbank_logman SET tanggal=NOW(), keterangan='Hasil Check Mutasi Zero/Error'",$mysqlId);
  103.                 $isbank = false;
  104.         }
  105.  
  106.         if($isbank) {
  107.                 // cek perubahan saldo
  108.                 if(floor($soakhir) == floor($last_saldo)) {             // saldo gk berubah
  109.                         mysql_query("INSERT INTO mbank_logman SET tanggal=NOW(),keterangan='Tidak Ada Perubahan Saldo'",$mysqlId);
  110.                         $isbank = false;
  111.                 }
  112.         }
  113.  
  114.         if($isbank) {
  115.                 $saldo = $soawal;
  116.                 $query = "CREATE TEMPORARY TABLE $TMPTAB LIKE mbank_mandiri";
  117.                 mysql_query($query,$mysqlId);
  118.                 $query = "INSERT INTO $TMPTAB SELECT * FROM mbank_mandiri WHERE tanggal >= '$from_date'";
  119.                 mysql_query($query,$mysqlId);
  120.                 // Lets Go Bussiness
  121.                 for($i=0;$i<count($mutasi);$i++) {
  122.                         $tgl            = $mutasi[$i]['tanggal'];
  123.                         $keterangan = $mutasi[$i]['keterangan'];
  124.                         $debet          = $mutasi[$i]['debet'];
  125.                         $credit         = $mutasi[$i]['credit'];
  126.                         $saldo          += ($credit - $debet);
  127.                         $keterangan = CheckWord($keterangan);
  128.  
  129.                         // krn format tanggal mandiri dd/mm/yyyy maka hrs dimanipulasi agan compat dgn mysql
  130.                         $tgl = str_replace("/","-",$tgl);
  131.                         $tanggal = date("Y-m-d",strtotime($tgl));
  132.  
  133.                         if($isFirst) {          // kalo table kosong gk usah check, langsung insert aja
  134.                                 InsertDATA($tanggal,$keterangan,$debet,$credit,$saldo,$mysqlId);
  135.                                 $insert++;
  136.                         } else {
  137.                                 // cek dulu, agar gk ada data ganda
  138.                                 $query = "SELECT id FROM $TMPTAB WHERE tanggal='$tanggal' AND keterangan='$keterangan' AND debet='$debet' AND credit='$credit'";
  139.                                 $result = mysql_query($query,$mysqlId);
  140.                                 if($result) {
  141.                                         if(mysql_num_rows($result)) {   // udah ada, skip
  142.                                                 mysql_free_result($result);
  143.                                         } else {
  144.                                                 InsertDATA($tanggal,$keterangan,$debet,$credit,$saldo,$mysqlId);
  145.                                                 $insert++;
  146.                                         }
  147.                                 } else {
  148.                                         InsertDATA($tanggal,$keterangan,$debet,$credit,$saldo,$mysqlId);
  149.                                         $insert++;
  150.                                 }
  151.  
  152.                         }
  153.  
  154.                 }
  155.  
  156.                 mysql_query("INSERT INTO mbank_logman SET tanggal=NOW(), keterangan='Sukses dengan $insert INSERT'",$mysqlId);
  157.                 mysql_query("DROP TABLE $TMPTAB",$mysqlId);
  158.                 if(!$isFirst) {
  159.                         ReCheckDouble($from_date,$mysqlId);
  160.                         KoreksiSaldo($TMPTAB,$soakhir,$from_date,$mysqlId);
  161.                 }
  162.         }
  163.         mysql_close($mysqlId);
  164.  
  165.   } else {
  166.         print_r($result);
  167. //      print_r($mutasi);
  168.   }
  169.  
  170. } else {                                // ERROR LOGIN
  171.         if($MYSQL) {
  172.                 mysql_query("INSERT INTO mbank_logman SET tanggal=NOW(), keterangan='Error Login Internet Banking / Wait 10mnt'",$mysqlId);
  173.                 mysql_close($mysqlId);
  174.         } else {
  175.                 echo "Error Login Internet Banking / Wait 10mnt\n";
  176.         }
  177. }
  178.  
  179. // ############## PROGRAM EXIT HERE ###############
  180.  
  181. function CheckWord($str) {
  182.     $xtr = trim($str);
  183.     $xtr = str_replace("  "," ",$xtr);
  184.         $xtr = str_replace("'","&rsquo;",$xtr);
  185.     $xtr = str_replace("/ ","/",$xtr);
  186.     $xtr = str_replace(" /","/",$xtr);
  187.     return $xtr;
  188. }
  189.  
  190. function InsertDATA($tgl,$ket,$dbt,$cdt,$sal,$mysqlId) {
  191.         // id tanggal keterangan debet credit saldo retreived
  192.         $query="INSERT INTO mbank_mandiri SET tanggal='$tgl',keterangan='$ket',debet='$dbt',credit='$cdt',saldo='$sal',retreived=NOW()";
  193.         mysql_query($query,$mysqlId);
  194. }
  195.  
  196. function KoreksiSaldo($table_name,$soakhir,$from_date,$mysqlId) {
  197.         $result = mysql_query("SELECT max(id) FROM mbank_mandiri",$mysqlId);
  198.         list($id) = mysql_fetch_row($result);
  199.         mysql_free_result($result);
  200.  
  201.         $result = mysql_query("SELECT  saldo  FROM mbank_mandiri WHERE id='$id'",$mysqlId);
  202.         list($sobuku) = mysql_fetch_row($result);
  203.         mysql_free_result($result);
  204.  
  205.         if(floor($sobuku) == floor($soakhir)) { // saldo udah match
  206.                 return;
  207.         }
  208.  
  209.         $query = "CREATE TEMPORARY TABLE $table_name LIKE mbank_mandiri";
  210.         mysql_query($query,$mysqlId);
  211.         $query = "INSERT INTO $table_name SELECT * FROM mbank_mandiri WHERE tanggal>='$from_date'";
  212.         mysql_query($query,$mysqlId);
  213.  
  214.         $query = "SELECT id,debet,credit,saldo FROM $table_name order by id";
  215.         $result = mysql_query($query,$mysqlId);
  216.         $i = 0;
  217.         $akhir = 0;
  218.         while(list($id,$debet,$credit,$saldo) = mysql_fetch_row($result)) {
  219.                 if(!$i) {
  220.                         $akhir = $saldo;
  221.                 } else {
  222.                         $akhir += ($credit - $debet);
  223.                         if( floor($saldo) != floor($akhir) ) {
  224.                                 mysql_query("UPDATE mbank_mandiri SET saldo='$akhir' WHERE id='$id'",$mysqlId);
  225.                         }
  226.                 }
  227.                 $i++;
  228.         }
  229.         mysql_free_result($result);
  230.         mysql_query("DROP TABLE " $table_name",$mysqlId);
  231. }
  232.  
  233. function ReCheckDouble($from_date,$mysqlId) {
  234.        $TMP1TAB = "mbank_swapx";
  235.        $TMP2TAB = "mbank_swapy";
  236.        $query = "CREATE TEMPORARY TABLE $TMP1TAB LIKE mbank_mandiri";
  237.        mysql_query($query,$mysqlId);
  238.        $query = "CREATE TEMPORARY TABLE $TMP2TAB LIKE mbank_mandiri";
  239.        mysql_query($query,$mysqlId);
  240.  
  241.        $query = "INSERT INTO $TMP1TAB SELECT * FROM mbank_mandiri WHERE tanggal >= SUBDATE('$from_date', INTERVAL 3 DAY)";
  242.        mysql_query($query,$mysqlId);
  243.        $query = "INSERT INTO $TMP2TAB SELECT * FROM $TMP1TAB";
  244.        mysql_query($query,$mysqlId);
  245.  
  246.        $query = "SELECT count(*) AS hitung,concat(date_format(tanggal,'%Y%m%d'),floor(saldo)) AS keynya FROM $TMP1TAB GROUP BY keynya";
  247.        $result = mysql_query($query,$mysqlId);
  248.        while(list($hitung,$keynya) = mysql_fetch_row($result)) {
  249.                if($hitung>1) {
  250.                        $query = "SELECT id FROM $TMP2TAB WHERE concat(date_format(tanggal,'%Y%m%d'),floor(saldo)) = '$keynya' order by id asc";
  251.                        $res = mysql_query($query,$mysqlId);
  252.                        $i = 0;
  253.                        while(list($id) = mysql_fetch_row($res)) {
  254.                                if($i>0) {
  255.                                        mysql_query("DELETE FROM mbank_mandiri WHERE id='$id'",$mysqlId);
  256.                                }
  257.                                $i++;
  258.                        }
  259.                        mysql_free_result($res);
  260.                }
  261.        }
  262.        mysql_free_result($result);
  263.        $query = "DROP TABLE $TMP1TAB, $TMP2TAB";
  264.        mysql_query($query,$mysqlId);
  265. }
  266. // ############################# EOS() ###############################
  267. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement