在使用之前,您需要先去trackmore官方网站申请API_KEY,传送门:TrackMore

html

  1. <script type="text/javascript" src="/plugins/TrackMore/trackmore.js"></script>
  2. <a href="javascript:;" onclick="trackmore.query('运单号','快递名称')">TrackMore</a>
  3. <!--
  4. 快递名称参见cfg.php,用于映射快递公司代码
  5. -->
  6. <div id="queryContext" class="flo" style="display: none;"></div>
  7. <div id="queryContextbg" style="display: none;"></div>

trackmore.js

  1. var trackmore = {
  2. init:function(){
  3. /*加载样式表*/
  4. var url='/plugins/TrackMore/skin/style.css?'+new Date().getTime();
  5. var link = document.createElement("link");
  6. link.rel = "stylesheet";
  7. link.type = "text/css";
  8. link.href = url;
  9. document.getElementsByTagName("head")[0].appendChild(link);
  10. var csstype = "flo";
  11. /*
  12. fix 固定 flo 浮动
  13. 默认浮动,不需要在页面添加容器
  14. 使用固定的方式在页面容器中指定class="fix"
  15. */
  16. var cont = $("#queryContext");
  17. if(cont.length<1){
  18. $(document.body).append('<div id="queryContext" class="' + csstype + '"></div>');
  19. cont = $("#queryContext");
  20. }
  21. if($("#queryContextbg").length<1){
  22. $(document.body).append('<div id="queryContextbg"></div>');
  23. }
  24. cont.hide();
  25. $("#queryContextbg").hide();
  26. },
  27. query:function(codenum,codename){
  28. var cont=$("#queryContext");
  29. if(cont.length<1)
  30. {
  31. $(document.body).append('<div id="queryContext"></div>');
  32. cont=$("#queryContext");
  33. }
  34. if(codenum.length<1 || codename.length<1){
  35. shtml='快递单号或者物流类型为空';
  36. retrun;
  37. }
  38. Ajax.call('/plugins/TrackMore/trackmore_post.php','num=' + codenum + '&com=' + codename,function(result){
  39. if(result.meta.code == 200){
  40. var status;
  41. var origin_info = result.data.items[0].origin_info;
  42. var shtml = '<div class="header">';
  43. shtml += '<div class="th">';
  44. shtml += '<h2>物流轨迹</h2>';
  45. shtml += '<span>' + codename + ':' + codenum + '</span>';
  46. shtml += '<a class="close" href="#" onclick="kdniao.close()"></a>';
  47. shtml += '</div>';
  48. shtml += '</div>';
  49. shtml += '<div class="tbody">';
  50. shtml += '<table class="kd_tb"><thead><tr><th class="th" colspan="4"></th></tr></thead><tbody>';
  51. for(i=0;i<origin_info.trackinfo.length;i++){
  52. switch(i){
  53. case origin_info.trackinfo.length-1:
  54. status = "fir";
  55. break;
  56. case 0:
  57. status = "end";
  58. break;
  59. default:
  60. status = "mid";
  61. break;
  62. }
  63. var sigleinfo = origin_info.trackinfo[i]
  64. sigleinfo_date = sigleinfo.Date.split(" ");
  65. shtml += '<tr><td class="td1"><b class="' + status + '"></b></td><td>' + sigleinfo_date[0] + '</td><td>' + sigleinfo_date[1] + '</td><td>' + sigleinfo.Details + '</td><td>' + sigleinfo.StatusDescription + '</td>';
  66. }
  67. shtml += '</tbody></table>';
  68. shtml += '</div>';
  69. shtml += '<div class="footer"><div class="info">以上信息由物流公司提供,如无跟踪信息或有疑问,请咨询对应的物流公司</div></div>';
  70. cont.html(shtml).show();
  71. }
  72. } , 'POST', 'JSON')
  73. },
  74. close:function(){
  75. $("#queryContext").hide();
  76. $("#queryContextbg").hide();
  77. }
  78. }
  79. trackmore.init();

trackmore_cfg.php

  1. <?php
  2. header("content-type:text/html;charset=utf-8");
  3. switch ($getcom){
  4. case "韵达速递":
  5. $postcom = "yunda";
  6. break;
  7. case "中通快递":
  8. $postcom = "zto";
  9. break;
  10. case "申通快递":
  11. $postcom = "sto";
  12. break;
  13. case "圆通快递":
  14. $postcom = "yto";
  15. break;
  16. case "顺丰速递":
  17. $postcom = "sf-express";
  18. break;
  19. case "EMS":
  20. $postcom = "china-ems";
  21. break;
  22. case "天天快递":
  23. $postcom = "ttkd";
  24. break;
  25. default:
  26. $postcom = "";
  27. break;
  28. }
  29. ?>

