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

Var*_*ain 7 php soap web-services yii

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

API Url: http://xyz-crm.example/WebAPI/Custom/project_name/XML/

Username: foobar
password: spameggs
Run Code Online (Sandbox Code Playgroud)

我需要在非 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);
Run Code Online (Sandbox Code Playgroud)

我只想首先对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();
Run Code Online (Sandbox Code Playgroud)

我收到错误: 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(); 
Run Code Online (Sandbox Code Playgroud)

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

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

Dan*_* W. 2

URI 或文件结尾并不重要,甚至可以是.jpg,没有默认值。

看一下类似的问题:此 SOAP 错误是否意味着我认为的意思?

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

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

new SoapClient($url, array("soap_version" => SOAP_1_1,.......
Run Code Online (Sandbox Code Playgroud)

或者SOAP_1_2...

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

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