Model_itsxb.php 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  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. $this->logic_ding->sendToDing("3PE发货单请求的报文"."【".$data['number']."】".json_encode($params,JSON_UNESCAPED_SLASHES));
  30. $start_time = time();
  31. $res = $this->send($url,$params);
  32. $this->logic_ding->sendToDing("3PE发货单返回的报文"."【".$data['number']."】".$res);
  33. $res = json_decode($res,true);
  34. if(!isset($res['code']) || $res['code']!= 0){
  35. $g =array('x'=>'0','Description'=>json_encode($res ,JSON_UNESCAPED_UNICODE));
  36. return $g;
  37. }
  38. $rr = $this->getLabel($res['data']['waybillNo']);
  39. $this->logic_ding->sendToDing("3PE发货单获取返回label"."【".$data['number']."】".$rr);
  40. $rr = json_decode($rr,true);
  41. if(!isset($rr['code']) || $rr['code']!= 0){
  42. $g =array('x'=>'0','Description'=>json_encode($rr ,JSON_UNESCAPED_UNICODE));
  43. return $g;
  44. }
  45. $g = array('x'=>'1','waybill'=>$res['data']['deliveryNo'],'waybill2'=>'','label'=>$rr['labelUrl']);
  46. $end_time = time();
  47. if($g['x'] == 1){
  48. if( $end_time - $start_time > 45){
  49. $this->logic_ding->addJobs('outtime_order',['number'=>$data['number']]);
  50. }
  51. }
  52. return $g;
  53. }
  54. /**
  55. * 转化数据格式
  56. */
  57. private function set_params($data){
  58. //WK-EUUK-01 欧洲 WK-US-01 中美 WK-JP-01 日本
  59. $shipper = [
  60. 'shipperName'=>"LongYing",//姓名
  61. 'shipperCountry'=>"CN",//国家二字简码
  62. 'shipperProvince'=>'HeNan',//省
  63. 'shipperCity'=>'Xuchang',//市
  64. // 'shipperDistrict'=>'',//区
  65. 'shipperStreet'=>'Shangji Economic Development Zone',
  66. 'shipperAddress'=>'LongYingShiYe, Yinghao Rd.',//详细地址
  67. 'shipperPhone'=>'15939964739',//手机号
  68. ];
  69. $address = $data['address'];
  70. if(!empty($data['address2'])){
  71. $address = $address." ".$data['address2'];
  72. }
  73. $consignee = [
  74. 'consigneeName'=>$data['name'],//姓名
  75. 'consigneeCountry'=>$data['lb'],
  76. 'consigneeProvince'=>$data['province'],
  77. 'consigneeCity'=>$data['city'],
  78. 'consigneeAddress'=>$address,
  79. 'consigneePhone'=>$data['phone'],
  80. 'consigneePostcode'=>$data['zipcode'],
  81. 'consigneeEmail'=>$data['email'],
  82. ];
  83. $unit_weight = $data['zzl'] / $data['ts'];
  84. $unit_weight = sprintf("%.2f", $unit_weight);
  85. $orderDeclareList = [
  86. [
  87. 'englishName'=>$data['sbpm'],//英文名称
  88. 'chineseName'=>$data['zwpm'],
  89. 'quantity'=>$data['ts'],
  90. 'unitNetWeightD'=> $unit_weight,
  91. 'unitDeclarePriceD'=>$data['dtsbjz'],
  92. ]
  93. ];
  94. $packageList = [
  95. [
  96. 'packageLengthD'=>15,
  97. 'packageWidthD'=>10,
  98. 'packageHeightD'=>5,
  99. 'packageWeightD'=>$data['zzl'],
  100. ]
  101. ];
  102. $params = [
  103. 'customerOrderNo'=>$data['number'],
  104. 'logisticsProductCode'=>'WK-US-01',//中美特快专线 输方式代码/物流产品代码
  105. 'parcelType'=>11,// 10:包裹/11:PAK 袋/12:文件 包裹类型
  106. 'taxPayMode'=>11,//税金支付方式 10:DDU/11:DDP
  107. 'shipper'=>$shipper,
  108. 'consignee'=>$consignee,
  109. 'orderDeclareList'=>$orderDeclareList,
  110. 'packageList'=>$packageList,
  111. ];
  112. return $params;
  113. }
  114. public function getLabel($waybill){
  115. $url = $this->useUrl."label";
  116. $params = [
  117. 'mergePdf'=>1,
  118. 'nos'=>[$waybill]
  119. ];
  120. return $this->send($url,$params);
  121. }
  122. /**
  123. * 获取物流方式 这种用curl比较不友好 还是用post直接查吧
  124. */
  125. public function getWuliuFs(){
  126. echo "<pre>";
  127. $url = $this->useUrl."getLogistics";
  128. $rr = $this->send($url,"");
  129. var_dump($rr);
  130. die;
  131. }
  132. public function cancel_order($number){
  133. $url = $this->useUrl."cancelOrder";
  134. $params = [
  135. 'customerOrderNo'=>$number,
  136. ];
  137. $res = $this->send($url,$params);
  138. $this->logic_ding->sendToDing("3PE发货单取消返回"."【".$number."】".json_encode($params,JSON_UNESCAPED_SLASHES));
  139. return $res;
  140. }
  141. public function send($url , $params){
  142. $time = time();
  143. // 统一处理参数
  144. $params = empty($params) ? '' : json_encode($params,JSON_UNESCAPED_SLASHES);
  145. $signature = $this->getSign($params, $time);
  146. $headers = [
  147. 'apikey:'.$this->apikey,
  148. 'signature:'.$signature, // 修正拼写
  149. 'timestamp:'.$time,
  150. 'usertoken:'.$this->usertoken,
  151. 'Content-Type:application/json;charset=UTF-8' // 建议添加
  152. ];
  153. $ch = curl_init($url);
  154. $options = [
  155. CURLOPT_RETURNTRANSFER => true,
  156. CURLOPT_POST => true,
  157. CURLOPT_POSTFIELDS => $params,
  158. CURLOPT_HTTPHEADER => $headers,
  159. CURLOPT_TIMEOUT => 30, // 添加超时
  160. CURLOPT_CONNECTTIMEOUT => 10,
  161. // 生产环境应启用SSL验证
  162. // CURLOPT_SSL_VERIFYPEER => true,
  163. // CURLOPT_SSL_VERIFYHOST => 2,
  164. ];
  165. curl_setopt_array($ch, $options);
  166. $response = curl_exec($ch);
  167. // 检查HTTP状态码
  168. // $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
  169. // if ($response === false || $httpCode >= 400) {
  170. // $error = curl_error($ch);
  171. // curl_close($ch);
  172. // return [
  173. // "code" => -1,
  174. // "msg" => $error ?: "HTTP $httpCode",
  175. // "http_code" => $httpCode
  176. // ];
  177. // }
  178. curl_close($ch);
  179. return $response;
  180. }
  181. /**
  182. * 获取3pe的订单详情
  183. */
  184. public function getDetail($number){
  185. $url = $this->useUrl."getOrderInfo";
  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. }