2016-05-06 9 views
1

私はdpd.comから出荷ラベルを取得しようとしています。このためには、私は仕事をするために石鹸を使う必要があります。私はログイン認証を完了し、AuthTokenを取得しました。 ここにそのコードがあります。dpd.comへのsoapリクエストをPHPで送信

<?php 
$c = new SoapClient('https://public-ws-stage.dpd.com/services/LoginService/V2_0/?WSDL'); 
$res = $c->getAuth(array(
    'delisId' => 'username', 
    'password' => 'password', 
    'messageLanguage' => 'en-us', 
)); 
$authToken = $res->return->authToken; 

さて、問題は、私は、要求を送信し、この持つAuthTokenを使用して出荷ラベルを取得したいです。 soap要求の形式は、そのようなものです。

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
        xmlns="http://dpd.com/common/service/types/Authentication/2.0" 
        xmlns1="https://public-ws-stage.dpd.com/services/ShipmentService/V3_2/?wsdl"> 
    <soapenv:Header> 
     <ns:authentication> 
      <delisId>username</delisId> 
      <authToken>AuthToken From Above</ authToken> 
      <messageLanguage>en-us</messageLanguage> 
     </ns:authentication> 
    </soapenv:Header> 
    <soapenv:Body> 
     <ns1:storeOrders> 
      <paperFormat>A4</paperFormat> 
      <order> 
       <generalShipmentData> 
        <sendingDepot>'.$depot_num.'</sendingDepot> 
        <product>CL</product> 
        <mpsCompleteDeliver>false</mpsCompleteDeliver> 
        <sender> 
         <name1>Fritz</name1> 
         <street>Mustergasse</street> 
         <houseNo>1</houseNo> 
         <state>BY</state> 
         <country>DE</country> 
         <zipCode>53950</zipCode> 
         <city>Maibach</city> 
        </sender> 
        <recipient> 
         <name1></name1> 
         <street></street> 
         <houseNo></houseNo> 
         <state></state> 
         <country></country> 
         <zipCode></zipCode> 
         <city></city> 
         </recipient> 
       </generalShipmentData> 
       <parcels> 
        <parcelLabelNumber></parcelLabelNumber> 
       </parcels> 
       <productAndServiceData> 
        <orderTyp></orderType> 
       </productAndServiceData> 
      </order> 
     </ns1:storeOrdes> 
    </soapenv:Body> 
</soapenv:Envelope> 

しかし、私はこの要求を送信し、pdfDataタグで応答を取得する方法がわかりません。

答えて

0

私は質問が古いことを見ていますが、他の誰かがそれも検索することができます。 回答者http://labor.99grad.de/2014/10/05/deutscher-paket-dienst-dpd-soap-schnittstelle-mit-php-nutzen-um-versandetikett-als-pdf-zu-generieren/

<?php 

    // Einloggen 

    $c = new SoapClient('https://public-ws-stage.dpd.com/services/LoginService/V2_0?wsdl'); 

    $res = $c->getAuth(array(
     'delisId'   => 'your-Id', 
     'password'   => 'your-Password', 
     'messageLanguage' => 'de_DE' 
    )); 

    // ...und das Token merken 
    $auth = $res->return; 


    // Jetzt das Label generieren: 

    $c = new SoapClient('https://public-ws-stage.dpd.com/services/ShipmentService/V3_1?wsdl'); 

    $token = array(
     'delisId'   => $auth->delisId, 
     'authToken'   => $auth->authToken, 
     'messageLanguage' => 'de_DE' 
    ); 

    // Set the header with the authentication token 
    $header = new SOAPHeader('http://dpd.com/common/service/types/Authentication/2.0', 'authentication', $token); 
    $c->__setSoapHeaders($header); 

    try { 
     $res = $c->storeOrders(array 
     (
      "printOptions" => array(
       "paperFormat" => "A4", 
       "printerLanguage" => "PDF" 
      ), 
      "order" => array(
       "generalShipmentData" => array(
        "sendingDepot" => $auth->depot, 
        "product" => "CL", 
        "mpsCompleteDelivery" => false, 
        "sender" => array(
        "name1" => "Sender Name", 
        "street" => "Sender Street 2", 
        "country" => "DE", 
        "zipCode" => "65189", 
        "city" => "Wiesbaden", 
        "customerNumber" => "123456789" 
       ), 
        "recipient" => array(
        "name1" => "John Malone", 
        "street" => "Johns Street 34", 
        "country" => "DE", 
        "zipCode" => "65201", 
        "city" => "Wiesbaden" 
       ) 
       ), 
       "parcels" => array(
        "parcelLabelNumber" => "09123829120" 
       ), 
       "productAndServiceData" => array(
        "orderType" => "consignment" 
       ) 
      ) 
     ) 
    ); 
    } catch (SoapFault $exception) { 
     echo $exception->getMessage(); 
     die(); 
    } 

    // Et voilà! 

    header('Content-type: application/pdf'); 
    echo $res->orderResult->parcellabelsPDF; 
?> 
関連する問題