php – 尝试SOAP调用时,对象引用未设置为对象错误的实例

我正在尝试使用SOAP / wsdl连接到web服务并进行身份验证,但我经常收到错误:

<b>Fatal error</b>:  Uncaught SoapFault exception: [a:InternalServiceFault] Object reference not set to an instance of an object. in /path/install.php:16

以下是我目前的代码:

<?php
header("Content-Type: text/plain"); 

$userinfo = array(
    'Username'=>'test',
    'Password'=>'test'
);

$wsdl_url = 'https://ws-e-distribution.kmd.dk/standard/ServiceAutorisation/ServiceAutorisation.svc?wsdl';
$client = new SoapClient($wsdl_url);

print_r($client->__getFunctions());
print_r($client->__getTypes());

//This is the problematic line:
$response = $client->__soapCall('LogOn', array('LogOn' => $userinfo));

var_dump($response);

我已经尝试了一切可能的方法来包装我可以想到的用户名和密码参数,或者找到任何人建议:

>使用自定义类
>使用stdClass
>使用SoapVar
>使用SoapParam
>使用简单的数组
>双包裹阵列
>以上的很多组合.

我尝试调用函数,如$client-> __ soapCall(‘LogOn’,[milliontries])以及$client-> LogOn([milliontries])

……什么都行不通,请帮忙.

更新:

我终于设法得到一个不同的错误(这表明至少我遇到了一些稍微错误的东西).我的代码现在看起来像这样:

$response = $client->LogOn(array('logon' => array('Username' => 'test','Password' => 'test')));

这给了我一个关于不支持LogOnType的错误(丹麦语,这告诉我至少我现在有一些与服务器的连接).用户名和密码数组没有任何效果,我可以替换空字符串并获得相同的结果,产生差异的是小写登录.

如果有人可以设置一个工作示例,给错误的用户名或密码错误,我将永远感激…但任何指针将非常感激.

据我所知,wsdl提供了执行此操作所需的所有信息,我只是太多了[your_pick]来获取它…?

最佳答案
难以置信的 !编写这16行代码只花了9个小时.

<?php
header("Content-Type: text/plain"); 

$userinfo = array(
    'Username'=>'test',
    'Password'=>'test'
);

$wsdl_url = 'https://ws-e-distribution.kmd.dk/standard/ServiceAutorisation/ServiceAutorisation.svc?wsdl';
$client = new SoapClient($wsdl_url, array('trace' => 1, "exception" => 0));

print_r($client->__getFunctions());
print_r($client->__getTypes());

//This actually works ! :) :) :)
$response = $client->LogOn(array('logon' => new SoapVar($userinfo, SOAP_ENC_OBJECT, 'LogOnUsername', 'http://schemas.datacontract.org/2004/07/WebServiceAutorisation.BL')));

var_dump($response);

我几次如此接近,结果发现命名空间(URL)是我遗漏的神奇之处.在每次尝试使用SoapVar时,我一直在使用主wsdl(或根本没有命名空间)的命名空间.

那么现在,关于登录的实际目的,可能不会更容易

转载注明原文:php – 尝试SOAP调用时,对象引用未设置为对象错误的实例 - 代码日志