我正在尝试使用此 WSDL 将潜在客户插入 SOAP Web 服务:http ://www.agemni.com/AgemniWebservices/service1.asmx?WSDL
API 记录在这里:http ://wiki.agemni.com/4Integration_And_API%27s/APIs/Database_API
此 Web 服务的后端代码似乎在 .NET 中。
这是我的代码:
// Create soap client.
try {
$this->client = new SoapClient("https://www.agemni.com/AgemniWebservices/service1.asmx?WSDL", array('soap_version' => SOAP_1_2, 'cache_wsdl' => 0, "trace" => true));
} catch (Exception $e) {
$this->logMessage('Couldn\'t connect to web service.');
throw $e;
}
// Create parameters.
$dataParams = new \stdClass;
$dataParams->strUsername = 'userman';
$dataParams->strPassword = 'hissecretpassword';
$dataParams->strCompanyName = 'validcompanyname';
$leadCode = 2;
$dataParams->objecttype = $leadCode;
// Create keys.
$dataParams->keys = new \stdClass;
$dataParams->keys->Phone = 'Phone';
// Create values.
$dataParams->values = new \stdClass;
$dataParams->values->Phone = '8011234567';
// Call web service.
$validateResult = $this->client->CreateEntity($dataParams);
这是我收到的回复:
object(stdClass)#27 (1) {
["ValidateEntityResult"]=>
object(SoapVar)#29 (4) {
["enc_type"]=>
int(0)
["enc_value"]=>
object(stdClass)#28 (10) {
["statusCode"]=>
string(9) "Succeeded"
["status"]=>
string(5) "Error"
["description"]=>
string(56) "Phone number is required and needs to be 10 digits long."
["errorNumber"]=>
int(1)
["xmlResult"]=>
string(39) "<?xml version="1.0" standalone="yes" ?>"
["EntityValidated"]=>
bool(false)
["EntityCreated"]=>
bool(false)
["EntityUpdated"]=>
bool(false)
["EntityIDCreated"]=>
int(0)
["isloggedIn"]=>
bool(false)
}
["enc_stype"]=>
string(15) "ExceptionReport"
["enc_ns"]=>
string(44) "http://tempuri.org/AgemniWebService/Service1"
}
}
我在 PHPFreaks 上发现了一个类似的问题,该问题已有多年历史,但从未成功回答。我在 PHP SoapClient 中看到其他类似的嵌套参数问题,但我看到的所有建议都以相同的错误消息结尾。
身份验证与公司名称一起收到很好。然而,我几乎以我能想到的所有方式对键和值参数进行格式化、解析和编码。我已经尝试将我的参数声明为 SoapVar 和 SoapParam 以及我能想到的每个潜在的构造函数参数,但仍然收到相同的错误消息。
对于有人可能认为 Agemni 网络服务不接受我的潜在客户电话号码的任何原因,我将不胜感激。
谢谢。
更新 我可以在字符串中生成我需要的 XML 请求并使用 cURL 发送它,但我想使用 SoapClient。但是,我很难在键和值节点中生成如下所示的元素:
<anyType xsi:type="xsd:string">phone</anyType>'
我遵循了一些关于在 SoapClient 中创建自定义复杂类型的指南,但我无法使用它来创建看起来像那样的 XML。