【问题标题】:Problems with soap php call because of xml error由于 xml 错误,soap php 调用出现问题
【发布时间】:2012-10-28 19:43:24
【问题描述】:

我正在尝试对 Web 服务进行肥皂调用以传递运输数据。这是我目前发送的请求:

<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://weblabeling.gls-italy.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:enc="http://www.w3.org/2003/05/soap-encoding">
    <env:Body>
        <ns1:AddParcel env:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
        <!-- bof shipping array --->
            <XMLInfoParcel>
                <Info>
                    <SedeGls>XXXX</SedeGls>
                    <CodiceClienteGls>XXXXX</CodiceClienteGls>
                    <PasswordClienteGls>XXXXXX</PasswordClienteGls>
                    <Parcel>
                        <CodiceContrattoGls>XXXXXX</CodiceContrattoGls>
                        <RagioneSociale>XXXXXX</RagioneSociale>
                        <!-- other stuff here -->
                    </Parcel>
                </Info>
            </XMLInfoParcel>
            <!-- eof shipping array --->
        </ns1:AddParcel>
    </env:Body>
</env:Envelope>    

这反而是 web 服务在问我的问题

    <soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
      <soap12:Body>
        <AddParcel xmlns="http://weblabeling.gls-italy.com/">
          <XMLInfoParcel>string</XMLInfoParcel>
        </AddParcel>
      </soap12:Body>
    </soap12:Envelope>

我总是收到响应 xml 格式错误。

怎么了? 运输数组是正确的,并且与请求完全匹配。

提前致谢。

已编辑:

这是我构建 xml 的方式:

//inseriamo i dati nei corretti array
$Label = array(
                'XMLInfoParcel' => array(
                'Info' => array(
                    'SedeGls' => $SedeGls,
                    'CodiceClienteGls' => $CodiceClienteGls,
                    'PasswordClienteGls' => $PasswordClienteGls,                
                    'Parcel' => array(
                                       'CodiceContrattoGls' => $cod_cont,
                                       'RagioneSociale' => $rag_soc,
                                       'Indirizzo' => $delivery_indirizzo,
                                       'Localita' => $delivery_city,
                                       'Zipcode' => $data['delivery_postcode'],
                                       'Provincia' => $data['zone_code'],
                                       'Bda' => '',
                                       'DataDocumentoTrasporto' => '',
                                       'Colli' => '1',
                                       'Incoterm' => '',
                                       'PesoReale' => '1,00',
                                       'ImportoContrassegno' => $imp_cont,
                                       'NoteSpedizione' => $data['customers_telephone'],
                                       'TipoPorto' => 'F',
                                       'Assicurazione' => $ass_ins,
                                       'PesoVolume' => '',
                                       'TipoCollo' => $tipo_collo,
                                       'FrancoAnticipata' => '',
                                       'RiferimentoCliente' => '',
                                       'NoteAggiuntive' => '',
                                       'CodiceClienteDestinatario' => '',
                                       'Email' => '',
                                       'Cellulare1' => $telefono_1,
                                       'Cellulare2' => '',
                                       'ServiziAccessori' => '',
                                       'ModalitaIncasso' => $mod_inc    
                                      ),),),                                
                );


$dom = new DOMDocumentExt('1.0', 'utf-8');              
$chiamta = $dom->loadArray($Label);
$dudy = $dom->saveXML();

@Iserni 我放 ---> 只在这里,这不在我的代码中,我要测试在线工具,我真的没有看到错误。

我仍然收到 xml 格式的错误,还有其他线索吗?

已编辑:

我刚刚注意到我的请求有:

<ns1:AddParcel env:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

而要求是:

<AddParcel xmlns="http://weblabeling.gls-italy.com/">

所以我注意到在信封中也有一些与命名空间不同的东西。 会不会是问题?

WSDL 似乎在 gls 服务器上不起作用,他们没有在文档中提供任何有关它的信息。

已编辑:

也许我很笨,但这是请求 xml 架构:

那么现在我应该在之前放置更多空格吗? 你怎么看?如果是的话怎么办?

【问题讨论】:

  • 我认为您应该添加有关如何创建 Soap 请求 XML 的代码。
  • php 是肥皂的噩梦......我建议你将 nusoap 库适应你的项目,看看它是如何让 xml 执行它的
  • 啊,不,php Soap 还可以。此外,如果您查看问题,您会发现 Fabio 已经非常接近了。
  • @Fabio:除了&lt;XMLInfoParcel&gt; 元素之外的所有东西看起来都不错。如果您添加创建请求的代码,尤其是添加该代码对您的问题很有用。
  • 是的,我认为我非常接近。我实际上确实用一个类生成了 xml,数据存储在 db 中。我要添加脚本的一部分

标签: php xml soap webserver


【解决方案1】:

您的 XML 中有三个错误,但您可以使用 xmllint(也可以是 online)轻松找到它们(以及未来的错误)。

基本上,您的 XML cmets 应该以 --&gt; 而不是 ---&gt; 结尾,并且您应该检查标签打开/关闭。

另外,请求是针对&lt;XMLInfoParcel&gt;string&lt;/XMLInfoParcel&gt;,但这不是您要发送的内容...?

【讨论】:

  • 我认为这些 cmets 已添加到问题中,以显示 OP 所关注的部分。但也许你是对的。
  • 我也有这个疑问; “字符串”也是如此,我预计会出现与“XML 格式错误”不同的错误。除非 GLS 代码完全拒绝任何错误为“XML 格式错误”。
  • 我闻到了如何设置参数值的典型问题。它应该是一个字符串,但这里的请求是一个复杂的类型。如果在创建一种 SoapVar 时放入了一个数组,就会发生这种情况。
  • @Iserni: string 实际上我并没有包含所有请求结构,我只是在我的问题中添加了数组,你可以从那里看到它需要什么。跨度>
  • 你为什么不使用标准的方式来创建一个正确的请求呢?你为什么要使用$gls-&gt;buildXMLRequest()?您是否有特定原因不使用 WSDL 并让 SoapClient 为您完成工作?
猜你喜欢
  • 2011-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多