123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517 |
- <?php
- class Model_Fedexv1 extends Lin_Model {
- function __construct(){
- parent::__construct();
- $this->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",
- //追物流轨迹的
- 'track_key'=>"l71bded23966b144df9fc01956f6dd655d",
- 'track_secret'=>"61730ddbae764dcba70f4737cdaaa6e7"
- ];
- 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'];
- }
- public function getTrackToken(){
- $res = $this->setting->find("skey='fedex_v1_track_access_token'");
-
- if($res){
- if(time() > $res['expiretime']){
- $this->setting->query("DELETE FROM `crowd_setting` WHERE `skey`='fedex_v1_track_access_token'");
- return $this->makeTrackToken();
- }
- return $res['svalue'];
- }else{
- return $this->makeTrackToken();
- }
- }
- public function makeTrackToken(){
- $url = "/oauth/token";
- $headers = [
- "Content-Type:application/x-www-form-urlencoded",
- ];
- $params = [
- "grant_type"=>"client_credentials",
- "client_id"=> $this->f_config['track_key'],
- "client_secret"=> $this->f_config['track_secret'],
- ];
- $params=http_build_query($params);
- $res = $this->sendPost($url,$params,$headers);
- if(isset($res['access_token'])){
- $this->setting->insert([
- 'skey'=>"fedex_v1_track_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();
- $hgbm = 67041900;
- if(isset($order_info['hgbm']))
- {
- if($order_info['hgbm'] != '')
- {
- $hgbm = $order_info['hgbm'];
- }
- }
- $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_PAK",
- "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"
- ]
- ]
- ]
- ],
- "rateRequestType"=>['LIST'],
- "labelSpecification"=>[
- "imageType"=>"PDF",
- "labelStockType"=>"STOCK_4X6",
- "customerSpecifiedDetail"=>[
- "docTabContent"=>[
- "docTabContentType"=>"STANDARD"
- ]
- ]
- ],
- "customsClearanceDetail"=>[
- "dutiesPayment"=>[
- "paymentType"=>"SENDER",//税费承担方
- ],
- "documentContent"=>"COMMODITY",
- "commodities"=>[
- [
- "numberOfPieces"=>$order_info['zjs'],
- "description"=>"CNHLT1403HAN/".$order_info['sbbm']."/".$order_info['sbpm'].'-'.$order_info['ts'].'PCS',
- "countryOfManufacture"=> "CN",
- 'harmonizedCode'=> $hgbm,//海关编码
- "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
- ],
- "customerReferences"=>[
- [
- "customerReferenceType"=>"CUSTOMER_REFERENCE",
- "value"=>$order_info['number']
- ]
-
- ],
- // "packageSpecialServices"=>[
- // // "signatureOptionType"=>($order_info['qm']==1)?"ADULT":"",
- // ]
- ],
- ]
- ]
- ];
- if($order_info['qm']==1){
- $params['requestedShipment']['requestedPackageLineItems'][0]["packageSpecialServices"]= [
- "signatureOptionType"=>"ADULT",
- ];
- }
- // echo "<pre>";
- // var_dump($params);
- // die;
- 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 "<pre>";
- // var_dump("Bearer ".$this->getAccessToken());
-
- $params = $this->setData($order_info);
- $this->logic_ding->sendToDing("fedex发货单请求的参数".json_encode($params));
- //var_dump($params);
- $params=json_encode($params);
- //var_dump($params);
- $start_time = time();
- $res = $this->sendPost($url,$params,$headers);
- //var_dump(json_encode($res,JSON_UNESCAPED_UNICODE));
- $this->logic_ding->sendToDing("fedex发货单回执参数"."【".$order_info['number']."】".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'];
- }
- }
- $end_time = time();
- if( $end_time - $start_time > 45){
- $this->logic_ding->addJobs('outtime_order',['number'=>$order_info['number']]);
- }
- 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){
- $url = "/track/v1/trackingnumbers";
- $params = [
- "includeDetailedScans"=>false,
- "trackingInfo"=>[
- [
- "trackingNumberInfo"=>[
- "trackingNumber"=> $number['waybill']
- ]
- ]
- ]
- ];
- $headers = [
- "Content-Type:application/json",
- "Authorization: Bearer ".$this->getTrackToken(),
- "x-locale" => "en_US",//这个是语种加国家
- "Accept: application/json",
- ];
- $params=json_encode($params);
- var_dump(json_encode($headers));
- var_dump($params);
- var_dump($this->getTrackToken());
- $res = $this->sendPost($url,$params,$headers);
- var_dump(json_encode($res));
- echo "<pre>";
- var_dump($res);
- }
- 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 "<pre>";
- 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 "<pre>";
- 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);
- }
- }
|