如何在 SOAP 客户端中提供 SOAP API 策略/扩展要求
P粉511896716
P粉511896716 2023-08-29 20:09:01
[PHP讨论组]

我需要连接到一个soap api ...现在我已经使用过soap api几次了,但是由于99%的api现在都处于休息状态,我已经有好几年没有使用它们了

当我使用soap客户端调用api时,我得到

SOAP-ERROR: Parsing WSDL: Unknown required WSDL extension 'http://schemas.xmlsoap.org/ws/2004/09/policy'

因此,当我在浏览器中打开 wsdl 地址(登录/密码保护)时,我可以在 xml 输出中看到这些行

<wsdl:definitions xmlns:p1="urn:haixin:all2crm" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" name="SI_USBPC_REQUEST" targetNamespace="urn:haixin:all2crm">
<wsdl:documentation/>
<wsp:UsingPolicy wsdl:required="true"/>
<wsp:Policy wsu:Id="OP_SI_USBPC_REQUEST"/>

在我有的地方

<wsp:Policy>
<wsp:PolicyReference URI="#OP_SI_USBPC_REQUEST"/>
</wsp:Policy>

当我搜索此错误时,我只能在整个互联网中找到 1 个资源,答案是关闭策略要求,即: 但我不拥有api,所以当我搜索策略名称 OP_SI_USBPC_REQUEST 时,这也是没有问题的,我没有得到任何结果,所以我猜测这是 api 所有者设置的一些自定义名称

所以我的问题是我应该制定政策并将其附加到肥皂客户端请求中吗? 政策和扩展之间的联系是什么,因为我收到扩展丢失错误,但如果我关闭政策要求,它就会消失

可以从某处下载扩展吗?格式是什么...我应该将它们附加到肥皂客户端请求中吗?

或者它是应该安装在服务器上的东西?如果我以某种方式添加扩展程序,错误就会消失,因为我已经将用户名/密码附加到 api 调用,或者这只是第一步,之后我应该处理策略要求吗?

顺便说一句,我使用 php 调用 api,这是我的代码

$options = [
        'login' => 'mlogin',
        'password' => 'mypassword',
    ];

    $client = new \SoapClient("http://domain:port/dir/wsdl/?p=sa/92130e1ffa97338ba2d1fc026567031d" , $options );

如果我下载 xml 并关闭对本地文件的要求并在肥皂客户端中使用该文件地址,我可以使用该文件与 api 对话吗? (我的理解是xml不包含任何实际数据,它只是soap客户端的接口/定义,我无法使用本地文件与在线api对话,或者也许我错了?)

P粉511896716
P粉511896716

全部回复(1)
P粉916553895

消息“未知所需的 WSDL 扩展”意味着 SoapClient 在外部发现了一个元素 WSDL 命名空间的 wsdl:required 属性设置为 true (正如您在此处看到的)。

因此,为了避免该错误,一种方法是将 wsdl:required 属性设置为 false

完全可以下载 WSDL 文件、修改它并使用本地副本。只需确保使用 绝对路径,如此处所示。

顺便说一下,此上下文中的“策略”指的是 WS-Policy 规范。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号