trackmore_post.php

  1. <?php
  2. header("content-type:text/html;charset=utf-8");
  3.  
  4. $getcom = trim($_POST["com"]);
  5. $getnum = trim($_POST["num"]);
  6. include_once('trackmore_cfg.php');
  7. include_once("track.class.php");
  8.  
  9. /*
  10. * 这里是正式生产环境下使用的内容
  11. $track = new Trackingmore;
  12. $extraInfo['lang'] = 'cn';
  13. $track = $track -> getRealtimeTrackingResults($postcom,$getnum,$extraInfo);
  14. $return_json = json_encode($track);
  15. */
  16. /*
  17. * 这里是模拟trackmore返回数据
  18. */
  19. $return_json = include('test_result.php');
  20.  
  21. echo $return_json;
  22. ?>

track.class.php

  1. <?php
  2. class Trackingmore{
  3. const API_BASE_URL = 'http://api.trackingmore.com/v2/';
  4. const ROUTE_CARRIERS = 'carriers/';//获取运输商简码
  5. const ROUTE_CARRIERS_DETECT = 'carriers/detect';//通过跟踪代码检测载波
  6. const ROUTE_TRACKINGS = 'trackings';//接口主路径
  7. const ROUTE_LIST_ALL_TRACKINGS = 'trackings/get';//获取多个运单号的物流信息
  8. const ROUTE_CREATE_TRACKING = 'trackings/post';//创建单个运单号
  9. const ROUTE_TRACKINGS_BATCH = 'trackings/batch'; //创建多个运单号
  10. const ROUTE_TRACKINGS_REALTIME = 'trackings/realtime';//获取单个运单号实时物流信息
  11. const ROUTE_TRACKINGS_RELETE = 'trackings/delete';//删除多个运单号
  12. const ROUTE_TRACKINGS_UPDATE = 'trackings/update';//修改运输商简码
  13. const ROUTE_TRACKINGS_GETUSEINFO = 'trackings/getuserinfo';//查询用户剩余额度
  14. const ROUTE_TRACKINGS_GETSTATUS = 'trackings/getstatusnumber';//查看不同状态快递数量
  15. const ROUTE_TRACKINGS_NOTUPDATE = 'trackings/notupdate';//设置部分单号不再更新
  16. const ROUTE_TRACKINGS_REMOTE = 'trackings/remote';//查询收货地址是否偏远
  17. const ROUTE_TRACKINGS_COSTTIME = 'trackings/costtime';//获取成本时间迭代结果
  18. const ROUTE_TRACKINGS_UPDATEMORE = 'trackings/updatemore';//修改多个运单号附加信息。如:订单号,商品标题,快递状态等。
  19. protected $apiKey = 'your api_key';//API Key
  20.  
  21. protected function _getApiData($route, $method = 'GET', $sendData = array()){
  22. $method = strtoupper($method);
  23. $requestUrl = self::API_BASE_URL.$route;
  24. $curlObj = curl_init();
  25. curl_setopt($curlObj, CURLOPT_URL,$requestUrl);
  26. if($method == 'GET'){
  27. curl_setopt($curlObj, CURLOPT_HTTPGET,true);
  28. }elseif($method == 'POST'){
  29. curl_setopt($curlObj, CURLOPT_POST, true);
  30. }elseif ($method == 'PUT'){
  31. curl_setopt($curlObj, CURLOPT_CUSTOMREQUEST, "PUT");
  32. }else{
  33. curl_setopt($curlObj, CURLOPT_CUSTOMREQUEST, $method);
  34. }
  35. curl_setopt($curlObj, CURLOPT_CONNECTTIMEOUT, 10);
  36. curl_setopt($curlObj, CURLOPT_TIMEOUT, 90);
  37. curl_setopt($curlObj, CURLOPT_RETURNTRANSFER, true);
  38. curl_setopt($curlObj, CURLOPT_HEADER, 0);
  39. $headers = array(
  40. 'Trackingmore-Api-Key: ' . $this->apiKey,
  41. 'Content-Type: application/json',
  42. );
  43. if($sendData){
  44. $dataString = json_encode($sendData);
  45. curl_setopt($curlObj, CURLOPT_POSTFIELDS, $dataString);
  46. $headers[] = 'Content-Length: ' . strlen($dataString);
  47. }
  48. curl_setopt($curlObj, CURLOPT_HTTPHEADER, $headers);
  49. $response = curl_exec($curlObj);
  50. curl_close($curlObj);
  51. unset($curlObj);
  52. return $response;
  53. }
  54.  
  55. // List all carriers
  56. public function getCarrierList(){
  57. $returnData = array();
  58. $requestUrl = self::ROUTE_CARRIERS;
  59. $result = $this->_getApiData($requestUrl, 'GET');
  60. if ($result) {
  61. $returnData = json_decode($result, true);
  62. }
  63. return $returnData;
  64. }
  65.  
  66. /*Detect a carrier by tracking code
  67. * @param string $trackingNumber Tracking number
  68. * @return array
  69. */
  70. public function detectCarrier($trackingNumber)
  71. {
  72. $returnData = array();
  73. $requestUrl = self::ROUTE_CARRIERS_DETECT;
  74. $sendData['tracking_number'] = $trackingNumber;
  75. $result = $this->_getApiData($requestUrl, 'POST',$sendData);
  76. if ($result) {
  77. $returnData = json_decode($result, true);
  78. }
  79. return $returnData;
  80. }
  81.  
  82. /**
  83. * List all trackings
  84. * @access public
  85. * @param int $numbers Tracking numbers,eg:$numbers = LY044217709CN,UG561422482CN (optional)
  86. * @param int $orders Tracking order,eg:$orders = #123 (optional)
  87. * @param int $page Page to display (optional)
  88. * @param int $limit Items per page (optional)
  89. * @param int $createdAtMin Start date and time of trackings created (optional)
  90. * @param int $createdAtMax End date and time of trackings created (optional)
  91. * @param int $update_time_min Start date and time of trackings updated (optional)
  92. * @param int $update_time_max End date and time of trackings updated (optional)
  93. * @param int $order_created_time_min Start date and time of order created (optional)
  94. * @param int $order_created_time_max End date and time of order created (optional)
  95. * @param int $lang Language,eg:$lang=cn(optional)
  96. * @return array
  97. */
  98. public function getTrackingsList($numbers = "",$orders = "",$page = 1,$limit = 100,$createdAtMin = 0,$createdAtMax = 0,$update_time_min = 0,$update_time_max = 0,$order_created_time_min = 0,$order_created_time_max = 0,$lang = "en"){
  99. $returnData = array();
  100. $sendData = array();
  101. $requestUrl = self::ROUTE_LIST_ALL_TRACKINGS;
  102. $createdAtMax = !empty($createdAtMax)?$createdAtMax:time();
  103. $update_time_max = !empty($update_time_max)?$update_time_max:time();
  104. $order_created_time_max = !empty($order_created_time_max)?$order_created_time_max:time();
  105. $sendData['page'] = $page;
  106. $sendData['limit'] = $limit;
  107. $sendData['created_at_min'] = $createdAtMin;
  108. $sendData['created_at_max'] = $createdAtMax;
  109. $sendData['update_time_min'] = $update_time_min;
  110. $sendData['update_time_max'] = $update_time_max;
  111. $sendData['order_created_time_min'] = $order_created_time_min;
  112. $sendData['order_created_time_max'] = $order_created_time_max;
  113. $sendData['lang'] = $lang;
  114. $sendData['numbers'] = $numbers;
  115. $sendData['orders'] = $orders;
  116. $result = $this->_getApiData($requestUrl, 'GET', $sendData);
  117. if ($result) {
  118. $returnData = json_decode($result);
  119. }
  120. return $returnData;
  121. }
  122.  
  123. /**
  124. * Create a tracking item
  125. * @access public
  126. * @param string $trackingNumber Tracking number
  127. * @param string $carrierCode Carrier code
  128. * @param array $extraInfo (Title,Customer name,email,order ID,customer phone,order create time,destination code,tracking ship date,tracking postal code,language) (optional)
  129. * @return array
  130. */
  131. public function createTracking($carrierCode,$trackingNumber,$extraInfo = array()){
  132. $returnData = array();
  133. $sendData = array();
  134. $requestUrl = self::ROUTE_CREATE_TRACKING;
  135.  
  136. $sendData['tracking_number'] = $trackingNumber;
  137. $sendData['carrier_code'] = $carrierCode;
  138. $sendData['title'] = !empty($extraInfo['title'])?$extraInfo['title']:null;
  139. $sendData['logistics_channel'] = !empty($extraInfo['logistics_channel'])?$extraInfo['logistics_channel']:null;
  140. $sendData['customer_name'] = !empty($extraInfo['customer_name'])?$extraInfo['customer_name']:null;
  141. $sendData['customer_email'] = !empty($extraInfo['customer_email'])?$extraInfo['customer_email']:null;
  142. $sendData['order_id'] = !empty($extraInfo['order_id'])?$extraInfo['order_id']:null;
  143. $sendData['customer_phone'] = !empty($extraInfo['customer_phone'])?$extraInfo['customer_phone']:null;
  144. $sendData['order_create_time'] = !empty($extraInfo['order_create_time'])?$extraInfo['order_create_time']:null;
  145. $sendData['destination_code'] = !empty($extraInfo['destination_code'])?$extraInfo['destination_code']:'';
  146. $sendData['tracking_ship_date'] = !empty($extraInfo['tracking_ship_date'])?$extraInfo['tracking_ship_date']:null;
  147. $sendData['tracking_postal_code'] = !empty($extraInfo['tracking_postal_code'])?$extraInfo['tracking_postal_code']:"";
  148. $sendData['lang'] = !empty($extraInfo['lang'])?$extraInfo['lang']:"en";
  149.  
  150. $result = $this->_getApiData($requestUrl, 'POST', $sendData);
  151. if ($result) {
  152. $returnData = json_decode($result, true);
  153. }
  154. return $returnData;
  155. }
  156.  
  157. /**
  158. * Create multiple trackings.
  159. * @access public
  160. * @param array $multipleData (Multiple tracking number,carrier code,title,customer name,customer email,order id,destination code,customer phone,order create time,tracking ship date,tracking postal code,special number destination,language)
  161. * @return array
  162. */
  163. public function createMultipleTracking($multipleData){
  164. $returnData = array();
  165. $sendData = array();
  166. $requestUrl = self::ROUTE_TRACKINGS_BATCH;
  167. if(!empty($multipleData)){
  168. foreach($multipleData as $val){
  169. $items = array();
  170. $items['tracking_number'] = !empty($val['tracking_number'])?$val['tracking_number']:null;
  171. $items['carrier_code'] = !empty($val['carrier_code'])?$val['carrier_code']:null;
  172. $items['title'] = !empty($val['title'])?$val['title']:null;
  173. $items['logistics_channel'] = !empty($val['logistics_channel'])?$val['logistics_channel']:null;
  174. $items['customer_name'] = !empty($val['customer_name'])?$val['customer_name']:null;
  175. $items['customer_email'] = !empty($val['customer_email'])?$val['customer_email']:null;
  176. $items['order_id'] = !empty($val['order_id'])?$val['order_id']:null;
  177. $items['destination_code'] = !empty($val['destination_code'])?$val['destination_code']:null;
  178. $items['customer_phone'] = !empty($val['customer_phone'])?$val['customer_phone']:null;
  179. $items['order_create_time'] = !empty($val['order_create_time'])?$val['order_create_time']:null;
  180. $items['tracking_ship_date'] = !empty($val['tracking_ship_date'])?$val['tracking_ship_date']:null;
  181. $items['tracking_postal_code'] = !empty($val['tracking_postal_code'])?$val['tracking_postal_code']:null;
  182. $items['specialNumberDestination'] = !empty($val['specialNumberDestination'])?$val['specialNumberDestination']:null;
  183. $items['lang'] = !empty($val['lang'])?$val['lang']:'en';
  184. $sendData[] = $items;
  185. }
  186. }
  187.  
  188. $result = $this->_getApiData($requestUrl, 'POST', $sendData);
  189. if ($result) {
  190. $returnData = json_decode($result, true);
  191. }
  192. return $returnData;
  193. }
  194.  
  195. /**
  196. * Get tracking results of a single tracking
  197. * @access public
  198. * @param string $trackingNumber Tracking number
  199. * @param string $carrierCode Carrier code
  200. * @param string $lang language
  201. * @return array
  202. */
  203. public function getSingleTrackingResult($carrierCode,$trackingNumber,$lang='en'){
  204. $returnData = array();
  205. $requestUrl = self::ROUTE_TRACKINGS.'/'.$carrierCode.'/'.$trackingNumber.'/'.$lang;
  206. $result = $this->_getApiData($requestUrl, 'GET');
  207. if ($result) {
  208. $returnData = json_decode($result, true);
  209. }
  210. return $returnData;
  211. }
  212.  
  213. /**
  214. * Update Tracking item
  215. * @access public
  216. * @param string $trackingNumber Tracking number
  217. * @param string $carrierCode Carrier code
  218. * @param array $extraInfo (Title,Customer name,email,order ID,customer phone,destination code,status) (optional)
  219. * @return array
  220. */
  221. public function updateTrackingItem($carrierCode,$trackingNumber,$extraInfo){
  222. $returnData = array();
  223. $requestUrl = self::ROUTE_TRACKINGS.'/'.$carrierCode.'/'.$trackingNumber;
  224. $sendData['title'] = !empty($extraInfo['title'])?$extraInfo['title']:null;
  225. $sendData['logistics_channel'] = !empty($extraInfo['logistics_channel'])?$extraInfo['logistics_channel']:null;
  226. $sendData['customer_name'] = !empty($extraInfo['customer_name'])?$extraInfo['customer_name']:null;
  227. $sendData['customer_email'] = !empty($extraInfo['customer_email'])?$extraInfo['customer_email']:null;
  228. $sendData['customer_phone'] = !empty($extraInfo['customer_phone'])?$extraInfo['customer_phone']:null;
  229. $sendData['order_id'] = !empty($extraInfo['order_id'])?$extraInfo['order_id']:null;
  230. $sendData['destination_code']= !empty($extraInfo['destination_code'])?$extraInfo['destination_code']:null;
  231. $sendData['status']= !empty($extraInfo['status'])?$extraInfo['status']:null;
  232. $result = $this->_getApiData($requestUrl, 'PUT',$sendData);
  233. if ($result) {
  234. $returnData = json_decode($result, true);
  235. }
  236. return $returnData;
  237. }
  238.  
  239. /**
  240. * Delete a tracking item
  241. * @access public
  242. * @param string $trackingNumber Tracking number
  243. * @param string $carrierCode Carrier code
  244. * @return array
  245. */
  246. public function deleteTrackingItem($carrierCode,$trackingNumber){
  247. $returnData = array();
  248. $requestUrl = self::ROUTE_TRACKINGS.'/'.$carrierCode.'/'.$trackingNumber;
  249. $result = $this->_getApiData($requestUrl, 'DELETE');
  250. if ($result) {
  251. $returnData = json_decode($result, true);
  252. }
  253. return $returnData;
  254. }
  255.  
  256. /**
  257. * Get realtime tracking results of a single tracking
  258. * @access public
  259. * @param string $trackingNumber Tracking number
  260. * @param string $carrierCode Carrier code
  261. * @param array $extraInfo (Destination_code,Tracking_ship_date Customer_email,Tracking_postal_code,SpecialNumberDestination,order,lang) (optional)
  262. * @return array
  263. */
  264. public function getRealtimeTrackingResults($carrierCode,$trackingNumber,$extraInfo=array()){
  265. $returnData = array();
  266. $requestUrl = self::ROUTE_TRACKINGS_REALTIME;
  267. $sendData['tracking_number'] = $trackingNumber;
  268. $sendData['carrier_code'] = $carrierCode;
  269. $sendData['destination_code'] = !empty($extraInfo['destination_code'])?$extraInfo['destination_code']:null;
  270. $sendData['tracking_ship_date'] = !empty($extraInfo['tracking_ship_date'])?$extraInfo['tracking_ship_date']:null;
  271. $sendData['order_create_time'] = !empty($extraInfo['order_create_time'])?$extraInfo['order_create_time']:null;
  272. $sendData['tracking_postal_code'] = !empty($extraInfo['tracking_postal_code'])?$extraInfo['tracking_postal_code']:null;
  273. $sendData['specialNumberDestination'] = !empty($extraInfo['specialNumberDestination'])?$extraInfo['specialNumberDestination']:null;
  274. $sendData['order'] = !empty($extraInfo['order'])?$extraInfo['order']:null;
  275. $sendData['lang'] = !empty($extraInfo['lang'])?$extraInfo['lang']:null;
  276. $result = $this->_getApiData($requestUrl, 'POST',$sendData);
  277. if ($result) {
  278. $returnData = json_decode($result, true);
  279. }
  280. return $returnData;
  281. }
  282.  
  283. /**
  284. * delete multiple tracking
  285. * @access public
  286. * @param array $multipleData (tracking number,carrier code)
  287. * @return array
  288. */
  289. public function deleteMultipleTracking($multipleData){
  290. $returnData = array();
  291. $sendData = array();
  292. $requestUrl = self::ROUTE_TRACKINGS_RELETE;
  293. if(!empty($multipleData)){
  294. foreach ($multipleData as $val){
  295. $items = array();
  296. $items['tracking_number'] = !empty($val['tracking_number'])?$val['tracking_number']:null;
  297. $items['carrier_code'] = !empty($val['carrier_code'])?$val['carrier_code']:null;
  298. $sendData[] = $items;
  299. }
  300. }
  301. $result = $this->_getApiData($requestUrl, 'POST', $sendData);
  302. if ($result) {
  303. $returnData = json_decode($result, true);
  304. }
  305. return $returnData;
  306. }
  307.  
  308. /**
  309. * update carrier code
  310. * @access public
  311. * @param string $trackingNumber Tracking number
  312. * @param string $carrierCode Carrier code
  313. * @param string $carrierCode Update carrier code
  314. * @return array
  315. */
  316. public function updateCarrierCode($tracking_number,$carrier_code,$update_carrier_code){
  317. $returnData = array();
  318. $sendData = array();
  319. $requestUrl = self::ROUTE_TRACKINGS_UPDATE;
  320. $sendData["tracking_number"] = $tracking_number;
  321. $sendData["carrier_code"] = $carrier_code;
  322. $sendData["update_carrier_code"] = $update_carrier_code;
  323. $result = $this->_getApiData($requestUrl, 'POST', $sendData);
  324. if ($result) {
  325. $returnData = json_decode($result, true);
  326. }
  327. return $returnData;
  328. }
  329.  
  330. /**
  331. * update carrier code
  332. * @access public
  333. * @return array
  334. */
  335. public function getUserInfoBalance(){
  336. $returnData = array();
  337. $requestUrl = self::ROUTE_TRACKINGS_GETUSEINFO;
  338. $result = $this->_getApiData($requestUrl, 'GET');
  339. if ($result) {
  340. $returnData = json_decode($result, true);
  341. }
  342. return $returnData;
  343. }
  344.  
  345. /**
  346. * update carrier code
  347. * @access public
  348. * @param int $created_at_min Start date and time of trackings created (optional)
  349. * @param int $created_at_max End date and time of trackings created (optional)
  350. * @param int $order_created_time_min Start date and time of order created (optional)
  351. * @param int $order_created_time_max End date and time of order created (optional)
  352. * @return array
  353. */
  354. public function getStatusNumberCount($created_at_min = 0,$created_at_max = 0,$order_created_time_min = 0,$order_created_time_max = 0){
  355. $returnData = array();
  356. $sendData = array();
  357. $requestUrl = self::ROUTE_TRACKINGS_GETSTATUS;
  358. $sendData["created_at_min"] = !empty($created_at_min)?$created_at_min:null;
  359. $sendData["created_at_max"] = !empty($created_at_max)?$created_at_max:time();
  360. $sendData["order_created_time_min"] = !empty($order_created_time_min)?$order_created_time_min:null;
  361. $sendData["order_created_time_max"] = !empty($order_created_time_max)?$order_created_time_max:time();
  362. $result = $this->_getApiData($requestUrl, 'GET',$sendData);
  363. if ($result) {
  364. $returnData = json_decode($result, true);
  365. }
  366. return $returnData;
  367. }
  368.  
  369. /**
  370. * update carrier code
  371. * @access public
  372. * @param array $multipleData (tracking number,carrier code)
  373. * @param string $carrierCode Carrier code
  374. * @return array
  375. */
  376. public function setNumberNotUpdate($multipleData){
  377. $returnData = array();
  378. $sendData = array();
  379. $requestUrl = self::ROUTE_TRACKINGS_NOTUPDATE;
  380. if(!empty($multipleData)){
  381. foreach ($multipleData as $val){
  382. $items = array();
  383. $items['tracking_number'] = !empty($val['tracking_number'])?$val['tracking_number']:null;
  384. $items['carrier_code'] = !empty($val['carrier_code'])?$val['carrier_code']:null;
  385. $sendData[] = $items;
  386. }
  387. }
  388. $result = $this->_getApiData($requestUrl, 'POST',$sendData);
  389. if ($result) {
  390. $returnData = json_decode($result, true);
  391. }
  392. return $returnData;
  393. }
  394.  
  395. /**
  396. * update carrier code
  397. * @access public
  398. * @param array $multipleData (Country two code,Post code or city name,company),eg:array(0=>array("CN","518131","DHL"));
  399. * @return array
  400. */
  401. public function searchDeliveryIsRemote($multipleData){
  402. $returnData = array();
  403. $sendData = array();
  404. $requestUrl = self::ROUTE_TRACKINGS_REMOTE;
  405. if(!empty($multipleData)){
  406. foreach ($multipleData as $val){
  407. $items = array();
  408. $items['country'] = !empty($val['country'])?$val['country']:null;
  409. $items['postcode'] = !empty($val['postcode'])?$val['postcode']:null;
  410. $items['company'] = !empty($val['company'])?$val['company']:null;
  411. $sendData[] = $items;
  412. }
  413. }
  414. $result = $this->_getApiData($requestUrl, 'POST',$sendData);
  415. if ($result) {
  416. $returnData = json_decode($result, true);
  417. }
  418. return $returnData;
  419. }
  420.  
  421. /**
  422. * update carrier code
  423. * @access public
  424. * @param array $multipleData (Country two code,Post code or city name,company),eg:array(0=>array("CN","518131","DHL"));
  425. * @return array
  426. */
  427. public function getCarrierCostTime($multipleData){
  428. $returnData = array();
  429. $sendData = array();
  430. $requestUrl = self::ROUTE_TRACKINGS_COSTTIME;
  431. if(!empty($multipleData)){
  432. foreach ($multipleData as $val){
  433. $items = array();
  434. $items['carrier_code'] = !empty($val['carrier_code'])?$val['carrier_code']:null;
  435. $items['original'] = !empty($val['original'])?$val['original']:null;
  436. $items['destination'] = !empty($val['destination'])?$val['destination']:null;
  437. $sendData[] = $items;
  438. }
  439. }
  440. $result = $this->_getApiData($requestUrl, 'POST',$sendData);
  441. if ($result) {
  442. $returnData = json_decode($result, true);
  443. }
  444. return $returnData;
  445. }
  446.  
  447. /**
  448. * update carrier code
  449. * @access public
  450. * @param array $multipleData (Country two code,Post code or city name,company),eg:array(0=>array("CN","518131","DHL"));
  451. * @return array
  452. */
  453. public function updateMultipleTrackItem($multipleData){
  454. $returnData = array();
  455. $sendData = array();
  456. $requestUrl = self::ROUTE_TRACKINGS_UPDATEMORE;
  457. if(!empty($multipleData)){
  458. foreach ($multipleData as $val){
  459. $items = array();
  460. $items['tracking_number'] = !empty($val['tracking_number'])?$val['tracking_number']:null;
  461. $items['carrier_code'] = !empty($val['carrier_code'])?$val['carrier_code']:null;
  462. $items['title'] = !empty($val['title'])?$val['title']:null;
  463. $items['logistics_channel'] = !empty($val['logistics_channel'])?$val['logistics_channel']:null;
  464. $items['customer_name'] = !empty($val['customer_name'])?$val['customer_name']:null;
  465. $items['customer_email'] = !empty($val['customer_email'])?$val['customer_email']:null;
  466. $items['order_id'] = !empty($val['order_id'])?$val['order_id']:null;
  467. $items['destination_code'] = !empty($val['destination_code'])?$val['destination_code']:null;
  468. $items['status'] = !empty($val['status'])?$val['status']:null;
  469. $sendData[] = $items;
  470. }
  471. }
  472. $result = $this->_getApiData($requestUrl, 'POST',$sendData);
  473. if ($result) {
  474. $returnData = json_decode($result, true);
  475. }
  476. return $returnData;
  477. }
  478.  
  479. }
  480. ?>

