load->_model("Model_logic_ding",'logic_ding'); } private $usertoken = "1ef5f2dee1084467b6e399238fa88233"; private $apikey = "47608e3aca7c41d6af9c454cfa29fd60"; private $appSecret ="a10ad09fdbfe4478b111894099d2ef4e"; private $baseUrl = "http://oms.weiku.com.cn"; private $useUrl = "http://oms.weiku.com.cn/its-api/cs/api/"; /** * 获取签名 */ private function getSign($requestBody,$time){ $signStr = $this->apikey.$this->appSecret.$this->usertoken.$time.$requestBody; $sign = md5($signStr); return $sign; } /** * 获取打印单数据 */ public function get_data($data){ $url = $this->useUrl."createOrder"; $params = $this->set_params($data); echo "
";
print_r($params);
die;
if(strlen($params['consignee']['consigneeProvince']) != 2){
$g =array('x'=>'0','Description'=>"州省信息异常");
return $g;
}
//如果是11位的且首位是1的就把1去掉
if(strlen($params['consignee']['consigneePhone']) == 11){
$sw_str = substr($params['consignee']['consigneePhone'], 0, 1);
if($sw_str != 1){
$g =array('x'=>'0','Description'=>"收件人电话异常");
return $g;
}
$params['consignee']['consigneePhone'] = substr($params['consignee']['consigneePhone'], 1);
}
//consigneePhone
$this->logic_ding->sendToDing("3PE发货单请求的报文"."【".$data['number']."】".json_encode($params,JSON_UNESCAPED_SLASHES));
$start_time = time();
$res = $this->send($url,$params);
$this->logic_ding->sendToDing("3PE发货单返回的报文"."【".$data['number']."】".$res);
$res = json_decode($res,true);
if(!isset($res['code']) || $res['code']!= 0){
$g =array('x'=>'0','Description'=>json_encode($res ,JSON_UNESCAPED_UNICODE));
return $g;
}
$rr = $this->getLabel($res['data']['waybillNo']);
$this->logic_ding->sendToDing("3PE发货单获取返回label"."【".$data['number']."】".$rr);
$rr = json_decode($rr,true);
if(!isset($rr['code']) || $rr['code']!= 0){
$g =array('x'=>'0','Description'=>json_encode($rr ,JSON_UNESCAPED_UNICODE));
return $g;
}
//$waybill = empty($res['data']['deliveryNo'])?$res['data']['postalTrackingNo']:$res['data']['deliveryNo'];
$waybill = $res['data']['waybillNo'];
$g = array('x'=>'1','waybill'=>$waybill,'waybill2'=>'','label'=>$rr['labelUrl']);
$end_time = time();
if($g['x'] == 1){
if( $end_time - $start_time > 45){
$this->logic_ding->addJobs('outtime_order',['number'=>$data['number']]);
}
}
return $g;
}
/**
* 转化数据格式
*/
private function set_params($data){
$data['zzl'] = 0.4;
//WK-EUUK-01 欧洲 WK-US-01 中美 WK-JP-01 日本
$shipper = [
'shipperName'=>"LongYing",//姓名
'shipperCountry'=>"CN",//国家二字简码
'shipperProvince'=>'HeNan',//省
'shipperCity'=>'Xuchang',//市
// 'shipperDistrict'=>'',//区
'shipperStreet'=>'Shangji Economic Development Zone',
'shipperAddress'=>'LongYingShiYe, Yinghao Rd.',//详细地址
'shipperPhone'=>'15939964739',//手机号
];
// 3pe的傻狗 改规则了 也不说
// $address = $data['address'];
// if(!empty($data['address2'])){
// $address = $address." ".$data['address2'];
// }
$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');
$data['province'] = preg_replace('/( | | |\s)/',' ',$data['province']);
$data['province'] = trim($data['province'],' ');
$dataprovince = "";
if(strlen($data['province'])==2){
$dataprovince = strtoupper($data['province']);
}else{
if(isset($ToState[strtolower($data['province'])])){
$dataprovince = $ToState[strtolower($data['province'])];
}
}
$consignee = [
'consigneeName'=>$data['name'],//姓名
'consigneeCountry'=>$data['lb'],
'consigneeProvince'=>$dataprovince,
'consigneeCity'=>$data['city'],
'consigneeAddress'=>$data['address'],
'consigneePhone'=>$data['phone'],
'consigneePostcode'=>$data['zipcode'],
'consigneeEmail'=>$data['email'],
];
if(!empty($data['address2'])){
$consignee['consigneeAddress2'] = $data['address2'];
}
$unit_weight = $data['zzl'] / $data['ts'];
$unit_weight = sprintf("%.2f", $unit_weight);
$orderDeclareList = [
[
'englishName'=>$data['sbpm'],//英文名称
'chineseName'=>$data['zwpm'],
'quantity'=>$data['ts'],
'unitNetWeightD'=> $unit_weight,
'unitDeclarePriceD'=>$data['dtsbjz'],
]
];
$packageList = [
[
'packageLengthD'=>15,
'packageWidthD'=>10,
'packageHeightD'=>5,
'packageWeightD'=>$data['zzl'],
]
];
// $logisticsProductCode = "WK-US-01";
// if($data['printcode'] == '3PE_NONBOX'){
// $logisticsProductCode = "US-NONBOX";
// }
//临时改用3pe非盒子
$logisticsProductCode = "WKSD-US-01";
if($data['printcode'] == '3PE_EU_DPD'){
$logisticsProductCode = "EU-DPD";
}
$number = $data['number'];
if($data['printnumber'] > 0){
$number = $number."_".$data['printnumber'];
}
$params = [
'customerOrderNo'=>$number,
'logisticsProductCode'=>$logisticsProductCode,//中美特快专线 输方式代码/物流产品代码
'parcelType'=>11,// 10:包裹/11:PAK 袋/12:文件 包裹类型
'taxPayMode'=>11,//税金支付方式 10:DDU/11:DDP
'shipper'=>$shipper,
'consignee'=>$consignee,
'orderDeclareList'=>$orderDeclareList,
'packageList'=>$packageList,
];
return $params;
}
public function getLabel($waybill){
$url = $this->useUrl."label";
$params = [
'mergePdf'=>1,
'nos'=>[$waybill]
];
return $this->send($url,$params);
}
/**
* 获取物流方式 这种用curl比较不友好 还是用post直接查吧
*/
public function getWuliuFs(){
echo "";
$url = $this->useUrl."getLogistics";
$rr = $this->send($url,"");
var_dump($rr);
die;
}
public function cancel_order($number){
$url = $this->useUrl."cancelOrder";
$params = [
'customerOrderNo'=>$number,
];
$res = $this->send($url,$params);
$this->logic_ding->sendToDing("3PE发货单取消返回"."【".$number."】".json_encode($params,JSON_UNESCAPED_SLASHES));
return $res;
}
public function send($url , $params){
$time = time();
// 统一处理参数
$params = empty($params) ? '' : json_encode($params,JSON_UNESCAPED_SLASHES);
$signature = $this->getSign($params, $time);
$headers = [
'apikey:'.$this->apikey,
'signature:'.$signature, // 修正拼写
'timestamp:'.$time,
'usertoken:'.$this->usertoken,
'Content-Type:application/json;charset=UTF-8' // 建议添加
];
$ch = curl_init($url);
$options = [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $params,
CURLOPT_HTTPHEADER => $headers,
CURLOPT_TIMEOUT => 30, // 添加超时
CURLOPT_CONNECTTIMEOUT => 10,
// 生产环境应启用SSL验证
// CURLOPT_SSL_VERIFYPEER => true,
// CURLOPT_SSL_VERIFYHOST => 2,
];
curl_setopt_array($ch, $options);
$response = curl_exec($ch);
// 检查HTTP状态码
// $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
// if ($response === false || $httpCode >= 400) {
// $error = curl_error($ch);
// curl_close($ch);
// return [
// "code" => -1,
// "msg" => $error ?: "HTTP $httpCode",
// "http_code" => $httpCode
// ];
// }
curl_close($ch);
return $response;
}
/**
* 获取3pe的订单详情
*/
public function getDetail($number){
$url = $this->useUrl."getOrderInfo";
$params = [
'customerOrderNo'=>$number,
];
$res = $this->send($url,$params);
//$this->logic_ding->sendToDing("3PE发货单详情返回"."【".$number."】".$res);
return $res;
}
}