php - 使用 PHP 的 FedEx Shipping API

标签 php api curl postman fedex

我正在尝试使用 php 集成 fedex api,但出现了一些错误。我正在使用以下代码:

  <?php

   $url = 'https://sandbox-api.postmen.com/v3/rates';
   $method = 'POST';
   $headers = array(
       "content-type: application/json",
       "postmen-api-key: 6ea35e71-385c-8cda-5729-f7d02c1ceb5a"
   );
   $body = '{"async":false,"shipper_accounts":[{"id":"00000000-0000-0000-0000-000000000000"}],"is_document":false,"shipment":{"ship_from":{"contact_name":"Elmira Zulauf","company_name":"Kemmer-Gerhold","street1":"662 Flatley Manors","country":"HKG","type":"business"},"ship_to":{"contact_name":"Dr. Moises Corwin","phone":"1-140-225-6410","email":"Giovanna42@yahoo.com","street1":"28292 Daugherty Orchard","city":"Beverly Hills","postal_code":"90209","state":"CA","country":"USA","type":"residential"},"parcels":[{"description":"Food XS","box_type":"custom","weight":{"value":2,"unit":"kg"},"dimension":{"width":20,"height":40,"depth":40,"unit":"cm"},"items":[{"description":"Food Bar","origin_country":"USA","quantity":2,"price":{"amount":3,"currency":"USD"},"weight":{"value":0.6,"unit":"kg"},"sku":"imac2014"}]}]}}';

   $curl = curl_init();

   curl_setopt_array($curl, array(
       CURLOPT_RETURNTRANSFER => true,
       CURLOPT_URL => $url,
       CURLOPT_CUSTOMREQUEST => $method,
       CURLOPT_HTTPHEADER => $headers,
     CURLOPT_POSTFIELDS => $body
   ));

   $response = curl_exec($curl);
   $err = curl_error($curl);

   curl_close($curl);

   if ($err) {
     echo "cURL Error #:" . $err;
   } else {
     echo $response;
   }

这是我从代码中得到的结果:

  {"meta":{"code":4105,"message":"Invalid URL or API key.","details":[],"retryable":false},"data":{}}

