1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
delivery_dhl_usa.php
См. документацию.
1<?
2/**********************************************************************
3Delivery services for DHL USA delivery service (http://www.dhl-usa.com/)
4It uses on-line calculator. Calculation only from USA.
5**********************************************************************/
6
8
9IncludeModuleLangFile($_SERVER["DOCUMENT_ROOT"].'/bitrix/modules/sale/delivery/delivery_dhl_usa.php');
10
11define('DELIVERY_DHL_USA_WRITE_LOG', 0); // flag 'write to log'. use CDeliveryDHLUSA::__WriteToLog() for logging.
12define('DELIVERY_DHL_USA_CACHE_LIFETIME', 2592000); // cache lifetime - 30 days (60*60*24*30)
13
14define('DELIVERY_DHL_USA_PACKAGE_TYPE_DEFAULT', 'CP'); // default category for delivered goods
15
16define('DELIVERY_DHL_USA_SERVER', 'www.dhl-usa.com'); // server name to send data
17define('DELIVERY_DHL_USA_SERVER_PORT', 80); // server port
18define('DELIVERY_DHL_USA_SERVER_PAGE', '/ratecalculator/HandlerServlet'); // server page url
19define('DELIVERY_DHL_USA_SERVER_METHOD', 'POST'); // data send method
20
21define('DELIVERY_DHL_USA_VALUE_CHECK_STRING', 'Quote results'); // first check string - to determine whether delivery price is in response
22define(
23 'DELIVERY_DHL_USA_VALUE_CHECK_REGEXP',
24 '/\$([0-9\.\s]+)<\/a>/i'
25); // second check string - regexp to parse final price from response
27define (
28 'DELIVERY_DHL_USA_TIME_CHECK_REGEXP',
29 '/<td><div class="pL5">([0-9]+)\sdays<\/div><\/td>/i'
30);
31
33{
34 public static function Init()
35 {
36 $arReturn = array(
37 "DEPRECATED" => "Y",
38 /* Basic description */
39 "SID" => "dhlusa",
40 "NAME" => GetMessage('SALE_DH_DHL_USA_NAME'),
41 "DESCRIPTION" => GetMessage('SALE_DH_DHL_USA_DESCRIPTION'),
42 "DESCRIPTION_INNER" => GetMessage('SALE_DH_DHL_USA_DESCRIPTION_INNER'),
43 "BASE_CURRENCY" => 'USD',
44
45 "HANDLER" => __FILE__,
46
47 /* Handler methods */
48 "DBGETSETTINGS" => array("CDeliveryDHLUSA", "GetSettings"),
49 "DBSETSETTINGS" => array("CDeliveryDHLUSA", "SetSettings"),
50 "GETCONFIG" => array("CDeliveryDHLUSA", "GetConfig"),
51
52 "COMPABILITY" => array("CDeliveryDHLUSA", "Compability"),
53 "CALCULATOR" => array("CDeliveryDHLUSA", "Calculate"),
54
55 /* List of delivery profiles */
56 "PROFILES" => array(
57 "simple" => array(
58 "TITLE" => GetMessage("SALE_DH_DHL_USA_PROFILE_TITLE"),
59 "DESCRIPTION" => GetMessage("SALE_DH_DHL_USA_PROFILE_DESCRIPTION"),
60
61 "RESTRICTIONS_WEIGHT" => array(0, CSaleMeasure::Convert(150, "LBS", "G")),
62 "RESTRICTIONS_SUM" => array(0),
63 ),
64 ),
65 );
66
68 return $arReturn;
69 }
70
71 public static function GetConfig()
72 {
73 $arConfig = array(
74 "CONFIG_GROUPS" => array(
75 "delivery" => GetMessage('SALE_DH_DHL_USA_CONFIG_DELIVERY_TITLE'),
76 ),
77
78 "CONFIG" => array(
79 "package_type" => array(
80 "TYPE" => "DROPDOWN",
82 "TITLE" => GetMessage('SALE_DH_DHL_USA_CONFIG_PACKAGE_TYPE'),
83 "GROUP" => "delivery",
84 "VALUES" => array(
85 'EE' => GetMessage('SALE_DH_DHL_USA_CONFIG_PACKAGE_TYPE_EE'),
86 'OD' => GetMessage('SALE_DH_DHL_USA_CONFIG_PACKAGE_TYPE_OD'),
87 'CP' => GetMessage('SALE_DH_DHL_USA_CONFIG_PACKAGE_TYPE_CP'),
88 ),
89 ),
90 ),
91 );
93 return $arConfig;
94 }
95
96 public static function GetSettings($strSettings)
97 {
98 return unserialize($strSettings, ['allowed_classes' => false]);
99 }
100
101 public static function SetSettings($arSettings)
103 return serialize($arSettings);
104 }
105
106 public static function __GetLocation($location_id)
107 {
109
110 $arLocation = CSaleLocation::GetByID($location_id, 'en');
111
112 $dbZipList = CSaleLocation::GetLocationZIP($location_id);
113
114 while ($arZip = $dbZipList->Fetch())
115 $arLocation['ZIP_LIST'][] = $arZip['ZIP'];
116
117 if (!is_array($arDHLUSACountryList))
118 {
119 require('dhl_usa/country.php');
120 }
121
122 $arLocation['COUNTRY_DHLUSA'] = $arDHLUSACountryList[mb_strtoupper($arLocation['COUNTRY_NAME'])];
124 return $arLocation;
125 }
126
127 public static function Calculate($profile, $arConfig, $arOrder, $STEP, $TEMP = false)
128 {
129 $arLocationFrom = CDeliveryDHLUSA::__GetLocation($arOrder['LOCATION_FROM']);
130 $arLocationTo = CDeliveryDHLUSA::__GetLocation($arOrder['LOCATION_TO']);
131
132 $location_from_zip = COption::GetOptionString('sale', 'location_zip');
133 if ($location_from_zip) $arLocationFrom['ZIP_LIST'] = array($location_from_zip);
134
135 $arOrder["WEIGHT"] = CSaleMeasure::Convert($arOrder["WEIGHT"], "G", "LBS");
136 if ($arOrder["WEIGHT"] <= 0) $arOrder["WEIGHT"] = 0.1; // weight must not be null - let it be 1 gramm
137
138 $cache_id = "dhl_usa"."|".$arConfig["category"]['VALUE']."|".$arOrder["LOCATION_FROM"]."|".$location_from_zip."|".$arOrder["LOCATION_TO"]."|".intval($arOrder['WEIGHT']);
139
140 $obCache = new CPHPCache();
141
142 if ($obCache->InitCache(DELIVERY_DHL_USA_CACHE_LIFETIME, $cache_id, "/"))
143 {
144 // cache found
145 $vars = $obCache->GetVars();
146 $result = $vars["RESULT"];
147 $transit_time = $vars["TRANSIT"];
148
149 return array(
150 "RESULT" => "OK",
151 "VALUE" => $result,
152 "TRANSIT" => $transit_time,
153 );
154 }
155
156 // format HTTP query request data
157 $arQuery = array(
158 'userStatus' => 'NON_AUTHENTICATED_USER',
159 'customerType' => 'P',
160 'ratesType' => 'book',
161 'rateSuppressed' => 'N',
162 'CLIENT' => 'CLASS_NAME_P',
163 'CALLING_JSP' => '/jsp/ratesQuery.jsp',
164 'INTGRTDSURVEY' => 'false',
165 'totalPieces' => '1',
166 'packagesPerMonth' => '',
167 );
168
169 $arQuery['originCountryCode'] = 'US';
170 $arQuery['originZip'] = $arLocationFrom['ZIP_LIST'][0];
171
172 $arQuery['destinationCountry'] = $arLocationTo['COUNTRY_DHLUSA'];
173 $arQuery['destinationCountryName'] = $arLocationTo['COUNTRY_NAME'];
174 $arQuery['destinationCity'] = $arLocationTo['CITY_NAME'];
175 $arQuery['destinationZip'] = $arLocationTo['ZIP_LIST'][0];
176
177 $timestamp = strtotime(date('Y-m-d'));
178 $timestamp = strtotime('+1 day', $timestamp);
179
180 // holidays list - http://www.dhl-usa.com/USSvcs/USSvcsHDay.asp?nav=FindServInfo/USHol
181 $y = date('Y');
182 $arHolidaysList = array(
183 strtotime($y.'-01-01'),
184 strtotime($y.'-05-28'),
185 strtotime($y.'-06-04'),
186 strtotime($y.'-09-03'),
187 strtotime($y.'-11-22'),
188 strtotime($y.'-12-25')
189 );
190
191 while (date('N', $timestamp) > 5 || in_array($timestamp, $arHolidaysList))
192 $timestamp += 86400;
193
194 $arQuery['shipDate'] = date('d F, Y', $timestamp);
195
196 $arQuery['pkgType'] = $arConfig['package_type']['VALUE'];
197 $arQuery['packagingType'] = $arConfig['package_type']['VALUE'];
198
199 $arQuery['packageWeight'] = $arOrder['WEIGHT'];
200
201 $arQuery['dmnLength'] = '';
202 $arQuery['dmnWidth'] = '';
203 $arQuery['dmnHeight'] = '';
204
205 $arQuery['dutiableFlag'] = 'N'; // !!!!!!
206
207 foreach ($arQuery as $key => $value) $arQuery[$key] = urlencode($key).'='.urlencode($value);
208
209 CDeliveryDHLUSA::__Write2Log(print_r($arQuery, true));
210 CDeliveryDHLUSA::__Write2Log(implode('&', $arQuery));
211 // get data from server
216 implode("&", $arQuery),
217 $error_number = 0,
218 $error_text = "",
220 );
221
223
224 if ($data == '')
225 {
226 return array(
227 "RESULT" => "ERROR",
228 "TEXT" => GetMessage('SALE_DH_DHL_USA_ERROR_CONNECT'),
229 );
230 }
231
233 {
234 // first check string found
235
236 if(preg_match(
238 $data,
240 ))
241 {
242 $obCache->StartDataCache();
243 // final price found
244 $result = $matches[1];
245 $result = preg_replace('/\s/', '', $result);
246 $result = str_replace(',', '.', $result);
247 $result = doubleval($result);
248
249 $matches = array();
250 $transit_time = 0;
251 if(preg_match(
253 $data,
255 ))
256 {
257 $transit_time = intval($matches[1]);
258 }
259
260 $obCache->EndDataCache(
261 array(
262 "RESULT" => $result,
263 "TRANSIT" => $transit_time,
264 )
265 );
266
267 return array(
268 "RESULT" => "OK",
269 "VALUE" => $result,
270 "TRANSIT" => $transit_time,
271 );
272 }
273 else
274 {
275 return array(
276 "RESULT" => "ERROR",
277 "TEXT" => GetMessage('SALE_DH_DHL_USA_ERROR_RESPONSE'),
278 );
279 }
280 }
281
282 return array(
283 "RESULT" => "ERROR",
284 "TEXT" => GetMessage('SALE_DH_DHL_USA_ERROR_RESPONSE'),
285 );
286 }
287
288 public static function Compability($arOrder)
289 {
290 $arLocationFrom = CDeliveryDHLUSA::__GetLocation($arOrder['LOCATION_FROM']);
291
292 if ($arLocationFrom['COUNTRY_DHLUSA'] != 'US') return array();
294 return array('simple');
295 }
296
297 public static function __Write2Log($data)
298 {
299 if (defined('DELIVERY_DHL_USA_WRITE_LOG') && DELIVERY_DHL_USA_WRITE_LOG === 1)
300 {
301 $fp = fopen(__DIR__."/dhl_usa.log", "a");
302 fwrite($fp, "\r\n==========================================\r\n");
303 fwrite($fp, $data);
304 fclose($fp);
305 }
306 }
307}
308
309AddEventHandler("sale", "onSaleDeliveryHandlersBuildList", array('CDeliveryDHLUSA', 'Init'));
310?>
static GetLocationZIP($location)
Определения location.php:2761
static __Write2Log($data)
Определения delivery_dhl_usa.php:293
static Calculate($profile, $arConfig, $arOrder, $STEP, $TEMP=false)
Определения delivery_dhl_usa.php:123
static SetSettings($arSettings)
Определения delivery_dhl_usa.php:97
static __GetLocation($location_id)
Определения delivery_dhl_usa.php:102
static GetConfig()
Определения delivery_dhl_usa.php:67
static GetSettings($strSettings)
Определения delivery_dhl_usa.php:92
static Init()
Определения delivery_dhl_usa.php:30
static Compability($arOrder)
Определения delivery_dhl_usa.php:284
static IncludeModule($module_name)
Определения module.php:151
static GetByID($primary, $strLang=LANGUAGE_ID)
Определения location.php:118
static Convert($value, $measureFrom, $measureTo="G")
Определения measurement.php:37
$data['IS_AVAILABLE']
Определения .description.php:13
const DELIVERY_DHL_USA_SERVER
Определения delivery_dhl_usa.php:16
const DELIVERY_DHL_USA_CACHE_LIFETIME
Определения delivery_dhl_usa.php:12
const DELIVERY_DHL_USA_SERVER_PAGE
Определения delivery_dhl_usa.php:18
const DELIVERY_DHL_USA_SERVER_METHOD
Определения delivery_dhl_usa.php:19
const DELIVERY_DHL_USA_WRITE_LOG
Определения delivery_dhl_usa.php:11
const DELIVERY_DHL_USA_VALUE_CHECK_STRING
Определения delivery_dhl_usa.php:21
const DELIVERY_DHL_USA_TIME_CHECK_REGEXP
Определения delivery_dhl_usa.php:25
const DELIVERY_DHL_USA_VALUE_CHECK_REGEXP
Определения delivery_dhl_usa.php:22
const DELIVERY_DHL_USA_PACKAGE_TYPE_DEFAULT
Определения delivery_dhl_usa.php:14
const DELIVERY_DHL_USA_SERVER_PORT
Определения delivery_dhl_usa.php:17
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$result
Определения get_property_values.php:14
$_SERVER["DOCUMENT_ROOT"]
Определения cron_frame.php:9
$STEP
Определения csv_new_setup.php:23
QueryGetData($SITE, $PORT, $PATH, $QUERY_STR, &$errno, &$errstr, $sMethod="GET", $sProto="", $sContentType='N')
Определения tools.php:4287
AddEventHandler($FROM_MODULE_ID, $MESSAGE_ID, $CALLBACK, $SORT=100, $FULL_PATH=false)
Определения tools.php:5165
IncludeModuleLangFile($filepath, $lang=false, $bReturnArray=false)
Определения tools.php:3778
GetMessage($name, $aReplace=null)
Определения tools.php:3397
if(empty($signedUserToken)) $key
Определения quickway.php:257
$arDHLUSACountryList
Определения country.php:2
$arLocation['REGION_NAME']
Определения options.php:2800
$matches
Определения index.php:22