Server : Apache/2.4.18 (Ubuntu) System : Linux canvaswebdesign 3.13.0-71-generic #114-Ubuntu SMP Tue Dec 1 02:34:22 UTC 2015 x86_64 User : oppastar ( 1041) PHP Version : 7.0.33-0ubuntu0.16.04.15 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority, Directory : /var/www/laciasmara.com/public_html/shop/application/helpers/ |
Upload File : |
<?php function validate_required_fields($fields) { foreach ($fields as $field => $item) { $value = $item[0]; $message = $item[1]; if (empty($value)) { return [ 'status' => false, 'error' => $message ]; } } return ['status' => true]; } if (!function_exists('biteship_get_rates_by_coordinates')) { /** * Get courier rates using coordinates * * @param array $params * @return array */ function biteship_get_rates_by_coordinates($params) { $required = ['origin_latitude', 'origin_longitude', 'destination_latitude', 'destination_longitude', 'items']; biteship_validate_required_params($params, $required); $data = [ 'origin_latitude' => $params['origin_latitude'], 'origin_longitude' => $params['origin_longitude'], 'destination_latitude' => $params['destination_latitude'], 'destination_longitude' => $params['destination_longitude'], 'couriers' => isset($params['couriers']) ? $params['couriers'] : 'grab,gojek,jne', 'items' => $params['items'] ]; return biteship_make_request('rates/couriers', $data); } } if (!function_exists('biteship_get_rates_by_postal_code')) { /** * Get courier rates using postal codes * * @param array $params * @return array */ function biteship_get_rates_by_postal_code($params) { $required = ['origin_postal_code', 'destination_postal_code', 'items']; biteship_validate_required_params($params, $required); $data = [ 'origin_postal_code' => $params['origin_postal_code'], 'destination_postal_code' => $params['destination_postal_code'], 'couriers' => isset($params['couriers']) ? $params['couriers'] : 'grab,gojek,jne', 'items' => $params['items'] ]; return biteship_make_request('rates/couriers', $data); } } if (!function_exists('biteship_get_rates_by_area_id')) { /** * Get courier rates using area IDs * * @param array $params * @return array */ function biteship_get_rates_by_area_id($params) { $required = ['origin_area_id', 'destination_area_id', 'items']; biteship_validate_required_params($params, $required); $data = [ 'origin_area_id' => $params['origin_area_id'], 'destination_area_id' => $params['destination_area_id'], 'couriers' => isset($params['couriers']) ? $params['couriers'] : 'grab,gojek,jne', 'items' => $params['items'] ]; return biteship_make_request('rates/couriers', $data); } } if (!function_exists('biteship_get_rates_mixed')) { /** * Get courier rates using mixed parameters (coordinates + postal code) * * @param array $params * @return array */ function biteship_get_rates_mixed($params) { $required = ['items']; biteship_validate_required_params($params, $required); $data = [ 'couriers' => isset($params['couriers']) ? $params['couriers'] : 'grab,gojek,jne', 'items' => $params['items'] ]; // Add coordinates if provided if (isset($params['origin_latitude'])) $data['origin_latitude'] = $params['origin_latitude']; if (isset($params['origin_longitude'])) $data['origin_longitude'] = $params['origin_longitude']; if (isset($params['destination_latitude'])) $data['destination_latitude'] = $params['destination_latitude']; if (isset($params['destination_longitude'])) $data['destination_longitude'] = $params['destination_longitude']; // Add postal codes if provided if (isset($params['origin_postal_code'])) $data['origin_postal_code'] = $params['origin_postal_code']; if (isset($params['destination_postal_code'])) $data['destination_postal_code'] = $params['destination_postal_code']; // Add area IDs if provided if (isset($params['origin_area_id'])) $data['origin_area_id'] = $params['origin_area_id']; if (isset($params['destination_area_id'])) $data['destination_area_id'] = $params['destination_area_id']; return biteship_make_request('rates/couriers', $data); } } if (!function_exists('biteship_search_areas')) { /** * Search areas for getting area IDs * * @param string $input * @param string $countries * @param string $type * @return array */ function biteship_search_areas($input, $countries = 'ID', $type = 'single') { $params = [ 'countries' => $countries, 'input' => $input, 'type' => $type ]; return biteship_make_request('maps/areas?' . http_build_query($params), null, 'GET'); } } if (!function_exists('biteship_create_item')) { /** * Create item array for API request * * @param array $item_data * @return array */ function biteship_create_item($item_data) { return [ 'name' => $item_data['name'], 'length' => isset($item_data['length']) ? (int)$item_data['length'] : 10, 'width' => isset($item_data['width']) ? (int)$item_data['width'] : 10, 'height' => isset($item_data['height']) ? (int)$item_data['height'] : 10, 'weight' => isset($item_data['weight']) ? (int)$item_data['weight'] : 1000, 'value' => isset($item_data['value']) ? (int)$item_data['value'] : 0, 'quantity' => isset($item_data['quantity']) ? (int)$item_data['quantity'] : 1 ]; } } if (!function_exists('biteship_process_rates_response')) { function biteship_process_rates_response($response) { if (!isset($response['success']) || !$response['success'] || !isset($response['data']['pricing'])) { return ['success' => false, 'message' => isset($response['message']) ? $response['message'] : 'Failed to get rates']; } $processed = [ 'success' => true, 'origin' => isset($response['data']['origin']) ? $response['data']['origin'] : null, 'destination' => isset($response['data']['destination']) ? $response['data']['destination'] : null, 'rates' => [] ]; foreach ($response['data']['pricing'] as $rate) { $processed['rates'][] = [ 'courier_code' => $rate['courier_code'], 'courier_name' => $rate['courier_name'], 'service_name' => $rate['courier_service_name'], 'service_code' => $rate['courier_service_code'], 'service_type' => $rate['service_type'], 'price' => $rate['price'], 'currency' => $rate['currency'], 'duration' => $rate['duration'], 'duration_range' => $rate['shipment_duration_range'], 'duration_unit' => $rate['shipment_duration_unit'], 'description' => $rate['description'], 'available_cod' => $rate['available_for_cash_on_delivery'], 'available_insurance' => $rate['available_for_insurance'], 'type' => $rate['type'] ]; } usort($processed['rates'], function ($a, $b) { return $a['price'] <=> $b['price']; }); return $processed; } } if (!function_exists('biteship_get_rates_for_shipment_method')) { /** * Get rates formatted for shipment_method table * * @param array $params * @param bool $include_existing * @return array */ function biteship_get_rates_for_shipment_method($params, $include_existing = true) { $response = biteship_get_rates_mixed($params); $processed = biteship_process_rates_response($response); if (!$processed['success']) { return $processed; } $shipment_methods = []; foreach ($processed['rates'] as $rate) { // Map courier codes to your system $carrier_mapping = [ 'gojek' => 'gojek', 'grab' => 'grab', 'jne' => 'jne' ]; $service_mapping = [ 'instant' => 'instant', 'same_day' => 'same_day', 'reg' => 'regular', 'yes' => 'yes' ]; if (isset($carrier_mapping[$rate['courier_code']])) { $service_code = isset($service_mapping[$rate['service_code']]) ? $service_mapping[$rate['service_code']] : $rate['service_code']; $shipment_methods[] = [ 'name' => strtolower($rate['service_name']), 'carrier' => $carrier_mapping[$rate['courier_code']], 'shipper' => $rate['courier_name'], 'service_code' => $service_code, 'price' => $rate['price'], 'duration' => $rate['duration'], 'type' => $rate['type'] ]; } } return [ 'success' => true, 'data' => $shipment_methods ]; } } if (!function_exists('biteship_make_request')) { /** * Make HTTP request to Biteship API * * @param string $endpoint * @param array|null $data * @param string $method * @return array */ function biteship_make_request($endpoint, $data = null, $method = 'POST') { // Get configuration $config = biteship_get_config(); $url = $config['base_url'] . $endpoint; $headers = [ 'Authorization: ' . $config['api_key'], 'Content-Type: application/json' ]; $payload = json_encode($data, JSON_PRETTY_PRINT); log_message('debug', "[Biteship] Request to: {$url}"); log_message('debug', "[Biteship] Method: {$method}"); log_message('debug', "[Biteship] Payload: {$payload}"); $ch = curl_init(); curl_setopt_array($ch, [ CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => $config['timeout'], CURLOPT_HTTPHEADER => $headers, CURLOPT_SSL_VERIFYPEER => false, CURLOPT_SSL_VERIFYHOST => false ]); if ($method === 'POST' && $data !== null) { curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $payload); } $response = curl_exec($ch); $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); $error = curl_error($ch); log_message('debug', "[Biteship] HTTP Code: {$http_code}"); log_message('debug', "[Biteship] Raw Response: {$response}"); curl_close($ch); if ($error) { log_message('error', "[Biteship] cURL Error: {$error}"); return [ 'success' => false, 'message' => 'cURL Error: ' . $error, 'data' => null ]; } $decoded = json_decode($response, true); if ($http_code !== 200) { log_message('error', "[Biteship] Error Response: " . print_r($decoded, true)); return [ 'success' => false, 'message' => isset($decoded['message']) ? $decoded['message'] : 'HTTP Error: ' . $http_code, 'data' => $decoded ]; } return [ 'success' => isset($decoded['success']) ? $decoded['success'] : true, 'message' => isset($decoded['message']) ? $decoded['message'] : 'Success', 'data' => $decoded, 'pricing' => isset($decoded['pricing']) ? $decoded['pricing'] : [] ]; } } if (!function_exists('biteship_validate_required_params')) { /** * Validate required parameters * * @param array $params * @param array $required * @throws Exception */ function biteship_validate_required_params($params, $required) { foreach ($required as $param) { if (!isset($params[$param]) || empty($params[$param])) { throw new Exception("Required parameter '{$param}' is missing"); } } } } if (!function_exists('biteship_get_config')) { /** * Get Biteship configuration * * @param array $config * @return array */ function biteship_get_config($config = []) { return [ 'api_key' => 'biteship_live.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiTGFjaWFzbWFyYSBTaGlwcGluZyBSYXRlcyIsInVzZXJJZCI6IjY3ZmUwYTVmMGRjYzRmMDAxMjIzMGNjYyIsImlhdCI6MTc1MzkzMjYzMH0.v-ATgLLJPNv9I2QVV0w5vkwPhGNFjyc7AveRerc3NtM', 'base_url' => 'https://api.biteship.com/v1/', 'timeout' => 30 ]; } }