|
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,tiki',
'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,tiki',
'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,tiki',
'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,tiki',
'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
];
}
}