Model_itsxb.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283
  1. <?php
  2. /**
  3. * 对接的是its的小包
  4. */
  5. class Model_itsxb extends Lin_Model {
  6. function __construct(){
  7. parent::__construct();
  8. $this->load->_model("Model_logic_ding",'logic_ding');
  9. }
  10. private $usertoken = "1ef5f2dee1084467b6e399238fa88233";
  11. private $apikey = "47608e3aca7c41d6af9c454cfa29fd60";
  12. private $appSecret ="a10ad09fdbfe4478b111894099d2ef4e";
  13. private $baseUrl = "http://oms.weiku.com.cn";
  14. private $useUrl = "http://oms.weiku.com.cn/its-api/cs/api/";
  15. /**
  16. * 获取签名
  17. */
  18. private function getSign($requestBody,$time){
  19. $signStr = $this->apikey.$this->appSecret.$this->usertoken.$time.$requestBody;
  20. $sign = md5($signStr);
  21. return $sign;
  22. }
  23. /**
  24. * 获取打印单数据
  25. */
  26. public function get_data($data){
  27. $url = $this->useUrl."createOrder";
  28. $params = $this->set_params($data);
  29. //美国专线条件判断
  30. if($data['printcode'] == '3PE_NONBOX' || $data['printcode'] == '3PE_XB'){
  31. if(strlen($params['consignee']['consigneeProvince']) != 2){
  32. $g =array('x'=>'0','Description'=>"州省信息异常");
  33. return $g;
  34. }
  35. //如果是11位的且首位是1的就把1去掉
  36. if(strlen($params['consignee']['consigneePhone']) == 11){
  37. $sw_str = substr($params['consignee']['consigneePhone'], 0, 1);
  38. if($sw_str != 1){
  39. $g =array('x'=>'0','Description'=>"收件人电话异常");
  40. return $g;
  41. }
  42. $params['consignee']['consigneePhone'] = substr($params['consignee']['consigneePhone'], 1);
  43. }
  44. }
  45. if($data['printcode'] == '3PE_EU_DPD'){
  46. $params['consignee']['consigneeCompany'] = $data['name'];
  47. $params['consignee']['consigneeProvince'] = $data['province'];
  48. }
  49. //consigneePhone
  50. $this->logic_ding->sendToDing("3PE发货单请求的报文"."【".$data['number']."】".json_encode($params,JSON_UNESCAPED_SLASHES));
  51. $start_time = time();
  52. $res = $this->send($url,$params);
  53. $this->logic_ding->sendToDing("3PE发货单返回的报文"."【".$data['number']."】".$res);
  54. $res = json_decode($res,true);
  55. if(!isset($res['code']) || $res['code']!= 0){
  56. $g =array('x'=>'0','Description'=>json_encode($res ,JSON_UNESCAPED_UNICODE));
  57. return $g;
  58. }
  59. $rr = $this->getLabel($res['data']['waybillNo']);
  60. $this->logic_ding->sendToDing("3PE发货单获取返回label"."【".$data['number']."】".$rr);
  61. $rr = json_decode($rr,true);
  62. if(!isset($rr['code']) || $rr['code']!= 0){
  63. $g =array('x'=>'0','Description'=>json_encode($rr ,JSON_UNESCAPED_UNICODE));
  64. return $g;
  65. }
  66. //$waybill = empty($res['data']['deliveryNo'])?$res['data']['postalTrackingNo']:$res['data']['deliveryNo'];
  67. $waybill = $res['data']['waybillNo'];
  68. $g = array('x'=>'1','waybill'=>$waybill,'waybill2'=>'','label'=>$rr['labelUrl']);
  69. $end_time = time();
  70. if($g['x'] == 1){
  71. if( $end_time - $start_time > 45){
  72. $this->logic_ding->addJobs('outtime_order',['number'=>$data['number']]);
  73. }
  74. }
  75. return $g;
  76. }
  77. /**
  78. * 转化数据格式
  79. */
  80. private function set_params($data){
  81. $data['zzl'] = 0.4;
  82. //WK-EUUK-01 欧洲 WK-US-01 中美 WK-JP-01 日本
  83. $shipper = [
  84. 'shipperName'=>"LongYing",//姓名
  85. 'shipperCountry'=>"CN",//国家二字简码
  86. 'shipperProvince'=>'HeNan',//省
  87. 'shipperCity'=>'Xuchang',//市
  88. // 'shipperDistrict'=>'',//区
  89. 'shipperStreet'=>'Shangji Economic Development Zone',
  90. 'shipperAddress'=>'LongYingShiYe, Yinghao Rd.',//详细地址
  91. 'shipperPhone'=>'15939964739',//手机号
  92. ];
  93. // 3pe的傻狗 改规则了 也不说
  94. // $address = $data['address'];
  95. // if(!empty($data['address2'])){
  96. // $address = $address." ".$data['address2'];
  97. // }
  98. $ToState = array('alabama'=>'AL','alaska'=>'AK','arizona'=>'AZ','arkansas'=>'AR','california'=>'CA','colorado'=>'CO','connecticut'=>'CT','delaware'=>'DE','florida'=>'FL','georgia'=>'GA','hawaii'=>'HI','idaho'=>'ID','illinois'=>'IL','indiana'=>'IN','iowa'=>'IA','kansas'=>'KS','kentucky'=>'KY','louisiana'=>'LA','maine'=>'ME','maryland'=>'MD','massachusetts'=>'MA','michigan'=>'MI','minnesota'=>'MN','mississippi'=>'MS','missouri'=>'MO','montana'=>'MT','nebraska'=>'NE','nevada'=>'NV','new hampshire'=>'NH','new jersey'=>'NJ','new mexico'=>'NM','new york'=>'NY','north carolina'=>'NC','north dakota'=>'ND','ohio'=>'OH','oklahoma'=>'OK','oregon'=>'OR','pennsylvania'=>'PA','rhode island'=>'RI','south carolina'=>'SC','south dakota'=>'SD','tennessee'=>'TN','texas'=>'TX','utah'=>'UT','vermont'=>'VT','virginia'=>'VA','washington'=>'WA','west virginia'=>'WV','wisconsin'=>'WI','wyoming'=>'WY','district of columbia'=>'DC','virgin islands'=>'VI','guam'=>'GU','puerto rico'=>'PR');
  99. $data['province'] = preg_replace('/( | | |\s)/',' ',$data['province']);
  100. $data['province'] = trim($data['province'],' ');
  101. $dataprovince = "";
  102. if(strlen($data['province'])==2){
  103. $dataprovince = strtoupper($data['province']);
  104. }else{
  105. if(isset($ToState[strtolower($data['province'])])){
  106. $dataprovince = $ToState[strtolower($data['province'])];
  107. }
  108. }
  109. $consignee = [
  110. 'consigneeName'=>$data['name'],//姓名
  111. 'consigneeCountry'=>$data['lb'],
  112. 'consigneeProvince'=>$dataprovince,
  113. 'consigneeCity'=>$data['city'],
  114. 'consigneeAddress'=>$data['address'],
  115. 'consigneePhone'=>$data['phone'],
  116. 'consigneePostcode'=>$data['zipcode'],
  117. 'consigneeEmail'=>$data['email'],
  118. ];
  119. if(!empty($data['address2'])){
  120. $consignee['consigneeAddress2'] = $data['address2'];
  121. }
  122. $unit_weight = $data['zzl'] / $data['ts'];
  123. $unit_weight = sprintf("%.2f", $unit_weight);
  124. $orderDeclareList = [
  125. [
  126. 'englishName'=>$data['sbpm'],//英文名称
  127. 'chineseName'=>$data['zwpm'],
  128. 'quantity'=>$data['ts'],
  129. 'unitNetWeightD'=> $unit_weight,
  130. 'unitDeclarePriceD'=>$data['dtsbjz'],
  131. ]
  132. ];
  133. $packageList = [
  134. [
  135. 'packageLengthD'=>15,
  136. 'packageWidthD'=>10,
  137. 'packageHeightD'=>5,
  138. 'packageWeightD'=>$data['zzl'],
  139. ]
  140. ];
  141. // $logisticsProductCode = "WK-US-01";
  142. // if($data['printcode'] == '3PE_NONBOX'){
  143. // $logisticsProductCode = "US-NONBOX";
  144. // }
  145. //临时改用3pe非盒子
  146. $logisticsProductCode = "WKSD-US-01";
  147. if($data['printcode'] == '3PE_EU_DPD'){
  148. $logisticsProductCode = "EU-DPD";
  149. }
  150. $number = $data['number'];
  151. if($data['printnumber'] > 0){
  152. $number = $number."_".$data['printnumber'];
  153. }
  154. $params = [
  155. 'customerOrderNo'=>$number,
  156. 'logisticsProductCode'=>$logisticsProductCode,//中美特快专线 输方式代码/物流产品代码
  157. 'parcelType'=>11,// 10:包裹/11:PAK 袋/12:文件 包裹类型
  158. 'taxPayMode'=>11,//税金支付方式 10:DDU/11:DDP
  159. 'shipper'=>$shipper,
  160. 'consignee'=>$consignee,
  161. 'orderDeclareList'=>$orderDeclareList,
  162. 'packageList'=>$packageList,
  163. ];
  164. return $params;
  165. }
  166. public function getLabel($waybill){
  167. $url = $this->useUrl."label";
  168. $params = [
  169. 'mergePdf'=>1,
  170. 'nos'=>[$waybill]
  171. ];
  172. return $this->send($url,$params);
  173. }
  174. /**
  175. * 获取物流方式 这种用curl比较不友好 还是用post直接查吧
  176. */
  177. public function getWuliuFs(){
  178. echo "<pre>";
  179. $url = $this->useUrl."getLogistics";
  180. $rr = $this->send($url,"");
  181. var_dump($rr);
  182. die;
  183. }
  184. public function cancel_order($number){
  185. $url = $this->useUrl."cancelOrder";
  186. $params = [
  187. 'customerOrderNo'=>$number,
  188. ];
  189. $res = $this->send($url,$params);
  190. $this->logic_ding->sendToDing("3PE发货单取消返回"."【".$number."】".json_encode($params,JSON_UNESCAPED_SLASHES));
  191. return $res;
  192. }
  193. public function send($url , $params){
  194. $time = time();
  195. // 统一处理参数
  196. $params = empty($params) ? '' : json_encode($params,JSON_UNESCAPED_SLASHES);
  197. $signature = $this->getSign($params, $time);
  198. $headers = [
  199. 'apikey:'.$this->apikey,
  200. 'signature:'.$signature, // 修正拼写
  201. 'timestamp:'.$time,
  202. 'usertoken:'.$this->usertoken,
  203. 'Content-Type:application/json;charset=UTF-8' // 建议添加
  204. ];
  205. $ch = curl_init($url);
  206. $options = [
  207. CURLOPT_RETURNTRANSFER => true,
  208. CURLOPT_POST => true,
  209. CURLOPT_POSTFIELDS => $params,
  210. CURLOPT_HTTPHEADER => $headers,
  211. CURLOPT_TIMEOUT => 30, // 添加超时
  212. CURLOPT_CONNECTTIMEOUT => 10,
  213. // 生产环境应启用SSL验证
  214. // CURLOPT_SSL_VERIFYPEER => true,
  215. // CURLOPT_SSL_VERIFYHOST => 2,
  216. ];
  217. curl_setopt_array($ch, $options);
  218. $response = curl_exec($ch);
  219. // 检查HTTP状态码
  220. // $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
  221. // if ($response === false || $httpCode >= 400) {
  222. // $error = curl_error($ch);
  223. // curl_close($ch);
  224. // return [
  225. // "code" => -1,
  226. // "msg" => $error ?: "HTTP $httpCode",
  227. // "http_code" => $httpCode
  228. // ];
  229. // }
  230. curl_close($ch);
  231. return $response;
  232. }
  233. /**
  234. * 获取3pe的订单详情
  235. */
  236. public function getDetail($number){
  237. $url = $this->useUrl."getOrderInfo";
  238. $params = [
  239. 'customerOrderNo'=>$number,
  240. ];
  241. $res = $this->send($url,$params);
  242. //$this->logic_ding->sendToDing("3PE发货单详情返回"."【".$number."】".$res);
  243. return $res;
  244. }
  245. }