test_result.php,由于测试账号每20分钟仅可请求一次,我在这里将首次请求返回结果放在这个文件,模拟trackmore的返回数据

  1. <?php
  2. return "{
  3. \"meta\" : {
  4. \"code\" : 200,
  5. \"type\" : \"Success\",
  6. \"message\" : \"Success\"
  7. },
  8. \"data\" : {
  9. \"items\" : [{
  10. \"id\" : \"ef7b311fc15c7c1f58523a5076d8ad6f\",
  11. \"tracking_number\" : \"3814040916275\",
  12. \"carrier_code\" : \"yunda\",
  13. \"order_create_time\" : \"\",
  14. \"destination_code\" : \"\",
  15. \"status\" : \"delivered\",
  16. \"original_country\" : \"\",
  17. \"itemTimeLength\" : 3,
  18. \"stayTimeLength\" : 112,
  19. \"service_code\" : null,
  20. \"substatus\" : null,
  21. \"last_mile_tracking_supported\" : null,
  22. \"origin_info\" : {
  23. \"ItemReceived\" : \"2018-02-03 21:51:25\",
  24. \"ItemDispatched\" : null,
  25. \"DepartfromAirport\" : null,
  26. \"ArrivalfromAbroad\" : null,
  27. \"CustomsClearance\" : null,
  28. \"DestinationArrived\" : null,
  29. \"weblink\" : \"http://yundaex.com/cn/index.php\",
  30. \"phone\" : null,
  31. \"carrier_code\" : \"yunda\",
  32. \"trackinfo\" : [{
  33. \"Date\" : \"2018-02-06 19:49:26\",
  34. \"StatusDescription\" : \"快件已被 已签收 签收\",
  35. \"Details\" : \"广东湛江公司北月便民寄存点分部\",
  36. \"checkpoint_status\" : \"delivered\"
  37. },{
  38. \"Date\" : \"2018-02-06 12:04:47\",
  39. \"StatusDescription\" : \"进行派件扫描;派送业务员:陈汉淇;联系电话:13078298668\",
  40. \"Details\" : \"广东湛江公司北月便民寄存点分部\",
  41. \"checkpoint_status\" : \"transit\"
  42. },{
  43. \"Date\" : \"2018-02-05 20:36:15\",
  44. \"StatusDescription\" : \"进行快件扫描,将发往:广东湛江公司北月便民寄存点分部\",
  45. \"Details\" : \"广东湛江公司\",
  46. \"checkpoint_status\" : \"transit\"
  47. },{
  48. \"Date\" : \"2018-02-05 00:20:55\",
  49. \"StatusDescription\" : \"从站点发出,本次转运目的地:广东湛江公司\",
  50. \"Details\" : \"广东中山分拨中心\",
  51. \"checkpoint_status\" : \"transit\"
  52. },{
  53. \"Date\" : \"2018-02-05 00:13:30\",
  54. \"StatusDescription\" : \"在分拨中心进行卸车扫描\",
  55. \"Details\" : \"广东中山分拨中心\",
  56. \"checkpoint_status\" : \"transit\"
  57. },{
  58. \"Date\" : \"2018-02-04 05:07:20\",
  59. \"StatusDescription\" : \"进行装车扫描,即将发往:广东中山分拨中心\",
  60. \"Details\" : \"广东揭阳分拨中心\",
  61. \"checkpoint_status\" : \"transit\"
  62. },{
  63. \"Date\" : \"2018-02-04 05:04:51\",
  64. \"StatusDescription\" : \"在分拨中心进行称重扫描\",
  65. \"Details\" : \"广东揭阳分拨中心\",
  66. \"checkpoint_status\" : \"transit\"
  67. },{
  68. \"Date\" : \"2018-02-03 22:02:41\",
  69. \"StatusDescription\" : \"进行下级地点扫描,将发往:广东湛江公司\",
  70. \"Details\" : \"广东普宁南公司\",
  71. \"checkpoint_status\" : \"transit\"
  72. },{
  73. \"Date\" : \"2018-02-03 21:51:25\",
  74. \"StatusDescription\" : \"进行揽件扫描\",
  75. \"Details\" : \"广东普宁南公司\",
  76. \"checkpoint_status\" : \"transit\"
  77. }]
  78. },
  79. \"destination_info\" : null,
  80. \"lastEvent\" : \"快件已被 已签收 签收,广东湛江公司北月便民寄存点分部,2018-02-06 19:49:26\",
  81. \"lastUpdateTime\" : \"2018-02-06 19:49:26\"
  82. }]
  83. }
  84. }";
  85. ?>

