この 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 Web サービスが私の担当者の電話番号を受け付けていないと推測できる理由について、何か提案をいただければ幸いです。
ありがとう。
更新 必要な XML 要求を文字列で生成し、cURL を使用して送信するだけですが、SoapClient を使用したいと思います。ただし、キーノードと値ノード内の要素を次のように生成するのに苦労しています。
<anyType xsi:type="xsd:string">phone</anyType>'
SoapClient でカスタム複合型を作成するためのいくつかのガイドに従いましたが、そのような XML を作成することはできませんでした。