Я пытаюсь создать сценарий для загрузки открытых рабочих мест из Taleo. У меня это работает в SOAP UI. Я отправляю свой запрос, и в ответе содержатся все запрошенные данные.
Запрос:
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"xmlns:ns1="http://www.taleo.com/ws/tee800/2009/01/find"xmlns:ns2="http://itk.taleo.com/ws/query">
<SOAP-ENV:Body>
<ns1:findPartialEntities>
<ns1:mappingVersion>http://www.taleo.com/ws/art750/2006/12</ns1:mappingVersion>
<ns1:query>
<ns2:query projectedClass="Requisition" alias="Find Open and Posted Requisitions">
<ns2:subQueries/>
<ns2:projections>
<ns2:projection alias="Ref">
<ns2:field path="Requisition,ContestNumber"/>
</ns2:projection>
</ns2:projections>
</ns2:query>
</ns1:query>
<ns1:attributes>
<ns1:entry>
<ns1:key>pageindex</ns1:key>
<ns1:value>1</ns1:value>
</ns1:entry>
<ns1:entry>
<ns1:key>pagingsize</ns1:key>
<ns1:value>2</ns1:value>
</ns1:entry>
</ns1:attributes>
</ns1:findPartialEntities>
</SOAP-ENV:Body>
Отклик:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soap:Body>
<ns1:findPartialEntitiesResponse xmlns:ns1="http://www.taleo.com/ws/tee800/2009/01/find">
<root:Entities pageIndex="1" pageCount="585" pagingSize="2" entityCount="1169" xmlns:root="http://www.taleo.com/ws/tee800/2009/01/find" xmlns:e="http://www.taleo.com/ws/art750/2006/12" xmlns="http://www.taleo.com/ws/integration/toolkit/2005/07">
<e:Entity xsi:type="e:Requisition"/>
<e:Entity xsi:type="e:Requisition">
<e:ContestNumber>1500000L</e:ContestNumber>
</e:Entity>
</root:Entities>
</ns1:findPartialEntitiesResponse>
</soap:Body>
</soap:Envelope>
Поэтому я попытался перевести это на PHP-скрипт. Я могу видеть рабочие роли в ответе, однако они являются пустыми объектами. Я не уверен, как получить доступ к данным. Вот мой сценарий.
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
ini_set('soap.wsdl_cache_enabled', 0);
ini_set('soap.wsdl_cache_ttl', 900);
ini_set('default_socket_timeout', 15);
ini_set('use_soap_error_handler', true);
error_reporting(E_ALL);
date_default_timezone_set('UCT');
class taleo_test{
private $url = 'https://URL&wsdl';
private $username = '******';
private $password = '********';
public function __construct(){
}
public function connect(){
$options = array(
'login' => $this->username,
'password' => $this->password,
'trace' => 1,
'cache_wsdl' => WSDL_CACHE_NONE,
'soap_version'=>SOAP_1_1
);
$query = [
'query' => [
'projectedClass' => "Requisition",
'alias' => "Find Open and Posted Requisitions",
'subQueries' => '',
'projections' => [
'projection' => [
'alias' => "Ref",
'field' => [
'path' => 'Requisition,ContestNumber'
]
]
]
]
];
$attributes = [
"entry" => [
['key' => 'pageindex', 'value' => '1'],
['key' => 'pagingsize', 'value' => '5']
]
];
try {
$client = new SoapClient($this->url, $options);
$arguments = array(
'mappingVersion' => 'http://www.taleo.com/ws/art750/2006/12',
'query' => $query,
'attributes' => $attributes
);
$results = $client->__soapCall("findPartialEntities", array($arguments));
echo "REQUEST:\n" . $client->__getLastRequest() . "\n\n";
echo "RESPONSE:\n" . $client->__getLastResponse() . "\n\n";
var_dump($results);
} catch (Exception $e) {
echo '<pre>';
echo $e->getMessage();
echo '<hr>';
echo $e->getTraceAsString();
echo htmlentities($client->__getLastRequest());
echo '<br>@@<hr><br>';
echo htmlentities($client->__getLastResponse());
echo '</pre>';
}
}
}
$taleo = new taleo_test;
$data = $taleo->connect();
Эхо $ client -> __ getLastResponse () показывает мне данные, которые PHP не покажет мне.
Вот результат PHP-файлов:
<hr>REQUEST:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.taleo.com/ws/tee800/2009/01/find" xmlns:ns2="http://itk.taleo.com/ws/query"><SOAP-ENV:Body> <ns1:findPartialEntities><ns1:mappingVersion>http://www.taleo.com/ws/art750/2006/12</ns1:mappingVersion><ns1:query><ns2:query projectedClass="Requisition" alias="Find Open and Posted Requisitions"><ns2:subQueries/><ns2:projections><ns2:projection alias="Ref"><ns2:field path="Requisition,ContestNumber"/></ns2:projection></ns2:projections></ns2:query></ns1:query><ns1:attributes><ns1:entry><ns1:key>pageindex</ns1:key><ns1:value>1</ns1:value></ns1:entry><ns1:entry><ns1:key>pagingsize</ns1:key><ns1:value>5</ns1:value></ns1:entry></ns1:attributes></ns1:findPartialEntities></SOAP-ENV:Body></SOAP-ENV:Envelope>
RESPONSE:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soap:Body> <ns1:findPartialEntitiesResponse xmlns:ns1="http://www.taleo.com/ws/tee800/2009/01/find"><root:Entities xmlns:root="http://www.taleo.com/ws/tee800/2009/01/find" xmlns:e="http://www.taleo.com/ws/art750/2006/12" xmlns="http://www.taleo.com/ws/integration/toolkit/2005/07" pageIndex="1" pageCount="234" pagingSize="5" entityCount="1169"><e:Entity xsi:type="e:Requisition"/><e:Entity xsi:type="e:Requisition"><e:ContestNumber>1500000L</e:ContestNumber></e:Entity><e:Entity xsi:type="e:Requisition"><e:ContestNumber>1500000N</e:ContestNumber></e:Entity><e:Entity xsi:type="e:Requisition"><e:ContestNumber>1500000M</e:ContestNumber></e:Entity><e:Entity xsi:type="e:Requisition"><e:ContestNumber>1500000S</e:ContestNumber></e:Entity></root:Entities></ns1:findPartialEntitiesResponse></soap:Body></soap:Envelope>
object(stdClass)#3 (1) {
["Entities"]=>
object(stdClass)#4 (5) {
["Entity"]=>
array(5) {
[0]=>
object(stdClass)#5 (0) {
}
[1]=>
object(stdClass)#6 (0) {
}
[2]=>
object(stdClass)#7 (0) {
}
[3]=>
object(stdClass)#8 (0) {
}
[4]=>
object(stdClass)#9 (0) {
}
}
["pageIndex"]=>
string(1) "1"["pageCount"]=>
string(3) "234"["pagingSize"]=>
string(1) "5"["entityCount"]=>
string(4) "1169"}
}
Я прочитал комментарии о том, что это может быть проблема с пространством имен, но я не уверен, как исправить или, если это не проблема, то как получить нужные мне данные (без необходимости использовать отладочный ответ SOAP и анализировать его в XML).
Любая помощь будет принята с благодарностью.
Спасибо
Задача ещё не решена.
Других решений пока нет …