load->_model('Model_aapeizhi','aapeizhi'); $this->load->_model("Model_logic_ding",'logic_ding'); } public $base_url = "https://apis.fedex.com.cn"; public $f_config = [ "account"=>"692362136", "key"=>"l7c6ae3d27cce34bdca31cf6e0ff4af125", 'secret' =>'475eb390bf334bda8b5f44f1c07b7c10', "client_id"=>"l7c6ae3d27cce34bdca31cf6e0ff4af125", "client_secret"=>"475eb390bf334bda8b5f44f1c07b7c10", ]; public function getAccessToken(){ $res = $this->setting->find("skey='fedex_v1_access_token'"); if($res){ if(time() > $res['expiretime']){ $this->setting->query("DELETE FROM `crowd_setting` WHERE `skey`='fedex_v1_access_token'"); return $this->makeAccessToken(); } return $res['svalue']; }else{ return $this->makeAccessToken(); } } public function makeAccessToken(){ $url = "/oauth/token"; $headers = [ "Content-Type:application/x-www-form-urlencoded", ]; $params = [ "grant_type"=>"client_credentials", "client_id"=> $this->f_config['client_id'], "client_secret"=> $this->f_config['client_secret'], ]; $params=http_build_query($params); $res = $this->sendPost($url,$params,$headers); if(isset($res['access_token'])){ $this->setting->insert([ 'skey'=>"fedex_v1_access_token", 'svalue' => $res['access_token'], 'expiretime' => time() + 3600 -10 ]); } return $res['access_token']; } private function setData($order_info){ $customer_streets = []; $customer_streets[] = $order_info['address']; if(!empty($order_info['address2'])){ $customer_streets[] = $order_info['address2']; } $state_codes = $this->aapeizhi->getFedexStateCode(); $params = [ "labelResponseOptions"=>"URL_ONLY", "accountNumber"=>[ "value"=> (int)$this->f_config['account'] ], "requestedShipment"=>[ "shipper"=>[ "contact"=>[ "personName"=>"LONGYI", "phoneNumber"=>"18539006340", "companyName"=>"LONGYI", ], "address"=>[ "streetLines"=> [ "1403, Buliding C, Bodi Center", "NingWei Street, XiaoShan" ], "city"=>"Hangzhou", "stateOrProvinceCode"=>"", "postalCode"=>310000,//杭州邮编 "countryCode"=>$order_info['warehouse']['lb'] ], ], "recipients"=>[ [ "contact" => [ "personName"=>$order_info['name'], "phoneNumber"=>$order_info['phone'], "companyName"=>$order_info['client'] ], "address"=>[ "streetLines" =>$customer_streets, "city"=>$order_info['city'], "stateOrProvinceCode"=>strlen($order_info['province'])==2?strtoupper($order_info['province']):$state_codes[strtolower($order_info['province'])], "postalCode"=>(string)$order_info['zipcode'], "countryCode"=>$order_info['lb'], ], ] ], "shipDatestamp"=>date("Y-m-d"), "serviceType"=>($order_info['js'] == 3)?"FEDEX_INTERNATIONAL_PRIORITY":"FEDEX_INTERNATIONAL_CONNECT_PLUS", "packagingType"=> "FEDEX_BOX", "pickupType"=>"DROPOFF_AT_FEDEX_LOCATION", "blockInsightVisibility"=>false, "shippingChargesPayment"=>[ "paymentType"=>"SENDER" ], "shipmentSpecialServices"=>[ "specialServiceTypes"=>[ "ELECTRONIC_TRADE_DOCUMENTS", ], "etdDetail"=>[ "requestedDocumentTypes"=>[ "COMMERCIAL_INVOICE" ] ] ], "shippingDocumentSpecification"=>[ "shippingDocumentTypes"=>[ "COMMERCIAL_INVOICE" ], "commercialInvoiceDetail"=>[ "documentFormat"=>[ "docType"=>"PDF", "stockType"=>"PAPER_LETTER" ], "customerImageUsages"=>[ [ "id"=> "IMAGE_1", "type"=> "SIGNATURE", "providedImageType"=> "SIGNATURE" ], [ "id"=> "IMAGE_2", "type"=> "LETTER_HEAD", "providedImageType"=> "LETTER_HEAD" ] ] ] ], "labelSpecification"=>[ "imageType"=>"PDF", "labelStockType"=>"STOCK_4X6", "customerSpecifiedDetail"=>[ "docTabContent"=>[ "docTabContentType"=>"STANDARD" ] ] ], "customsClearanceDetail"=>[ "dutiesPayment"=>[ "paymentType"=>"SENDER", ], "documentContent"=>"COMMODITY", "commodities"=>[ [ "description"=>$order_info['sbpm'].'-'.$order_info['ts'].'PCS', "countryOfManufacture"=> "CN", "quantity"=> $order_info['ts'], "quantityUnits"=> "cm", "unitPrice"=> [ "amount"=> $order_info['dtsbjz'], "currency"=> "USD" ], "customsValue"=> [ "amount"=>$order_info['zsbjz'], "currency"=> "USD" ], "weight"=> [ "units"=> "KG", "value"=> 0.4 ] ] ] ], "requestedPackageLineItems"=>[ [ "weight"=>[ "units"=>"KG", "value"=>0.4 ] ] ] ] ]; return $params; } //上传货物信息 获取运单 托运 public function get_data($order_info){ try{ $url = "/ship/v1/shipments"; $headers = [ "x-customer-transaction-id"=>$order_info['number'], "Content-Type:application/json", "Authorization: Bearer ".$this->getAccessToken(), "x-locale" => "en_US",//这个是语种加国家 "Accept: application/json", ]; // echo "
";
// var_dump("Bearer ".$this->getAccessToken());
$params = $this->setData($order_info);
//var_dump($params);
$params=json_encode($params);
//var_dump($params);
$res = $this->sendPost($url,$params,$headers);
//var_dump(json_encode($res,JSON_UNESCAPED_UNICODE));
//var_dump($res);
//die;
if(isset($res['code']) && $res['code'] == -1){
return array('x'=>'0','Description'=>$res['msg']);
}
if(!isset($res["transactionId"])){
return array('x'=>'0','Description'=>'请求异常');
}
if(isset($res["errors"])){
return array('x'=>'0','Description'=>json_encode($res["errors"]));
}
$invoice_url = "";
foreach($res['output']['transactionShipments'][0]['shipmentDocuments'] as $v){
if($v['contentType'] == "COMMERCIAL_INVOICE"){
$invoice_url = $v['url'];
}
}
return
[
'x'=>'1',
'waybill'=>$res['output']['transactionShipments'][0]['masterTrackingNumber'],
'label'=>$res['output']['transactionShipments'][0]['pieceResponses'][0]['packageDocuments'][0]['url'],
'invoice'=>$invoice_url,
];
}catch(Exception $e){
$error_msg = "error:[fedexv1]创建发货单出错".$e->getMessage()."|".$e->getLine()."|".$e->getFile()."|请求参数".json_encode($order_info,JSON_UNESCAPED_UNICODE);
$this->logic_ding->sendToDing($error_msg);
if(isset($res)){
$error_msg = "error:[fedexv1]创建发货单出错".$e->getMessage()."|".$e->getLine()."|".$e->getFile()."|返回参数".json_encode($res,JSON_UNESCAPED_UNICODE);
$this->logic_ding->sendToDing($error_msg);
}
}
}
//根据单号获取 快递信息
public function get_logistics($number){
}
public function sendPost($url,$params,$headers){
// var_dump($bodyString);
// 设置请求的URL
$all_url = $this->base_url.$url;
var_dump($all_url);
// 初始化cURL会话
$ch = curl_init($all_url);
// 设置cURL选项
$options = array(
CURLOPT_SSL_VERIFYPEER=>false,
CURLOPT_SSL_VERIFYHOST=>false,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $params,
CURLOPT_HTTPHEADER => $headers,
CURLOPT_ENCODING => "gzip,deflate"
);
// 应用这些选项到cURL会话
curl_setopt_array($ch, $options);
// 执行cURL会话并获取响应
$response = curl_exec($ch);
// 检查是否有错误发生
if ($response === false) {
$error = curl_error($ch);
curl_close($ch);
return [
"code"=> -1,
"msg"=> $error
];
}
// 关闭cURL会话
curl_close($ch);
// 输出响应内容
return json_decode($response,true);
}
//上传数字签名 和 信头 接口在 文件上传api 主要就传一次 用postman传就行 不费事了 etd 必须先传
public function upload_img(){
$all_url = "https://documentapitest.prod.fedex.com/sandbox/documents/v1/lhsimages/upload";
}
public function send_sign(){
$params = [
"document"=>[
"referenceId"=>"1234",
"name"=>"sign.png",
"contentType"=>"image/png",
"meta"=>[
"imageType"=>"SIGNATURE",
"imageIndex"=>"IMAGE_1"
]
],
"rules"=>[
"workflowName"=> "LetterheadSignature"
]
];
$body = [
'document'=>json_encode($params),
'attachment'=>new CURLFile("D:\wwwroot\cerp.wepolicy.cn\sign.png")
];
$headers = [
"x-customer-transaction-id"=>time(),
"Content-Type:multipart/form-data",
"Authorization: Bearer ".$this->getAccessToken(),
"x-locale" => "en_US",//这个是语种加国家
"Accept: application/json",
];
$r = $this->send_img_post($body,$headers);
echo "";
var_dump($r);
}
public function send_xintou(){
$params = [
"document"=>[
"referenceId"=>"1234",
"name"=>"Logo.png",
"contentType"=>"image/png",
"meta"=>[
"imageType"=>"LETTERHEAD",
"imageIndex"=>"IMAGE_2"
]
],
"rules"=>[
"workflowName"=> "LetterheadSignature"
]
];
$body = [
'document'=>json_encode($params),
'attachment'=>new CURLFile("D:\wwwroot\cerp.wepolicy.cn\Logo.png")
];
$headers = [
"x-customer-transaction-id"=>time(),
"Content-Type:multipart/form-data",
"Authorization: Bearer ".$this->getAccessToken(),
"x-locale" => "en_US",//这个是语种加国家
"Accept: application/json",
];
$r = $this->send_img_post($body,$headers);
echo "";
var_dump($r);
}
public function send_img_post($body,$headers){
$upload_img_url = "/documents/v1/lhsimages/upload";
$all_url = "https://documentapi.prod.fedex.com/documents/v1/lhsimages/upload";
var_dump($all_url);
var_dump($body);
// 初始化cURL会话
$ch = curl_init($all_url);
// 设置cURL选项
$options = array(
CURLOPT_SSL_VERIFYPEER=>false,
CURLOPT_SSL_VERIFYHOST=>false,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $body,
CURLOPT_HTTPHEADER => $headers,
CURLOPT_ENCODING => "gzip,deflate"
);
// 应用这些选项到cURL会话
curl_setopt_array($ch, $options);
// 执行cURL会话并获取响应
$response = curl_exec($ch);
// 检查是否有错误发生
if ($response === false) {
$error = curl_error($ch);
curl_close($ch);
return [
"code"=> -1,
"msg"=> $error
];
}
// 关闭cURL会话
curl_close($ch);
// 输出响应内容
return json_decode($response,true);
}
}