Php soapxml生成与手动

Php soapxml生成与手动,php,xml,soap,Php,Xml,Soap,我对使用SOAP的API有问题。我的客户端是用PHP编写的,并生成以下内容: <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://webportal.gb.co.uk/GBPortal" xmlns:xsd="http://www.w3.org/2001/XMLS

我对使用SOAP的API有问题。我的客户端是用PHP编写的,并生成以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://webportal.gb.co.uk/GBPortal" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <SOAP-ENV:Body>
      <ns1:CreateAuthenticatedSession xsi:type="ns1:CreateAuthenticatedSession">
         <szUsername xsi:type="xsd:string">...</szUsername>
         <szPassword xsi:type="xsd:string">...</szPassword>
      </ns1:CreateAuthenticatedSession>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

...
...
文档中的参考XML是:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <CreateAuthenticatedSession xmlns="http://webportal.gb.co.uk/GBPortal">
      <szUsername>string</szUsername>
      <szPassword>string</szPassword>
    </CreateAuthenticatedSession>
  </soap:Body>
</soap:Envelope>

一串
一串
就我所知,在功能上是一样的

我是否遗漏了导致API拒绝XML的任何差异?您不希望使用字符串连接来生成XML


编辑:如果没有功能上的差异,请留下答案。

这两个请求在功能上是相同的。客户机生成的名称只是为
使用了不同的名称空间名称,但这仍然指向与文档版本相同的名称空间(
http://schemas.xmlsoap.org/soap/envelope/


另外,您的客户端版本在
CreateAuthenticatedSession
元素上使用了一个名称空间,而文档版本只声明了
xmlns
属性。

谢谢,因此API拒绝XML的理由是没有的?我看不出任何理由。您的版本是由读取服务器WSDL的本机SoapClient构建的吗?如果是这样的话,我会非常确信请求是正确的,我不认为XML被拒绝了。我认为您没有得到预期的响应(即使是错误也是有效的响应)。因此,除非你明确具体的问题(预期与实际的回答),否则很难回答你的问题。从技术上讲,XML是相同的,但在您的具体案例中,我们从您的问题中了解到,您的使用场景存在差异。@hakre回答是不相关的,我只需要知道XML在功能上是否相同,这样我就知道这是我的目的还是API的问题(即我是否可以向API所有者投诉)。实际的问题是我的XML在API上触发了一个内部服务器错误。但是,您的客户机添加了
xsi:type
属性。我不认为这会引起问题,但是,这是一个差异(其他差异实际上没有,它们只使用不同的前缀,但所有这些不同的前缀代表相同的名称空间,因此它们在技术上是相同的,即使它们的前缀名不同)。不过,我想问题仍然在于您触发了内部服务器错误。很可能SOAP服务器实际上不符合XML。