Apiexpress.php 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  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. }else{
  24. $this->_a();
  25. }
  26. }
  27. public function _a(){
  28. die();
  29. }
  30. /**
  31. * 搜索订单状态和快递信息接口
  32. * @param $arg_array[0] string 请求店铺
  33. * @param $arg_array[1] string 请求单号
  34. */
  35. public function search(){
  36. $data = file_get_contents('PHP://input');
  37. $data = json_decode($data, true);
  38. $shop = isset($data['shop'])?$data['shop']:"";
  39. $order_no = isset($data['order_no'])?$data['order_no']:"";
  40. $apply_time = isset($data['time'])?$data['time']:0;
  41. $jiami_str = isset($data['key'])?$data['key']:"";
  42. $now_time = time();
  43. if(strlen( $apply_time."") != 10){
  44. die($this->logic_tools->ret_json(-1,"参数异常"));
  45. }
  46. if(empty($shop)){
  47. die($this->logic_tools->ret_json(-1,"请求店铺异常"));
  48. }
  49. $shop_key = $this->logic_tools->getshopname($shop);
  50. if(empty($jiami_str)){
  51. die($this->logic_tools->ret_json(-1,"秘钥信息不存在"));
  52. }
  53. $jiemi_str = $this->logic_tools->toolsjiemi($jiami_str,$this->key,$this->iv);
  54. if(empty($shop_key)){
  55. die($this->logic_tools->ret_json(-1,"该店铺的秘钥不存在"));
  56. }
  57. $jiemi_arr = explode("+",$jiemi_str);
  58. $jiemi_key = isset($jiemi_arr[0])?$jiemi_arr[0]:"";
  59. $jiemi_time = isset($jiemi_arr[1])?$jiemi_arr[1]:"";
  60. if((int)$jiemi_time != (int)$apply_time){
  61. die($this->logic_tools->ret_json(-1,"请求超时"));
  62. }
  63. if( $now_time - $apply_time > 100){
  64. die($this->logic_tools->ret_json(-1,"请求已超时"));
  65. }
  66. if($jiemi_key != $shop_key){
  67. die($this->logic_tools->ret_json(-1,"该店铺的秘钥不正确"));
  68. }
  69. if(empty($order_no)){
  70. die($this->logic_tools->ret_json(-1,"请求单号异常"));
  71. }
  72. $table_name = $this->logic_tools->getOrderTable($shop);
  73. if(empty($table_name)){
  74. die($this->logic_tools->ret_json(-1,"店铺未开通此功能!!!"));
  75. }
  76. $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");
  77. if(empty($info)){
  78. die($this->logic_tools->ret_json(-1,"未查询到相关快递信息"));
  79. }
  80. $receive_time = "";//客户签到时间
  81. $shipping_time = "";//快递接受发货时间
  82. $express_trace = [];
  83. $express_info = $this->express->read($info['express']);
  84. if(!empty($info['excontent'])){
  85. $tmp_arr = explode("<br />",$info['excontent']);
  86. if(empty($tmp_arr)){
  87. array_pop($tmp_arr);
  88. $re_arr = array_reverse($tmp_arr);
  89. if(!isset($re_arr[0])){
  90. $this->logic_ding->sendToDing("Apiexpress接口95行异常".json_encode($info,JSON_UNESCAPED_UNICODE));
  91. }
  92. if(strpos($re_arr[0],"[") !== false){
  93. $shipping_time_arr = explode("[",$re_arr[0] ) ;
  94. $shipping_time = $shipping_time_arr[0];
  95. if($info['expressstate'] == 6){
  96. $receive_tmp_arr = explode("[",$tmp_arr[0] ) ;
  97. $receive_time = $receive_tmp_arr[0];
  98. }
  99. }else{
  100. $shipping_time = date("Y-m-d H:i:s",$info['dlzemailtime']);
  101. if($info['expressstate'] == 6){
  102. $receive_time = -1;
  103. }
  104. }
  105. $express_trace = $re_arr;
  106. }else{
  107. die($this->logic_tools->ret_json(-1,"运单时间太久,暂无法查询"));
  108. }
  109. }
  110. if(empty($info['dtime'])){
  111. $preparing = [
  112. "desc"=>"",
  113. "status"=>0,
  114. "date"=>"",
  115. ];
  116. }else{
  117. $preparing = [
  118. "desc"=>"The Order Has Been Created And TheMerchant lspreparing Your Order.",
  119. "status"=>1,
  120. "date"=>date("Y-m-d H:i:s",$info['dtime']),
  121. ];
  122. }
  123. if(empty($info['printtime'])){
  124. $warehouse_processing = [
  125. "desc"=>"",
  126. "status"=>0,
  127. "date"=>"",
  128. ];
  129. }else{
  130. $warehouse_processing = [
  131. "desc"=>"Packing And Final Check",
  132. "status"=>1,
  133. "date"=>date("Y-m-d H:i:s",$info['printtime']),
  134. ];
  135. }
  136. if(empty($shipping_time)){
  137. $shipping = [
  138. "desc"=>"",
  139. "status"=>0,
  140. "date"=>"",
  141. ];
  142. }else{
  143. $shipping = [
  144. "desc"=>"Courier Company Picked Up The Package",
  145. "status"=>1,
  146. "date"=>$shipping_time,
  147. ];
  148. }
  149. if(empty($receive_time)){
  150. $received = [
  151. "desc"=>"",
  152. "status"=>0,
  153. "date"=>"",
  154. ];
  155. }else{
  156. if($receive_time < 0){
  157. $received = [
  158. "desc"=>"Order signed for successfully",
  159. "status"=>1,
  160. "date"=>0,
  161. ];
  162. }else{
  163. $received = [
  164. "desc"=>"Order signed for successfully",
  165. "status"=>1,
  166. "date"=>$receive_time,
  167. ];
  168. }
  169. }
  170. $icon = 7;
  171. $final_express_name = $express_name = strtolower($express_info['iscode']);
  172. if(strpos($express_name,"usps") !== false){
  173. $icon = 1;
  174. $final_express_name = "usps";
  175. }
  176. if(strpos($express_name,"dhl") !== false){
  177. $icon = 2;
  178. $final_express_name = "dhl";
  179. }
  180. if(strpos($express_name,"ups") !== false){
  181. $icon = 3;
  182. $final_express_name = "ups";
  183. }
  184. if(strpos($express_name,"fedex") !== false){
  185. $icon = 4;
  186. $final_express_name = "fedex";
  187. }
  188. if(strpos($express_name,"aramex") !== false){
  189. $icon = 5;
  190. $final_express_name = "aramex";
  191. }
  192. if(strpos($express_name,"ges") !== false){
  193. $icon = 6;
  194. $final_express_name = "ges";
  195. }
  196. $ret_arr = [
  197. "order_no"=>$order_no,
  198. 'icon'=>$icon,
  199. "express_name"=>strtoupper($final_express_name) ,
  200. "waybill"=>$info['waybill'],
  201. "preparing"=>$preparing,//店家处理
  202. "warehouse_processing"=>$warehouse_processing,//工厂处理
  203. "shipping"=> $shipping,//快递发货
  204. "received"=>$received,//客户收货
  205. "express_trace"=>$express_trace,//快递跟踪信息
  206. "address_info"=>[
  207. "client"=>$info['client'],//客户姓名
  208. "name"=>$info['name'],//收件人姓名
  209. "country"=>$info['country'],//国家
  210. "province"=>$info['province'],//省份
  211. "city"=>$info['city'],//城市
  212. "address"=>$info['address'],//地址
  213. "address2"=>$info['address2'],//地址
  214. "street"=>$info['street'],//街道
  215. "phone"=>$info['phone'],//电话
  216. "zipcode"=>$info['zipcode'],//邮编
  217. ]
  218. ];
  219. die($this->logic_tools->ret_json(1,"success",$ret_arr));
  220. }
  221. }