点击下方图片前往:TrackMore官网

下载除html以外的其他部分:download_trackmore

JQ + PHP + TrackMore物流信息跟踪的更多相关文章

  1. 利用django打造自己的工作流平台(一):从EXCEL到流程化运作

    因工作所需以及管理个人一些日常事项,自己基于django(一个基于python的web框架,详细介绍可查阅相关资料)开发了一个简易的工作流平台[平台地址].本文首先简要介绍工作流平台的设计思想及其在项 ...

  2. ecshop用户中心订单详情增加快递单物流信息查询显示的功能

    1,themes\default\user_transaction.dwt 找到: <!--{if $action eq order_detail} --> 在下面一行加入: <st ...

  3. cookie的初识和运用(js和jq)

    cookie是什么 cookie是浏览器提供的一种机制,它将document 对象的cookie属性提供给JavaScript.可以由JavaScript对其进行控制,而并不是JavaScript本身 ...

  4. 调用第三方物流公司API即时查询物流信息

    主要是利用快递鸟提供的物流服务,通过对接快递鸟的API,调用即时查询接口,获取物流信息. 这里采用java语言,调用快递鸟的接口为例.步骤如下: 1.首先,得去快递鸟的官方网站注册一个账号并进行实名认 ...

  5. 个人永久性免费-Excel催化剂功能第97波-快递单号批量查询物流信息

    电商时代,快递已进千万家,做电商零售行业的,快递信息的再挖掘,也显得更有意义,是数据精细化运营中必不可少的一环.一般站在系统的角度,数据用于业务流转的增删改查使用,而对于分析需求来说,这些业务系统里集 ...

  6. 物流跟踪 调用快递鸟API

    概要:关于调用快递鸟API,我有几句话想说,有几行代码想写 业务需求:就是做做商城,卖卖东西.然后需要做个物流跟踪的功能 需要获取的信息大概就是这个样子 现在看这个快递怎么这么慢 如何实现? 直接调用 ...

  7. jq选择器基础

    Jquery $代表选择器 使用jq必须要导入jq文件 <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js&qu ...

  8. [异常特工]android常见bug跟踪

    前言 对app的线上bug的收集(友盟.云捕等)有时会得到这样的异常堆栈信息:没有一行代码是有关自身程序代码的.这使得对bug的解决无从下手,根据经验,内存不足OOM,Dialog关闭,ListVie ...

  9. Entity Framework 6 Recipes 2nd Edition(9-4)译->Web API 的客户端实现修改跟踪

    9-4. Web API 的客户端实现修改跟踪 问题 我们想通过客户端更新实体类,调用基于REST的Web API 服务实现把一个对象图的插入.删除和修改等数据库操作.此外, 我们想通过EF6的Cod ...

