在非 WSDL 模式下使用 PHP SOAP 客户端


Using PHP SOAP client in non-WSDL mode

我正在为客户开发一个api。我收到了以下信息:

API Url: http://xyz-crm.example/WebAPI/Custom/project_name/XML/
Username: foobar
password: spameggs

我需要在非 WSDL 模式下为 PHP SOAP 客户端配置相同的客户端。我已经写了以下内容,但它似乎不起作用:

$wsdl    = null;
$options = array(
    'uri'      => 'http://xyz-crm.example/WebAPI/Custom/project_name/XML/',
    'location' => 'http://xyz-crm.exmaple.com/WebAPI/Custom/project_name/XML/',
    'login'    => 'foobar',
    'password' => 'spameggs'
);
$client  = new SoapCLient($wsdl, $options);

我只是想首先对 api 进行成功的 ping。看看一切是否正常。我在这里做错了什么?

更新 1

我进行了以下更改:

$wsdl    = null;
$options = array(
    'uri'          => "http://xyz-crm.example/WebAPI/Custom/project_name/XML/",
    'location'     => "http://xyz-crm.example/",
    'Username'     => "foobar",
    'Password'     => "spameggs",
    'soap_version' => '1.2'
);
$client  = new SoapClient($wsdl, $options);
$client  = $client->getListings();

我收到错误:looks like we got no XML document

[由我编辑,hakre:此更新是作为对答案#1的反馈完成的。它使用缩短的 URL(OP 未给出的原因)更改位置选项并添加soap_version选项(如答案 #1 中建议的那样,但不是常量而是字符串(包含无效值),所以难怪这会产生错误,答案 #1(SOAP_1_1常量)中给出了正确的选项值,并且有意, 对于此示例,正确的值是SOAP_1_2常量)。OP 评论的错误消息是"SOAP 错误:错误版本"。

更新 2

我尝试了以下方法,但仍然失败:

$listing = $client->getListings(); 
$request = $client->__getLastRequest(); 

执行在第一行本身停止,而不会转到第二行。

[由我编辑,hakre:由于审查在更新 1 中已经显示了错误的配置选项,这些选项在更新 2 中没有得到解决,如果它仍然不会失败,那将是一个奇迹。执行停止,因为抛出异常并且未执行错误/异常处理]

Die URI 或文件结尾无关紧要,甚至可以.jpg,没有默认值。

看看类似的问题:这个 SOAP 错误是否意味着我认为它的意思?

如果您将错误消息以及请求的 XML 输出放入问题中,这将很有帮助。

尝试将SoapClient实例数组中的 SOAP 版本设置为其中一个常量(尝试不同的常量):

new SoapClient($url, array("soap_version" => SOAP_1_1,.......

SOAP_1_2...

要调试 XML,请尝试在发送请求之前/不发送请求之前检查由 PHP SoapClient 调用创建的 XML 中的答案

您更新的问题的错误消息看起来不像是来自 PHP,看起来更像是来自 Web 服务的答案,这意味着您的请求实际上正在工作。