2

I am a beginner in programming and have a problem with a soap call.

I would like to get 64based shipment labels from DHL. I usually work with Rest but DHL do only has SOAP in Germany.

I get this error:

SOAP-ENV:ServerUncaught SoapFault exception: [soap:Receiver] UNKNOWN_ERROR in /homepages/12/d573220848/htdocs/beta/dhl/index.php:90 Stack trace: #0 /homepages/12/d573220848/htdocs/beta/dhl/index.php(90): SoapClient->__soapCall('createShipmentO...', Array, Array) #1 {main} thrown

authentication works I think

Here is the php code from me as client

$wsdl = 'https://cig.dhl.de/cig-wsdls/com/dpdhl/wsdl/geschaeftskundenversand-api/2.2/geschaeftskundenversand-api-2.2.wsdl';
  $params = array(
      'location' => "https://cig.dhl.de/services/sandbox/soap", 
      'uri' => "https://",
      'login' => "*userid*",
      'password' => "*secret_password*",
      'soap_version' => SOAP_1_2,
      'exceptions' => True,
      'trace' => 1
  );

  $client = new SoapClient($wsdl, $params);
  $header = new SoapHeader("https://cig.dhl.de/services/sandbox/soap", "authentication", "Basic [EDITED]"); 
  use_soap_error_handler(true);
  //Funktionen und Typen anfragen
  echo '<h3>Funktionen</h3>';
  $functions = $client->__getFunctions();
  foreach($functions as $d){
      echo "<br>".$d;
  }
  echo '<br><h3>Types</h3>';
  $types = $client->__getTypes();
  foreach($types as $t){
      echo "<br>".$t;
  }
  echo '<br><br>';


  $request = array(
      'CreateShipmentOrderRequest' => "1",
          'Version' => array(
          'majorRelease' => "2",
          'minorRelease' => "0"),
      'ShipmentOrder' => array(
      'SequenceNumber' => "01",
          'Shipment' => array(
          'ShipmentDetails' => array(
          'product' => "V01PAK",
          'accountNumber' => "22222222220101")))

  );

  //RESPONSE
  $response = $client ->__soapCall("createShipmentOrder", $request, $params);
  var_dump($response);
  echo '<br><br>';

I get all the types and functions, but no request. This is from documentary of dhl:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
               xmlns:cis="http://dhl.de/webservice/cisbase"
               xmlns:bcs="http://dhl.de/webservices/businesscustomershipping"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <soap:Header>
        <cis:Authentification>
            <cis:user>2222222222_01</cis:user>
            <cis:signature>pass</cis:signature>
        </cis:Authentification>
    </soap:Header>
    <soap:Body>
    ...
    </soap:Body>
</soap:Envelope>

Die Abrechnungsnummern müssen zusammen mit dem Produkt im SOAP-Body im Type "Shipment Details" eingetragen werden:

</soap:Header>
    <soap:Body>
        <bcs:CreateShipmentOrderRequest>
            <cis:Version>
                <cis:majorRelease>2</cis:majorRelease>
                <cis:minorRelease>0</cis:minorRelease>
            </cis:Version>
            <ShipmentOrder>
                <SequenceNumber>01</SequenceNumber>
                <Shipment>
                    <ShipmentDetails>
                        <product>V01PAK</product>
                        <cis:accountNumber>22222222220101</cis:accountNumber>

What can I do to bring it to work?

4
  • is this for dhl paket? because you are not passing all the required data in request if that's the case Commented Jan 20, 2018 at 5:39
  • Yes it is. Why? What is missing? Commented Jan 21, 2018 at 15:08
  • there are too many required parameters, have you checked the documentation and website? Commented Jan 21, 2018 at 15:32
  • github.com/tobias-redmann/dhl-php-sdk/blob/master/… Commented Jan 27, 2018 at 5:05

1 Answer 1

1

I used part from your code, part from example DHL and have result . I hope this help you . I too have task of development SOAP client for DHL API and if you have more example or question about this I will be thankful. Sample data getVersion request http://prntscr.com/i5jepf

$wsdl =  'https://cig.dhl.de/cig-wsdls/com/dpdhl/wsdl/geschaeftskundenversand-api/2.2/geschaeftskundenversand-api-2.2.wsdl';   
$sandbox = "https://cig.dhl.de/services/sandbox/soap";  
$user = "******";
$password = "*******";  
$options = array(
  'location' => $sandbox, 
  'uri' => "",
  'login' => $user,
  'password' => $password,
  'soap_version' => SOAP_1_1,
  'exceptions' => false,
  'trace' => 1
);  
$client = new SoapClient($wsdl,$options);   
$request ='Sample data getVersion install here';
$result = $client->__doRequest($request,$sandbox, 'getVersion',1);
if (is_soap_fault($result)) {
   trigger_error("Error SOAP: (faultcode: {$result->faultcode}, faultstring: {$result->faultstring})", E_USER_ERROR);
}   
var_dump($result);  
string(512) " 2 2 8 "
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.