语境/我想要什么:web服务的SOAP请求 - 错误类型的数据的发送
我现在面临的一个问题,同时呼吁与SOAP web服务。这里有一个形象的WS的相关部分,我想打电话:
(本人自愿隐藏命名空间的一部分,这里没有相关的)
我想通过“Demande_de_mot_de_passe”功能和捕捉发送数据这个请求的结果。
在下面的代码中,这个请求是正确的(该函数的名称是好的),我想问题是我想发送的数据的格式。
$client->Demande_de_mot_de_passe($soapVar);
我已经试过:
这里是我试过的代码的相关部分(我自愿变更资料,但没有值的函数的调用本部提出。否则没有与支架没有错字的错误,它关闭功能和类我没有把这里保持相关部分):
$client = new \SoapClient('URL_OF_THE_WS?WSDL', array(
'trace' => 1,
'encoding' => 'UTF-8',
'soap_version' => SOAP_1_1,
'classmap' => array('Demande_de_mot_de_passe_Input' => 'Demande_de_mot_de_passe_Input')
));
$donnesUtilisateur = new Demande_de_mot_de_passe_Input;
$donnesUtilisateur->Code_societe = '000';
$donnesUtilisateur->Ident_type = 'A';
$donnesUtilisateur->Ident_code = 'xxxxxx';
$donnesUtilisateur->Dat_demande = '00000000';
$donnesUtilisateur->Adr_mail = 'xxxxxx';
$donnesUtilisateur->Adr_cpos = 'xxxxxx';
$donnesUtilisateur->Nom = 'xxxxxx';
$donnesUtilisateur->Prenom = 'xxxxxx';
$donnesUtilisateur->Dat_naiss = '00000000';
$namespace = 'URL_OF_NAMESPACE';
$soapVar = new \SoapVar($donnesUtilisateur, SOAP_ENC_OBJECT,'Demande_de_mot_de_passe_Input', $namespace);
$result = $client->Demande_de_mot_de_passe($soapVar);
print_r($result);
}
}
class Demande_de_mot_de_passe_Input {
public $Code_societe;
public $Ident_type;
public $Ident_code;
public $Dat_demande;
public $Adr_cpos;
public $Adr_mail;
public $Nom;
public $Prenom;
public $Dat_naiss;
}
我也试图与通过铸造对象的数组与这样的数组(没有成功) S):
$donnesUtilisateur = [
'Code_societe' => '000',
'Ident_type' => 'A',
'Ident_code' => 'xxxxxx',
'Dat_demande' => '00000000',
'Adr_cpos' => 'xxxxxx',
'Adr_mail' => 'xxxxxx',
'Nom' => 'xxxxxx',
'Prenom' => 'xxxxxx',
'Dat_naiss' => '00000000',
];
和:
$donnesUtilisateur = (object) [
'Code_societe' => '000',
'Ident_type' => 'A',
'Ident_code' => 'xxxxxx',
'Dat_demande' => '00000000',
'Adr_cpos' => 'xxxxxx',
'Adr_mail' => 'xxxxxx',
'Nom' => 'xxxxxx',
'Prenom' => 'xxxxxx',
'Dat_naiss' => '00000000',
];
错误,我得到:
SoapFault: Did not receive a 'Demande_de_mot_de_passe_Input' object. in SoapClient->__call()
如果我unterstand清楚,发送的数据的格式不正确的,但其他的,当我尝试发送它的方式,它仍然报告相同的错误。
文档我读过有关没有成功:
http://www.fvue.nl/wiki/Php:_Soap:_How_to_add_attribute_to_SoapVar
http://grokbase.com/t/php/php-soap/066jkmcz2h/passing-objects-to-soap-server-complextype-classmap
编辑
下面是了SoapUI的WS 'Demande_de_mot_de_passe' 函数调用的捕获:
(对不起,我长的帖子,我希望这是非常明显的,不要忘了,如果需要询问精度,在此先感谢您的帮助:))
据我所知,你的问题是复杂类型的SoapVar实施和复杂性。正如我所看到的,您的请求消息需要一个名为'Demande_de_mot_de_passe'的参数,并且其内部需要一个名为'Demande_de_mot_de_passe_input'的参数。你的例子没有显示方法名称(只是你的代码),我认为这是错误的。尝试使用SoapUI打开WSDL并查看它将显示为请求消息的内容。最后,你的SoapVar实现有一些错误。 –
感谢您的帮助,方法名称很好(如果我尝试了错误的方法,则会触发其他错误),但其他开发人员使用Python脚本对此Webservice进行了调用,并且工作正常。但他只是通过关联数组传递数据,我无法弄清楚为什么这不适用于我的PHP自适应脚本。感谢您的时间伴侣:) –
您是否使用SoapUI打开WSDL?向我显示请求消息或整个WSDL。 –