SOAP Web服务无法从PHP客户端识别Agemni Database API的ArrayOfAnyType

时间:2013-04-23 21:18:00

标签: php .net soap

我正在尝试使用此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。

0 个答案:

没有答案