Apiexpress.php 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575
  1. <?php
  2. defined('BASEPATH') OR exit('No direct script access allowed');
  3. /**
  4. * 本类是为了让商城网站可以查询快递轨迹开发出来的 后期可能会增加其他功能 对外的
  5. */
  6. class Apiexpress extends Start_Controller {
  7. public function __construct(){
  8. parent::__construct();
  9. $this->load->_model('Model_logic_order','logic_order');
  10. $this->load->_model('Model_logic_tools','logic_tools');
  11. $this->load->_model('Model_awlgx','awlgx');
  12. $this->load->_model("Model_express","express");
  13. $this->load->_model("Model_logic_ding","logic_ding");
  14. }
  15. private $key = "6amg!pnfrlbpnjgirv"; //加密所需要到的key
  16. private $iv = "6ook4k!2w94m6jtm";//加密所需要到的iv
  17. //定义方法的调用规则 获取URI第二段值
  18. public function _remap($arg,$arg_array)
  19. {
  20. if($arg == 'search')
  21. {
  22. $this->search();
  23. }
  24. else{
  25. $this->_a();
  26. }
  27. }
  28. public function _a(){
  29. die();
  30. }
  31. /**
  32. * 搜索订单状态和快递信息接口
  33. * @param $arg_array[0] string 请求店铺
  34. * @param $arg_array[1] string 请求单号
  35. */
  36. public function searchcsss(){
  37. $data = file_get_contents('PHP://input');
  38. $data = json_decode($data, true);
  39. $shop = isset($data['shop'])?$data['shop']:"";
  40. $order_no = isset($data['order_no'])?$data['order_no']:"";
  41. $apply_time = isset($data['time'])?$data['time']:0;
  42. $jiami_str = isset($data['key'])?$data['key']:"";
  43. $now_time = time();
  44. if(strlen( $apply_time."") != 10){
  45. die($this->logic_tools->ret_json(-1,"参数异常"));
  46. }
  47. if(empty($shop)){
  48. die($this->logic_tools->ret_json(-1,"请求店铺异常"));
  49. }
  50. $shop_key = $this->logic_tools->getshopname($shop);
  51. if(empty($jiami_str)){
  52. die($this->logic_tools->ret_json(-1,"秘钥信息不存在"));
  53. }
  54. $jiemi_str = $this->logic_tools->toolsjiemi($jiami_str,$this->key,$this->iv);
  55. if(empty($shop_key)){
  56. die($this->logic_tools->ret_json(-1,"该店铺的秘钥不存在"));
  57. }
  58. $jiemi_arr = explode("+",$jiemi_str);
  59. $jiemi_key = isset($jiemi_arr[0])?$jiemi_arr[0]:"";
  60. $jiemi_time = isset($jiemi_arr[1])?$jiemi_arr[1]:"";
  61. if((int)$jiemi_time != (int)$apply_time){
  62. die($this->logic_tools->ret_json(-1,"请求超时"));
  63. }
  64. if( $now_time - $apply_time > 100){
  65. die($this->logic_tools->ret_json(-1,"请求已超时"));
  66. }
  67. if($jiemi_key != $shop_key){
  68. die($this->logic_tools->ret_json(-1,"该店铺的秘钥不正确"));
  69. }
  70. if(empty($order_no)){
  71. die($this->logic_tools->ret_json(-1,"请求单号异常"));
  72. }
  73. $table_name = $this->logic_tools->getOrderTable($shop);
  74. if(empty($table_name)){
  75. die($this->logic_tools->ret_json(-1,"店铺未开通此功能!!!"));
  76. }
  77. $info = $this->logic_order->getInfoByTableName($table_name,"orderinfo = '".$shop.$order_no. "' and shop = ".$shop,"id,express,excontent,expressstate,waybill,dtime,printtime,client,name,country,province,city,address,address2,street,phone,zipcode,dlzemailtime");
  78. if(empty($info)){
  79. die($this->logic_tools->ret_json(-1,"未查询到相关快递信息"));
  80. }
  81. $receive_time = "";//客户签到时间
  82. $shipping_time = "";//快递接受发货时间
  83. $express_trace = [];
  84. $express_info = $this->express->read($info['express']);
  85. if(!empty($info['excontent'])){
  86. $tmp_arr = explode("<br />",$info['excontent']);
  87. if(!empty($tmp_arr)){
  88. $tc_tmp_str = array_pop($tmp_arr);
  89. if(empty($tmp_arr)){
  90. $express_trace = [
  91. $tc_tmp_str,
  92. ];
  93. }else{
  94. $re_arr = array_reverse($tmp_arr);
  95. if(!isset($re_arr[0])){
  96. $this->logic_ding->sendToDing("Apiexpress接口95行异常".json_encode($info,JSON_UNESCAPED_UNICODE));
  97. }
  98. if(strpos($re_arr[0],"[") !== false){
  99. $shipping_time_arr = explode("[",$re_arr[0] ) ;
  100. $shipping_time = $shipping_time_arr[0];
  101. if($info['expressstate'] == 6){
  102. $receive_tmp_arr = explode("[",$tmp_arr[0] ) ;
  103. $receive_time = $receive_tmp_arr[0];
  104. }
  105. }else{
  106. $shipping_time = date("Y-m-d H:i:s",$info['dlzemailtime']);
  107. if($info['expressstate'] == 6){
  108. $receive_time = -1;
  109. }
  110. }
  111. $express_trace = $re_arr;
  112. }
  113. ob_clean();
  114. }else{
  115. die($this->logic_tools->ret_json(-1,"物流信息存储异常"));
  116. }
  117. }else{
  118. die($this->logic_tools->ret_json(-1,"运单时间太久,暂无法查询"));
  119. }
  120. if(empty($info['dtime'])){
  121. $preparing = [
  122. "desc"=>"",
  123. "status"=>0,
  124. "date"=>"",
  125. ];
  126. }else{
  127. $preparing = [
  128. "desc"=>"The Order Has Been Created And TheMerchant lspreparing Your Order.",
  129. "status"=>1,
  130. "date"=>date("Y-m-d H:i:s",$info['dtime']),
  131. ];
  132. }
  133. if(empty($info['printtime'])){
  134. $warehouse_processing = [
  135. "desc"=>"",
  136. "status"=>0,
  137. "date"=>"",
  138. ];
  139. }else{
  140. $warehouse_processing = [
  141. "desc"=>"Packing And Final Check",
  142. "status"=>1,
  143. "date"=>date("Y-m-d H:i:s",$info['printtime']),
  144. ];
  145. }
  146. if(empty($shipping_time)){
  147. $shipping = [
  148. "desc"=>"",
  149. "status"=>0,
  150. "date"=>"",
  151. ];
  152. }else{
  153. $shipping = [
  154. "desc"=>"Courier Company Picked Up The Package",
  155. "status"=>1,
  156. "date"=>$shipping_time,
  157. ];
  158. }
  159. if(empty($receive_time)){
  160. $received = [
  161. "desc"=>"",
  162. "status"=>0,
  163. "date"=>"",
  164. ];
  165. }else{
  166. if($receive_time < 0){
  167. $received = [
  168. "desc"=>"Order signed for successfully",
  169. "status"=>1,
  170. "date"=>0,
  171. ];
  172. }else{
  173. $received = [
  174. "desc"=>"Order signed for successfully",
  175. "status"=>1,
  176. "date"=>$receive_time,
  177. ];
  178. }
  179. }
  180. $icon = 7;
  181. $final_express_name = $express_name = strtolower($express_info['iscode']);
  182. if(strpos($express_name,"usps") !== false){
  183. $icon = 1;
  184. $final_express_name = "usps";
  185. }
  186. if(strpos($express_name,"dhl") !== false){
  187. $icon = 2;
  188. $final_express_name = "dhl";
  189. }
  190. if(strpos($express_name,"ups") !== false){
  191. $icon = 3;
  192. $final_express_name = "ups";
  193. }
  194. if(strpos($express_name,"fedex") !== false){
  195. $icon = 4;
  196. $final_express_name = "fedex";
  197. }
  198. if(strpos($express_name,"aramex") !== false){
  199. $icon = 5;
  200. $final_express_name = "aramex";
  201. }
  202. if(strpos($express_name,"ges") !== false){
  203. $icon = 6;
  204. $final_express_name = "ges";
  205. }
  206. $ret_arr = [
  207. "order_no"=>$order_no,
  208. 'icon'=>$icon,
  209. "express_name"=>strtoupper($final_express_name) ,
  210. "waybill"=>$info['waybill'],
  211. "preparing"=>$preparing,//店家处理
  212. "warehouse_processing"=>$warehouse_processing,//工厂处理
  213. "shipping"=> $shipping,//快递发货
  214. "received"=>$received,//客户收货
  215. "express_trace"=>$express_trace,//快递跟踪信息
  216. "address_info"=>[
  217. "client"=>$info['client'],//客户姓名
  218. "name"=>$info['name'],//收件人姓名
  219. "country"=>$info['country'],//国家
  220. "province"=>$info['province'],//省份
  221. "city"=>$info['city'],//城市
  222. "address"=>$info['address'],//地址
  223. "address2"=>$info['address2'],//地址
  224. "street"=>$info['street'],//街道
  225. "phone"=>$info['phone'],//电话
  226. "zipcode"=>$info['zipcode'],//邮编
  227. ]
  228. ];
  229. die($this->logic_tools->ret_json(1,"success",$ret_arr));
  230. }
  231. /* 搜索订单状态和快递信息接口
  232. * @param $arg_array[0] string 请求店铺
  233. * @param $arg_array[1] string 请求单号
  234. */
  235. public function search(){
  236. $data = file_get_contents('PHP://input');
  237. $data = json_decode($data, true);
  238. $shop = isset($data['shop'])?$data['shop']:"";
  239. $order_no = isset($data['order_no'])?$data['order_no']:"";
  240. $type = isset($data['type'])?$data['type']:"";
  241. $apply_time = isset($data['time'])?$data['time']:0;
  242. $jiami_str = isset($data['key'])?$data['key']:"";
  243. $now_time = time();
  244. if(strlen( $apply_time."") != 10){
  245. die($this->logic_tools->ret_json(-1,"参数异常"));
  246. }
  247. if(empty($shop)){
  248. die($this->logic_tools->ret_json(-1,"请求店铺异常"));
  249. }
  250. $shop_key = $this->logic_tools->getshopname($shop);
  251. if(empty($jiami_str)){
  252. die($this->logic_tools->ret_json(-1,"秘钥信息不存在"));
  253. }
  254. $jiemi_str = $this->logic_tools->toolsjiemi($jiami_str,$this->key,$this->iv);
  255. if(empty($shop_key)){
  256. die($this->logic_tools->ret_json(-1,"该店铺的秘钥不存在"));
  257. }
  258. $jiemi_arr = explode("+",$jiemi_str);
  259. $jiemi_key = isset($jiemi_arr[0])?$jiemi_arr[0]:"";
  260. $jiemi_time = isset($jiemi_arr[1])?$jiemi_arr[1]:"";
  261. if((int)$jiemi_time != (int)$apply_time){
  262. die($this->logic_tools->ret_json(-1,"请求超时"));
  263. }
  264. if( $now_time - $apply_time > 100){
  265. die($this->logic_tools->ret_json(-1,"请求已超时"));
  266. }
  267. if($jiemi_key != $shop_key){
  268. die($this->logic_tools->ret_json(-1,"该店铺的秘钥不正确"));
  269. }
  270. if(empty($order_no) ){
  271. die($this->logic_tools->ret_json(-1,"请求查询的单号不能为空"));
  272. }
  273. $table_name = $this->logic_tools->getOrderTable($shop);
  274. if(empty($table_name)){
  275. die($this->logic_tools->ret_json(-1,"店铺未开通此功能!!!"));
  276. }
  277. // $type == 2 为运单号
  278. if($type == 2){
  279. $info = $this->logic_order->getInfoByTableName($table_name,"waybill = '".$order_no. "' and shop = ".$shop,"id,number,orderinfo,express,excontent,expressstate,waybill,dtime,printtime,client,name,country,province,city,address,address2,street,phone,zipcode,dlzemailtime,library,librarytime");
  280. //当检索不到运单号时,返回订单已经备货了
  281. if(empty($info)){
  282. die($this->logic_tools->ret_json(1,"success",[
  283. "order_no"=>"",
  284. 'icon'=>"",
  285. "express_name"=>"" ,
  286. "waybill"=>$order_no,
  287. "preparing"=>[
  288. "desc"=>"The Order Has Been Created And TheMerchant ls preparing Your Order.",
  289. "status"=>1,
  290. "date"=>"",
  291. "title"=>"preparing order",
  292. ],//店家处理
  293. "warehouse_processing"=>[
  294. "desc"=>"",
  295. "status"=>0,
  296. "date"=>"",
  297. "title"=>"shipped",
  298. ],//工厂处理
  299. "shipping"=> [
  300. "desc"=>"",
  301. "status"=>0,
  302. "date"=>"",
  303. "title"=>"in transit",
  304. ],//快递发货
  305. "received"=>[
  306. "desc"=>"",
  307. "status"=>0,
  308. "date"=>"",
  309. "title"=>"delivered",
  310. ],//客户收货
  311. "express_trace"=>[],//快递跟踪信息
  312. "address_info"=>[
  313. "client"=>"",//客户姓名
  314. "name"=>"",//收件人姓名
  315. "country"=>"",//国家
  316. "province"=>"",//省份
  317. "city"=>"",//城市
  318. "address"=>"",//地址
  319. "address2"=>"",//地址
  320. "street"=>"",//街道
  321. "phone"=>"",//电话
  322. "zipcode"=>"",//邮编
  323. ]
  324. ]));
  325. }
  326. }else{
  327. $info = $this->logic_order->getInfoByTableName($table_name,"orderinfo = '".$shop.$order_no. "' and shop = ".$shop,"id,number,orderinfo,express,excontent,expressstate,waybill,dtime,printtime,client,name,country,province,city,address,address2,street,phone,zipcode,dlzemailtime,library,librarytime");
  328. if(empty($info)){
  329. die($this->logic_tools->ret_json(-1,"未查询到相关快递信息"));
  330. }
  331. if(empty($info['waybill']) && ($info['printtime'])){
  332. //如果没有运单号,则返回订单已经备货了
  333. die($this->logic_tools->ret_json(1,"success",[
  334. "order_no"=>$info['number'],
  335. 'icon'=>"",
  336. "express_name"=>"" ,
  337. "waybill"=>"",
  338. "preparing"=>[
  339. "desc"=>"The Order Has Been Created And TheMerchant lspreparing Your Order.",
  340. "status"=>1,
  341. "date"=>"",
  342. "title"=>"preparing order",
  343. ],//店家处理
  344. "warehouse_processing"=>[
  345. "desc"=>"",
  346. "status"=>0,
  347. "date"=>"",
  348. "title"=>"shipped",
  349. ],//工厂处理
  350. "shipping"=> [
  351. "desc"=>"",
  352. "status"=>0,
  353. "date"=>"",
  354. "title"=>"in transit",
  355. ],//快递发货
  356. "received"=>[
  357. "desc"=>"",
  358. "status"=>0,
  359. "date"=>"",
  360. "title"=>"delivered",
  361. ],//客户收货
  362. "express_trace"=>[],//快递跟踪信息
  363. "address_info"=>[
  364. "client"=>$info['client'],//客户姓名
  365. "name"=>$info['name'],//收件人姓名
  366. "country"=>$info['country'],//国家
  367. "province"=>$info['province'],//省份
  368. "city"=>$info['city'],//城市
  369. "address"=>$info['address'],//地址
  370. "address2"=>$info['address2'],//地址
  371. "street"=>$info['street'],//街道
  372. "phone"=>$info['phone'],//电话
  373. "zipcode"=>$info['zipcode'],//邮编
  374. ]
  375. ]));
  376. }
  377. }
  378. $receive_time = "";//客户签到时间
  379. $shipping_time = "";//快递接受发货时间
  380. $express_trace = [];
  381. $express_info = $this->express->read($info['express']);
  382. if(!empty($info['excontent'])){
  383. $tmp_arr = explode("<br />",$info['excontent']);
  384. if(!empty($tmp_arr)){
  385. $tc_tmp_str = array_pop($tmp_arr);
  386. if(empty($tmp_arr)){
  387. $express_trace = [
  388. $tc_tmp_str,
  389. ];
  390. }else{
  391. $re_arr = array_reverse($tmp_arr);
  392. if(!isset($re_arr[0])){
  393. $this->logic_ding->sendToDing("Apiexpress接口95行异常".json_encode($info,JSON_UNESCAPED_UNICODE));
  394. }
  395. if(strpos($re_arr[0],"[") !== false){
  396. $shipping_time_arr = explode("[",$re_arr[0] ) ;
  397. $shipping_time = $shipping_time_arr[0];
  398. if($info['expressstate'] == 6){
  399. $receive_tmp_arr = explode("[",$tmp_arr[0] ) ;
  400. $receive_time = $receive_tmp_arr[0];
  401. }
  402. }else{
  403. $shipping_time = date("Y-m-d H:i:s",$info['dlzemailtime']);
  404. if($info['expressstate'] == 6){
  405. $receive_time = -1;
  406. }
  407. }
  408. $express_trace = $re_arr;
  409. }
  410. ob_clean();
  411. }else{
  412. die($this->logic_tools->ret_json(-1,"物流信息存储异常"));
  413. }
  414. }else{
  415. //已出库 但是超过30天没有物流信息
  416. if(($info['library'] > 1) && ( time() - $info['librarytime'] > 24 * 3600 * 30)){
  417. die($this->logic_tools->ret_json(-1,"运单时间太久,暂无法查询"));
  418. }
  419. }
  420. if(empty($info['librarytime'])){
  421. $warehouse_processing = [
  422. "desc"=>"",
  423. "status"=>0,
  424. "date"=>"",
  425. "title"=>"shipped",
  426. ];
  427. }else{
  428. $warehouse_processing = [
  429. "desc"=>"Courier company picked up the package",
  430. "status"=>1,
  431. "date"=>date("Y-m-d H:i:s",$info['librarytime']),
  432. "title"=>"shipped",
  433. ];
  434. }
  435. $shipping = [
  436. "desc"=>"",
  437. "status"=>0,
  438. "date"=>"",
  439. "title"=>"in transit",
  440. ];
  441. //在途 没有签收 并且 出库了
  442. if(empty($receive_time) && $info['librarytime'] > 0){
  443. $shipping = [
  444. "desc"=>"",
  445. "status"=>1,
  446. "date"=>"",
  447. "title"=>"in transit",
  448. ];
  449. }
  450. if(empty($receive_time)){
  451. $received = [
  452. "desc"=>"",
  453. "status"=>0,
  454. "date"=>"",
  455. "title"=>"delivered",
  456. ];
  457. }else{
  458. if($receive_time < 0){
  459. $received = [
  460. "desc"=>"Order signed for successfully",
  461. "status"=>1,
  462. "date"=>0,
  463. "title"=>"delivered",
  464. ];
  465. }else{
  466. $received = [
  467. "desc"=>"Order signed for successfully",
  468. "status"=>1,
  469. "date"=>$receive_time,
  470. "title"=>"delivered",
  471. ];
  472. }
  473. }
  474. $icon = 7;
  475. $final_express_name = $express_name = strtolower($express_info['iscode']);
  476. if(strpos($express_name,"usps") !== false){
  477. $icon = 1;
  478. $final_express_name = "usps";
  479. }
  480. if(strpos($express_name,"dhl") !== false){
  481. $icon = 2;
  482. $final_express_name = "dhl";
  483. }
  484. if(strpos($express_name,"ups") !== false){
  485. $icon = 3;
  486. $final_express_name = "ups";
  487. }
  488. if(strpos($express_name,"fedex") !== false){
  489. $icon = 4;
  490. $final_express_name = "fedex";
  491. }
  492. if(strpos($express_name,"aramex") !== false){
  493. $icon = 5;
  494. $final_express_name = "aramex";
  495. }
  496. if(strpos($express_name,"ges") !== false){
  497. $icon = 6;
  498. $final_express_name = "ges";
  499. }
  500. $ret_arr = [
  501. "order_no"=>$order_no,
  502. 'icon'=>$icon,
  503. "express_name"=>strtoupper($final_express_name) ,
  504. "waybill"=>$info['waybill'],
  505. "preparing"=>[
  506. "desc"=>"The Order Has Been Created And TheMerchant lspreparing Your Order.",
  507. "status"=>1,
  508. "date"=>"",
  509. "title"=>"preparing order",
  510. ],//店家处理
  511. "warehouse_processing"=>$warehouse_processing,//工厂处理
  512. "shipping"=> $shipping,//快递发货
  513. "received"=>$received,//客户收货
  514. "express_trace"=>$express_trace,//快递跟踪信息
  515. "address_info"=>[
  516. "client"=>$info['client'],//客户姓名
  517. "name"=>$info['name'],//收件人姓名
  518. "country"=>$info['country'],//国家
  519. "province"=>$info['province'],//省份
  520. "city"=>$info['city'],//城市
  521. "address"=>$info['address'],//地址
  522. "address2"=>$info['address2'],//地址
  523. "street"=>$info['street'],//街道
  524. "phone"=>$info['phone'],//电话
  525. "zipcode"=>$info['zipcode'],//邮编
  526. ]
  527. ];
  528. die($this->logic_tools->ret_json(1,"success",$ret_arr));
  529. }
  530. }