首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用PHP、WSDL和HTTP身份验证的SOAP调用

使用PHP、WSDL和HTTP身份验证的SOAP调用
EN

Stack Overflow用户
提问于 2018-01-01 14:45:25
回答 1查看 7.3K关注 0票数 2

我是编程初学者,对soap调用有问题。

我想从DHL那里得到64个托运标签。我通常和Rest一起工作,但DHL在德国只有肥皂。

我知道这个错误:

soapCall:服务器未捕获的异常: /homepages/12/d573220848/htdocs/beta/dhl/index.php:90堆栈跟踪中的soap:Receiver UNKNOWN_ERROR:#0 /homepages/12/d573220848/htdocs/beta/dhl/index.php(90):SoapClient->_soapCall(‘createShipmentO.,Array,Array) #1 {main}引发

我认为认证工作

以下是我作为客户端的php代码

代码语言:javascript
运行
复制
$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>';

我得到了所有的类型和函数,但没有请求。这是dhl的纪录片:

代码语言:javascript
运行
复制
<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>

我能做些什么才能让它发挥作用?

EN

回答 1

Stack Overflow用户

发布于 2018-01-25 18:24:26

我从您的代码中使用了一部分,从示例DHL中使用了一部分,并得到了结果。希望这能帮到你。我也有为DHL API开发SOAP客户端的任务,如果您有更多的示例或问题,我将非常感谢。示例数据getVersion请求http://prntscr.com/i5jepf

代码语言:javascript
运行
复制
$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 "
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48050582

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档