2016-08-24 2 views
1

Я реализую клиент, чтобы потреблять vtiger REST API, и в процессе входа мне удается заставить его работать с завитом, но не с Guzzle.Guzzle vs CURL для взаимодействия с веб-службами vtiger, CURL работает, но Guzzle не

жрать код:

$postData = [ 
    'operation' => 'login', 
    'username' => $userName, 
    'accessKey' => $generatedKey 
]; 

$response = $client->post($url, [ 
    'form_params' => $postData 
]); 

Существует не фактическая ошибка жрать или исключение, но это просто, что я не в состоянии проверить подлинность:

{"success":false,"error":{"code":"INVALID_AUTH_TOKEN","message":"Specified token is invalid or expired"}} 

Curl версия:

$curl = curl_init($service_url); 
$curl_post_data = array(
    'operation' => 'login', 
    'username' => $crm_username, 
    'accessKey' => md5($crm_token.$crm_useraccesskey), 
); 

curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($curl, CURLOPT_POST, true); 
curl_setopt($curl, CURLOPT_POSTFIELDS, $curl_post_data); 

Я предпочитаю использовать Guzzle, но прямо сейчас я не знаю, почему он не работает в Guzzle, но он использует локон. Есть идеи?

+0

Пожалуйста, предоставьте дополнительную информацию о результирующей погрешности. Какую ошибку вы получаете с версией Guzzle с сервера? –

+0

@AlexeyShockov нет фактической ошибки Guzzle, но только я не получаю ожидаемый ответ, несмотря на отправку правильных данных – DanielRestrepo

ответ

0

Действительно ли $generatedKey в первом коде совпадает с md5($crm_token.$crm_useraccesskey) во втором коде? Если нет, то исправьте его, и это, вероятно, работает. Если нет, то на основе документации жрать 6.0 для почтовых запросов, вы можете сделать следующим образом:

$postData = [ 
    'operation' => 'login', 
    'username' => $userName, 
    'accessKey' => $generatedKey 
]; 

$response = $client->request('POST',$url, [ 
    'form_params' => $postData 
]); 

для получения дополнительной информации см это: http://docs.guzzlephp.org/en/latest/request-options.html#form-params

1
$response = $client->request('POST','',['form_params' => ['operation'=>'getchallenge', 'username'=>$userName] ]) 

выше не будет работать, но вернуть crm_token и

$response = $client->request('GET','',['query' => ['operation'=>'getchallenge', 'username'=>$userName] ])

работает отлично.

0

Действительно поздно для вечеринки, но, надеюсь, это поможет кому-то другому, у кого такая же проблема.

Это отлично работает для меня с помощью жрать 6.0

use GuzzleHttp\Client; 

// vTiger API constants 
define('VT_URL', 'http://yoursite.com/webservice.php'); 
define('VT_USERNAME', 'the_name_of_the_user'); 
define('VT_ACCESSKEY', 'your_accesskey'); 

$client = new Client(); //GuzzleHttp\Client 

// perform API GET request 
$reponse = $client->request('GET', VT_URL, [ 
    'query' => [ 
     'operation' => 'getchallenge', 
     'username' => VT_USERNAME 
    ] 
]); 

// decode the response 
$challenge = json_decode($reponse->getBody()); 

// If challenge failed 
if($reponse->getStatusCode() !== 200 || !$challenge->success) { 
    die('getchallenge failed: ' . $challenge['error']['errorMessage']); 
} 

// Everything ok so create a token from response 
$token = $challenge->result->token; 

// Create unique key using combination of challengetoken and accesskey 
$generatedkey = md5($token . VT_ACCESSKEY); 

// login using username and accesskey 
$reponse = $client->request('POST', VT_URL, [ 
    'form_params' => [ 
     'operation' => 'login', 
     'username' => VT_USERNAME, 
     'accessKey' => $generatedkey 
    ] 
]); 

// decode the response 
$login_result = json_decode($reponse->getBody()->getContents()); 

// If api login failed 
if($reponse->getStatusCode() !== 200 || !$login_result->success) { 
    die('login failed: ' . $login_success['error']['errorMsg']); 
} 

$sessionid = $login_result->result->sessionName; 

Затем вы можете использовать $ SessionID для выполнения других запросов

Смежные вопросы