我使用的一些其他代码是:

    <?php
            //your account details here
            $key = '';
            $password = ' ';
            $account_number = '';
            $meter_number = '';

            $xml = '<?xml version="1.0" encoding="UTF-8"?>
            <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://fedex.com/ws/rate/v13"><SOAP-ENV:Body><ns1:RateRequest>
            <ns1:WebAuthenticationDetail>
            <ns1:UserCredential>
            <ns1:Key>'.$key.'</ns1:Key>
            <ns1:Password>'.$password.'</ns1:Password>
            </ns1:UserCredential></ns1:WebAuthenticationDetail> 
            <ns1:ClientDetail>
            <ns1:AccountNumber>'.$account_number.'</ns1:AccountNumber>
            <ns1:MeterNumber>'.$meter_number.'</ns1:MeterNumber>
            </ns1:ClientDetail>
            <ns1:TransactionDetail><ns1:CustomerTransactionId> *** Rate Request v13 using PHP ***</ns1:CustomerTransactionId></ns1:TransactionDetail><ns1:Version><ns1:ServiceId>crs</ns1:ServiceId><ns1:Major>13</ns1:Major><ns1:Intermediate>0</ns1:Intermediate><ns1:Minor>0</ns1:Minor></ns1:Version><ns1:ReturnTransitAndCommit>true</ns1:ReturnTransitAndCommit><ns1:RequestedShipment>
            <ns1:DropoffType>REGULAR_PICKUP</ns1:DropoffType>
            <ns1:ServiceType>FEDEX_EXPRESS_SAVER</ns1:ServiceType>
            <ns1:PackagingType>YOUR_PACKAGING</ns1:PackagingType>
            <ns1:TotalInsuredValue><ns1:Currency>USD</ns1:Currency></ns1:TotalInsuredValue>
            <ns1:Shipper><ns1:Contact><ns1:PersonName>Sender Name</ns1:PersonName><ns1:CompanyName>Sender Company Name</ns1:CompanyName><ns1:PhoneNumber></ns1:PhoneNumber></ns1:Contact><ns1:Address><ns1:StreetLines></ns1:StreetLines><ns1:City></ns1:City><ns1:StateOrProvinceCode></ns1:StateOrProvinceCode>
            <ns1:PostalCode>94040</ns1:PostalCode><ns1:CountryCode>US</ns1:CountryCode></ns1:Address></ns1:Shipper>
            <ns1:Recipient><ns1:Contact><ns1:PersonName>Recipient Name</ns1:PersonName><ns1:CompanyName>Company Name</ns1:CompanyName><ns1:PhoneNumber></ns1:PhoneNumber></ns1:Contact><ns1:Address><ns1:StreetLines></ns1:StreetLines><ns1:City></ns1:City><ns1:StateOrProvinceCode></ns1:StateOrProvinceCode>
            <ns1:PostalCode>98052</ns1:PostalCode>
            <ns1:CountryCode>US</ns1:CountryCode><ns1:Residential>false</ns1:Residential></ns1:Address></ns1:Recipient><ns1:ShippingChargesPayment><ns1:PaymentType>SENDER</ns1:PaymentType><ns1:Payor>
            <ns1:ResponsibleParty>
            <ns1:AccountNumber>'.$account_number.'</ns1:AccountNumber>
            </ns1:ResponsibleParty>
            </ns1:Payor></ns1:ShippingChargesPayment>
            <ns1:RateRequestTypes>ACCOUNT</ns1:RateRequestTypes><ns1:PackageCount>1</ns1:PackageCount><ns1:RequestedPackageLineItems><ns1:SequenceNumber>1</ns1:SequenceNumber>
            <ns1:GroupPackageCount>1</ns1:GroupPackageCount>
            <ns1:Weight><ns1:Units>LB</ns1:Units><ns1:Value>20</ns1:Value></ns1:Weight>
            <ns1:Dimensions>
            <ns1:Length>10</ns1:Length>
            <ns1:Width>10</ns1:Width>
            <ns1:Height>10</ns1:Height>
            <ns1:Units>IN</ns1:Units>
            </ns1:Dimensions>
            </ns1:RequestedPackageLineItems>
            </ns1:RequestedShipment></ns1:RateRequest></SOAP-ENV:Body></SOAP-ENV:Envelope>';

            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, 'https://wsbeta.fedex.com:443/web-services');
            curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
            curl_setopt($ch, CURLOPT_VERBOSE, 1);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_POST, 1);
            $result_xml = curl_exec($ch);

            // remove colons and dashes to simplify the xml
            $result_xml = str_replace(array(':','-'), '', $result_xml);
             $result = @simplexml_load_string($result_xml);
            //$array_data = json_decode(json_encode(simplexml_load_string($result_xml)), true);
            // print_r($result); die();


            print '<pre>';
            print 'Rate: $';
            //echo  $result->Amount;
            //echo $array_data->SOAPENVBody;
            print '<hr/>';
            echo $array_data->Amount;
            print_r($result);

那会显示如下错误

                       [v13Severity] => ERROR
                        [v13Source] => prof
                        [v13Code] => 1000
                        [v13Message] => Authentication Failed

任何人都可以帮助我。我正在努力寻找过去 2 天的解决方案。 有人对此有任何想法或有任何关于 FedEx express 运费的 api 吗?我必须使用此 API 仅查找运费。

提前致谢。

最佳答案

您的 url 指向费率 api,请找到正确的运送 url。

关于php - 使用 PHP 的 FedEx Shipping API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41441241/

相关文章:

php - 如何使用 PHP 解析 HTML 表格?

PHP SVN 更新 - TortoiseSVN

javascript - 使用 JavaScript 的 Yelp API 授权

javascript - 使用 API 加载 YouTube 视频

javascript - 如何使用客户端 JS 根据现有文本从 Google 的 Cloud Natural Language API 获取 JSON?

linux - 将 PHP 框架放在 Linux 主机上的什么位置

php - 获取YouTube用户列表

curl - 如何在 Golang 中制作 Curl Store Cookie?

http - 为什么 curl 发送 Proxy-Connection header ,即使 RFC 似乎不鼓励它?

docker - gitlab-ci.yml & docker-in-docker (dind) & curl 在共享运行器上返回连接被拒绝