https://t.me/RX1948
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 :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /var/www/laciasmara.com/public_html/shop/application/helpers/biteship_helper.php
<?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
        ];
    }
}

https://t.me/RX1948 - 2025