随机推荐

  1. ADT 压缩包 R23.0.0

    http://pan.baidu.com/s/1qWLjs2w

  2. bzoj 1367 [ Baltic 2004 ] sequence —— 左偏树

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1367 好题啊!论文上的题: 论文上只给出了不下降序列的求法: 先考虑特殊情况,如果原序列上升 ...

  3. codevs3287货车运输(最小生成树+LCA)

    3287 货车运输 2013年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond     题目描述 Description A 国有 ...

  4. JS连续滚动幻灯片:原理与实现

    什么是连续滚动幻灯片?打开一些网站的首页,你会发现有一块这样的区域:一张图片,隔一段时间滑动切换下一张:同时,图片两端各有一个小按钮,供你手动点选下一张:底部有一排小圆圈,供你选定特定的某帧图片.这就 ...

  5. 2019 年了,为什么我还在用 jQuery?

    译者按: 看来 jQuery 还是有一些用武之地的. 原文: Why I'm Still Using jQuery in 2019 译者: Fundebug 为了保证可读性,本文采用意译而非直译.翻译 ...

  6. jeecg中列表查询数据关联其他表的显示

    1.A表字段:id,name;B表字段:id,name,fid(A表外键),现查询A表和B表的所有数据并且查询条件A,B都有,在前台页面list显示 2.后台方法: @RequestMapping(p ...

  7. Git 标记操作

    .推送标签: git push origin 标签名 .删除本地标签: git tag -d 标签名 .删除远程标签: git push origin :refs/tags/标签名 例:git pus ...

  8. BZOJ 4668 LCT

    思路: 这不是LCT裸题嘛23333 (好像并查集+按秩合并就可以搞了 我还是too young) 维护边权的话 就新加一个点 代表边 这个点想线段的两个端点连边就好了 //By SiriusRen ...

  9. UNIX环境高级编程--9. 进程控制

    进程关系    当子进程终止时,父进程得到通知并能取得子进程的退出状态. 终端登录:    早起UNIX系统通过哑终端登录,本地的终端 or 远程的终端 .主机上链接的终端设备是固定的,所以同时登录数 ...

  10. BOM 标记

    BOM 是 Byte Order Mark 的简称,即字节序标记.用于标记文本流: 表示文本流的字节顺序,是小端序(little-endian)还是大端序(big-endian); 表示文本流是 Un ...