Я использую веб-службы vTiger для извлечения массива VtigerObjects, содержащего мои контакты, с помощью запроса. Я следую инструкциям, приведенным здесь:
https://wiki.vtiger.com/index.php/Webservices_tutorials
До сих пор я получаю контрольный токен, который я могу использовать для входа в систему, так что это работает. Но с момента, когда я пытаюсь получить данные с запросом, я получаю следующую ошибку:
«Разрешение на выполнение операции отклонено для запроса»
Я администратор, поэтому у меня должны быть все разрешения, верно? Вот мой код, надеюсь, кто-то может мне помочь?
$username = 'xxxxxxxxxx'; $userAccessKey = 'xXxXxXxXxXxXxX'; //Create HTTP Client and set url and parameters $client = new Zend_Http_Client(); $client->setUri('https://example.com/webservice.php'); $client->setParameterGet(array( 'operation' => 'getchallenge', 'username' => $username )); // Get Response (and decode) $response = $client->request('GET'); $jsonResponse = Zend_Json::decode($response->getBody()); // Check if operation was successful if ($jsonResponse['success'] == false) die('getchallenge failed:'.$jsonResponse['error']['errorMsg']); // Get token from response $challengeToken = $jsonResponse['result']['token']; //create md5 string concatenating user accesskey from my preference page //and the challenge token obtained from get challenge result. $generatedKey = md5($challengeToken.$userAccessKey); //Create HTTP Client and set url and parameters $client->setUri('https://example.com/webservice.php'); $client->setParameterPost(array( 'operation' => 'login', 'username' => $username, 'accessKey' => $generatedKey ), true); // Get Response (and decode) $response = $client->request('POST'); $jsonResponse = Zend_JSON::decode($response->getBody()); // Check if operation was successful if($jsonResponse['success']==false) die('login failed:'.$jsonResponse['error']['errorMsg']); $session = $jsonResponse['result']['sessionName']; // Query to select contacts $query = "select * from contacts"; // Urlencode the query $encodedQuery = urlencode($query); //Create HTTP Client and set url and parameters $client->setUri('https://example.com/webservice.php'); $client->setParameterGet(array( 'operation' => 'query', 'sessionName' => $session, 'query' => $encodedQuery )); // Get Response (and decode) $response = $client->request('GET'); $jsonResponse = Zend_JSON::decode($response->getBody()); // Check if operation was successful if($jsonResponse['success']==false) die('query failed:'.$jsonResponse['errorMsg']); // Return contacts $retrievedObjects = $jsonResponse['result'];
Не кодируйте свой запрос, просто выполните следующее:
// Query to select contacts $query = "select * from Contacts"; //Create HTTP Client and set url and parameters $client->setUri('https://example.com/webservice.php'); $client->setParameterGet(array( 'operation' => 'query', 'sessionName' => $session, 'query' => $query ));
Я предполагаю, что официальная документация для веб-служб vTiger неверна.
мой этот код отлично работает
<?php function call($url, $params, $type = "GET") { $is_post = 0; if ($type == "POST") { $is_post = 1; $post_data = $params; } else { $url = $url . "?" . http_build_query($params); } $ch = curl_init($url); if (!$ch) { die("Cannot allocate a new PHP-CURL handle"); } if ($is_post) { curl_setopt($ch, CURLOPT_POST, $is_post); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params)); } curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $data = curl_exec($ch); $return = null; if (curl_error($ch)) { $return = false; } else { $return = json_decode($data, true); } curl_close($ch); return $return; } $endpointUrl = 'http://url/vtigercrm/webservice.php'; $userName = 'admin'; $userAccessKey = 'dsddsdsdsds'; $sessionData = call($endpointUrl, array("operation" => "getchallenge", "username" => $userName)); $challengeToken = $sessionData['result']['token']; $generatedKey = md5($challengeToken . $userAccessKey); $dataDetails = call($endpointUrl, array("operation" => "login", "username" => $userName, "accessKey" => $generatedKey), "POST"); $query = "SELECT * FROM Contacts WHERE cf_771='ajay' and cf_781='ajay';"; $queryParam = urldecode($query); $sessionid = $dataDetails['result']['sessionName']; $getUserDetail = call($endpointUrl, array("operation" => "query", "sessionName" => $sessionid, 'query' => $query)); echo "<pre>"; print_r($getUserDetail); echo "</pre>"; if (!empty($getUserDetail['result'])) { echo "success!!!!"; } else { echo "fail!!!!"; } ?>
Борясь с этим с помощью httpful, я в конце концов понял, что в этом случае вам нужно закодировать запрос, таким образом:
// vTiger: GET Query // http://vtiger_url/webservice.php?operation=query&sessionName=[session id]&query=[query string] $query = urlencode("SELECT * FROM Leads;"); $uri = $vTiger_uri . "?operation=query&sessionName=" . $sessionName . "&query=" . $query; $response_j = \Httpful\Request::get($uri)->send(); $response = json_decode($response_j, true); echo "<p>Query: " . $query . "</p>"; echo "<pre>"; print_r($response); echo "</pre>";