Php Guzzle vs CURL对于与vtiger web服务交互,CURL可以工作,但Guzzle不能

Php Guzzle vs CURL对于与vtiger web服务交互,CURL可以工作,但Guzzle不能,php,curl,guzzle,vtiger,Php,Curl,Guzzle,Vtiger,我正在实现一个使用vtiger restapi的客户端,在登录过程中,我设法让它使用curl而不是Guzzle 狂饮代码: $postData = [ 'operation' => 'login', 'username' => $userName, 'accessKey' => $generatedKey ]; $response = $client->post($url, [ 'form_params' => $postData

我正在实现一个使用vtiger restapi的客户端,在登录过程中,我设法让它使用curl而不是Guzzle

狂饮代码:

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

$response = $client->post($url, [
    'form_params' => $postData
]);
没有实际的Guzzle错误或异常,只是我无法进行身份验证:

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

$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中不起作用,但它使用curl。有什么想法吗?

第一个代码中的
$generatedKey
与第二个代码中的
md5($crm\u token.$crm\u useraccesskey)
相同吗? 如果没有,那么纠正它,它可能会工作。如果没有,根据Guzzle 6.0的文档,对于post请求,您可以执行以下操作:

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

$response = $client->request('POST',$url, [
    'form_params' => $postData
]);
有关更多信息,请参见:

上述操作无效,但返回crm_令牌和

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


很好。

晚会真的很晚了,但希望这能帮助其他有同样问题的人

这对我使用Guzzle 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执行其他查询

请提供有关结果错误的详细信息。服务器上的Guzzle版本出现了什么错误?@AlexeyShockov没有实际的Guzzle错误,只是尽管发送了正确的数据,我还是没有得到预期的响应
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;