0

見積もりを取得するために SOAP リクエストを Estes に送信する必要があります。私が使用した他の API は XML を投稿するか、URL 文字列を使用するため、これを行うのに問題があります。これは私にとっては少し違います。

私の問題は、リクエストのために送信する必要がある配列を把握できないことだと思います。

<?xml version="1.0" encoding="UTF-8"?>
        <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:rat="http://ws.estesexpress.com/ratequote" xmlns:rat1="http://ws.estesexpress.com/schema/2012/12/ratequote">
           <soapenv:Header>
              <rat:auth>
                 <rat:user>XXXXX</rat:user>
                 <rat:password>XXXX</rat:password>
              </rat:auth>
           </soapenv:Header>
           <soapenv:Body>
              <rat1:rateRequest>
                 <rat1:requestID>XXXXXX</rat1:requestID>
                 <rat1:account>XXXXXXX</rat1:account>
                 <rat1:originPoint>
                    <rat1:countryCode>XX</rat1:countryCode>
                    <rat1:postalCode>XXXXX</rat1:postalCode>
                    <rat1:city>XXXXXX</rat1:city>
                    <rat1:stateProvince>XX</rat1:stateProvince>
                 </rat1:originPoint>
                 <rat1:destinationPoint>
                    <rat1:countryCode>XX</rat1:countryCode>
                    <rat1:postalCode>XXXXX</rat1:postalCode>
                 </rat1:destinationPoint>
                 <rat1:payor>X</rat1:payor>
                 <rat1:terms>XX</rat1:terms>
                 <rat1:stackable>X</rat1:stackable>
                 <rat1:baseCommodities>
                    <rat1:commodity>
                       <rat1:class>X</rat1:class>
                       <rat1:weight>XXX</rat1:weight>
                    </rat1:commodity>
                 </rat1:baseCommodities>
              </rat1:rateRequest>
           </soapenv:Body>
        </soapenv:Envelope>

これは以前使用していたコードであり、機能していません。

        <?php
    $client = new SoapClient("https://www.estes-express.com/rating/ratequote/services/RateQuoteService?wsdl");

    $request_object = array(
          "header"=>array(
          "auth"=>array(
                "user"=>"XXXXX",
                "password"=>"XXXXX",
                )
          ),
          "rateRequest"=>array(
                "requestID"=>"XXXXXXXXXXXXXXX",
                "account"=>"XXXXXX",
          ),
            "originPoint"=>array(
                "countryCode"=>"XX",
                "postalCode"=>"XXXXX",
                "city"=>"XXXXX",
                "stateProvince"=>"XX",
          ),
            "destinationPoint"=>array(
                "countryCode"=>"XX",
                "postalCode"=>"XXXXX",
          ),
          "payor"=> "X",
          "terms"=> "XXXX",
          "stackable"=> "X",
            "baseCommodities"=>array(
                "commodity"=>array(
                    "class"=>"XX",
                    "weight"=>"XXXX",
                )
            ),
        );

        $result = $client->rateRequest(array("request"=>$request_object));

        var_dump($result);
    ?>

ここにエラーがあります

        Fatal error: Uncaught SoapFault exception: [Client] Function ("rateRequest") is not a valid method for this service in /home/content/54/11307354/html/test/new/estes.php:36 
        Stack trace: #0 /home/content/54/11307354/html/test/new/estes.php(36): SoapClient->__call('rateRequest', Array) #1 /home/content/54/11307354/html/test/new/estes.php(36): 
        SoapClient->rateRequest(Array) #2 {main} thrown in /home/content/54/11307354/html/test/new/estes.php on line 36
4

4 に答える 4

1

これは、クラス配列と重みから商品配列を構築する方法です

array:

// load the $params commodities array $comArray = array(); for ($i=0; $i<count($class_tbl); $i++) { $comArray[] = array('class'=>$class_tbl[$i], 'weight'=>$weight_tbl[$i]); }

次のコードは、アクセサリ配列をフォーマットします

if($inside == "Yes") {
      $accArray[$i] = "INS";   
        ++$i;
  }
    if($liftgate == "Yes") {
      $accArray[$i] = "LGATE";   
        ++$i;
  }
    if($call == "Yes") {
      $accArray[$i] = "NCM";   
        ++$i;
  }

配送先が企業以外 (学校、教会など) の場合は、Estes の配送先アクセサリ コードも $accArray 配列に追加する必要があります。

于 2013-10-31T00:57:07.257 に答える
1

これは、Estes API に渡される $params 配列です。

$params = array( 
    "requestID"         => "xxxxxxxx",
    "account"           => "xxxxxxxx",
    "originPoint"       => array('countryCode' => 'US', 'postalCode' => $fromzip),
    "destinationPoint"  => array('countryCode' => 'US', 'postalCode' => $shipzip),
    "payor"             => 'T',
    "terms"             => 'PPD',
    "stackable"         => 'N',
            "baseCommodities"   => array('commodity' => $comArray ),
            "accessorials"      => array('accessorialCode' => $accArray) 

アクセサリがない場合は、その配列を $params 配列から削除する必要があります
); // アクセサリ コードがない場合は、アクセサリ エントリを削除します。 if(sizeof($accArray) == 0){ $params = array_slice($params, 0, 8); // アクセサリのエントリを削除します }

于 2013-10-31T01:09:03.713 に答える
0

バリデーターで WSDL を調べると、利用可能な 2 つのメソッドはechoとのようgetQuoteです。

WSDL 自体を見ると、次のこともわかります。

<wsdl:operation name="getQuote">
    <wsdl:input name="rateRequest" message="tns:rateRequestMsg"></wsdl:input>
    <wsdl:output name="quoteInfo" message="tns:rateQuoteMsg"></wsdl:output>
    <wsdl:fault name="schemaErrorMessage" message="tns:schemaErrorMsg"></wsdl:fault>
    <wsdl:fault name="generalErrorMessage" message="tns:generalErrorMsg"></wsdl:fault>
</wsdl:operation>

getQuoteの代わりに電話してみてくださいrateRequest

$result = $client->__soapCall('getQuote', array("request"=>$request_object));
于 2013-09-12T16:00:44.193 に答える