Merge branch 'master' of github.com:maxious/ACTBus-ui
[busui.git] / labs / myway_api.json.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
<?php
function cleanString($subject)
{
        $subject = str_replace("&nbsp;", " ", $subject);
        $subject = str_replace("&", "&amp;", $subject);
        $subject = preg_replace('/[^\r\n\t\x20-\x7E\xA0-\xFF]/', '', $subject);
        $subject = str_replace("  ", " ", $subject);
        return trim($subject);
}
$return = Array();
/*if (file_exists("mywayresponse.txt")) {
        @$fh = fopen("mywayresponse.txt", 'r');
        if ($fh) {
                $pageHTML = fread($fh, filesize("mywayresponse.txt"));
                fclose($fh);
        }
}*/
//set POST variables
$url = 'https://www.action.act.gov.au/ARTS/use_Funcs.asp';
//$url = 'http://localhost/myway.htm';
$field_mapping = Array(
        "card_number" => "SRNO",
        "DOBmonth" => "month",
        "DOBday" => "day",
        "DOByear" => "year",
        "secret_answer" => "pwrd",
        "button" => "Submit"
);
foreach (Array(
        "card_number",
        "DOBday",
        "DOBmonth",
        "DOByear"
) as $field_name) {
        if (isset($_REQUEST[$field_name])) {
                $fields[$field_name] = filter_var($_REQUEST[$field_name], FILTER_SANITIZE_NUMBER_INT);
        }
        else {
                $return["error"][] = $field_name. " parameter invalid or unspecified";
        }
}
if (isset($_REQUEST['secret_answer'])) {
        $fields['secret_answer'] = filter_var($_REQUEST['secret_answer'], FILTER_SANITIZE_STRING, Array(
                FILTER_FLAG_NO_ENCODE_QUOTES,
                FILTER_FLAG_STRIP_HIGH,
                FILTER_FLAG_STRIP_LOW
        ));
}
else {
        $return["error"][] = "secret_answer parameter invalid or unspecified";
}
$fields['button'] = 'Submit';
$fields_string = "";
//url-ify the data for the POST
foreach ($fields as $key => $value) {
        if (sizeof($value) === 0) $return['error'][] = $key . " parameter invalid or unspecified";
        $fields_string.= $field_mapping[$key] . '=' . $value . '&';
}
$fields_string = rtrim($fields_string, '&');
if (!isset($return['error'])) {
        //open connection
        $ch = curl_init();
        //set the url, number of POST vars, POST data
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_POST, count($fields));
        curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_REFERER, "https://www.action.act.gov.au/ARTS/getbalance.asp");
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_TIMEOUT, 30);
        //execute post
        $pageHTML = curl_exec($ch);
        if (curl_errno($ch)) $return["error"][] = "Network error " . curl_errno($ch) . " " . curl_error($ch) . " " . $url . $fields_string;
        //close connection
        curl_close($ch);
}
 
if (!isset($return['error'])) {
        include_once ('../lib/simple_html_dom.php');
        //print_r($pageHTML);
        $page = str_get_html($pageHTML);
        $pageAlerts = $page->find(".smartCardAlert");
        if (sizeof($pageAlerts) > 0) {
                $return['error'][] = $pageAlerts[0]->plaintext;
        }
        if (!isset($return['error'])) {
                $tableNum = 0;
                $tableName = Array(
                        1 => "myway_carddetails",
                        2 => "myway_transactions"
                );
                foreach ($page->find("table") as $table) {
                        $tableNum++;
                        $tableColumns = Array();
                        $tableColumnNum = 0;
                        foreach ($table->find("th") as $th) {
                                $tableColumns[$tableColumnNum] = cleanString($th->plaintext);
                                $tableColumnNum++;
                        }
                        //print_r($tableColumns);
                        $tableRowNum = 0;
                        foreach ($table->find("tr") as $tr) {
                                $tableColumnNum = 0;
                                foreach ($tr->find("td") as $td) {
                                        if ($tableNum == 1) {
                                                // first table has card/cardholder details
                                                $return[$tableName[$tableNum]][$tableColumns[$tableColumnNum]] = cleanString($td->plaintext);
                                        } else {
                                                // second table has transactions
                                                
                                                if ($tableColumns[$tableColumnNum] == "TX Reference No / Type") {
                                                        $return[$tableName[$tableNum]][$tableRowNum]["TX Reference No"] = substr(cleanString($td->plaintext), 0,6);
                                                        $return[$tableName[$tableNum]][$tableRowNum]["TX Type"] = substr(cleanString($td->plaintext), 7);
                                                } else {
                                                        $return[$tableName[$tableNum]][$tableRowNum][$tableColumns[$tableColumnNum]] = cleanString($td->plaintext);
                                                }
                                        }
                                        //print_r($return);
                                        $tableColumnNum++;
                                }
                                $tableRowNum++;
                        }
                }
        }
}
if (sizeof($return) == 0) {
$return['error'][] = "No data extracted from MyWay website - API may be out of date";
}
if (basename(__FILE__) == "myway_api.json.php") {
header('Content-Type: text/javascript; charset=utf8');
// header('Access-Control-Allow-Origin: http://bus.lambdacomplex.org/');
header('Access-Control-Max-Age: 3628800');
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE');
if (isset($_GET['callback'])) {
        $json = '(' . json_encode($return) . ');'; //must wrap in parens and end with semicolon
        print_r($_GET['callback'] . $json); //callback is prepended for json-p
        
}
else echo json_encode($return);
}
?>