Apiexpress.php 20 KB

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