cfgReadChar('system.oauth2_token'); $encryptionAlg = $savvyext->cfgReadChar('encryption.algorithm'); $encryptionKey = $savvyext->cfgReadChar('encryption.key'); $encryptionIV = $savvyext->cfgReadChar('encryption.iv'); $baseURL = $savvyext->cfgReadChar('system.api_url'); $db_host = $savvyext->cfgReadChar('database.host'); $db_name = $savvyext->cfgReadChar('database.name'); $db_user = $savvyext->cfgReadChar('database.user'); $db_pass = $savvyext->cfgReadChar('database.pass'); $db_port = $savvyext->cfgReadLong('database.port'); $connstr = "host=${db_host} port=${db_port} dbname=${db_name} user=${db_user} password=${db_pass}"; $conn = pg_connect($connstr); $country = 'SG'; $member_id = 0; // ComfortDelGro & Gojek $transport_providers = [4,5]; // Grab //$transport_providers = [3]; // Step 1: Load batch files $origins = load_batch_file("batch_quote_file_origins.txt"); $destinations = load_batch_file("batch_quote_file_destinations.txt"); // Step 2: Geocode addresses $newOrigins = geocode_addresses($origins); $newDestinations = geocode_addresses($destinations); // Step 3: Schedule quotes $checkQuotes = []; QuoteApi::$job_name = $job_name; foreach ($newOrigins as $origin_id=>$origin) { foreach ($newDestinations as $destination_id=>$destination) { foreach ($transport_providers as $transport_provider) { $q = "SELECT * FROM quotes "; $q.= " WHERE location_start_id=${origin_id} AND location_end_id=${destination_id} "; $q.= " AND transport_provider_id=${transport_provider} AND cost>0 "; $q.= " ORDER BY completed DESC LIMIT 1"; $r = pg_query($conn, $q); if ($r && pg_num_rows($r) && $f=pg_fetch_assoc($r)) { echo "[".date("Y-m-d H:i:s")."] Quote ".$f["cost"]." already exists ID #".$f["id"]."\n"; continue; } list($res,$id) = QuoteApi::schedule_quote($origin,$destination,$country,$member_id,$transport_provider); if ($res>0) { if ($res==2) { echo "[".date("Y-m-d H:i:s")."] Quote complete! ID #${id}\n"; } else if ($res==1) { echo "[".date("Y-m-d H:i:s")."] Scheduled quote ID #${id}\n"; $checkQuotes[] = $id; } else { echo "[".date("Y-m-d H:i:s")."] Unexpected result for ID #${id} ($res)\n"; } } else { echo "[".date("Y-m-d H:i:s")."] schedule_quote failed: ${res}.\n"; echo "[".date("Y-m-d H:i:s")."] $origin,$destination,$country,$member_id,$transport_provider\n"; } } } } // Step 4: Check quotes foreach ($checkQuotes as $id) { list($res,$cost) = QuoteApi::check_quote($id); echo "[".date("Y-m-d H:i:s")."] Checking quote ID #${id} ($res) cost=${cost}\n"; } function load_batch_file($filename) { $results = []; $fn = fopen($filename,"r"); while(! feof($fn)) { $result = fgets($fn); $results[] = trim($result); } fclose($fn); return $results; } function geocode_addresses($addresses) { $geocodedAddresses = []; foreach ($addresses as $address) { $params = [ "address" => $address, "member_id" => 0, "country" => "SG" ]; $input = http_build_query($params); list($payload,$decrypted,$result,$body) = main_api_get('/trips/api/geocode/?',$input); if (is_array($payload) && array_key_exists('geocode',$payload) && is_array($payload['geocode']) && array_key_exists('id',$payload['geocode']) && $payload['geocode']['id']>0) { $geocodedAddresses[$payload['geocode']['id']] = $payload['geocode']['address']; } } return $geocodedAddresses; } function main_api_get($endpoint,$input) { global $baseURL, $encryptionAlg, $encryptionKey, $encryptionIV, $httpAuthToken; if ($endpoint!="" && $input!="") { // minimal sanity sleep(1); $url = $baseURL . $endpoint . $input; $ch = curl_init($url); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_VERBOSE, false); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', 'Authorization: Server-Token ' . $httpAuthToken, "client_id: BATCH" ) ); $body = curl_exec($ch); $result = json_decode($body,true); $decrypted = openssl_decrypt( hex2bin( $result['payload'] ), $encryptionAlg, $encryptionKey, OPENSSL_RAW_DATA, $encryptionIV ); $payload = json_decode($decrypted, true); return [$payload,$decrypted,$result,$body]; } return [NULL,NULL,NULL,NULL]; } echo "[".date("Y-m-d H:i:s")."] ".$job_name." job complete.\n";