我发现即使是简单的休息呼叫,有时它会返回正确的结果,但有时会返回“无效会话”,如下所示:
Array ( [name] => Invalid Session ID [number] => 11 [description] => The session ID is invalid )
我的意思是当我不断刷新请求php时,返回的内容并不确定。如果我在我的本地机器中找到这些PHP文件,而不是azure,那么无论我测试多少请求,都会得到正确的结果。
我的休息请求的顺序是:
首先使用admin username和pwd登录,如下所示:
$url = "http://crm.abc.xyz/service/v4_1/rest.php";
ini_set('max_execution_time', 300);
function restRequest($method, $arguments){
global $url;
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$post = array(
"method" => $method,
"input_type" => "JSON",
"response_type" => "JSON",
"rest_data" => json_encode($arguments),
);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
$result = curl_exec($curl);
curl_close($curl);
return json_decode($result,1);
}
$carrierID = '9';
$userAuth = array(
'user_name' => 'admin',
'password' => md5('XXXXXXX'),
);
$appName = 'My SuiteCRM REST Client';
$nameValueList = array();
$args = array(
'user_auth' => $userAuth,
'application_name' => $appName,
'name_value_list' => $nameValueList);
$result = restRequest('login',$args);
$sessId = $result['id'];
一旦获得返回会话ID到变量$ sessId,使用此会话进行其他休息调用:
$entryArgs = array(
'session' => $sessId,
'module_name' => 'Accounts',
'query' => "carrierid_c ='999'",
'max_results' => 2,
'deleted' => 0,
);
$result = restRequest('get_entry_list',$entryArgs);
print_r($result);
当print_r($ result);有时会显示:
Array ( [result_count] => 0 [total_count] => 0 [next_offset] => 0 [entry_list] => Array ( ) [relationship_list] => Array ( ) )
意思是没有这个帐户,这是正确的,
但有些时候会显示出来:
Array ( [name] => Invalid Session ID [number] => 11 [description] => The session ID is invalid )
我的猜测是当请求从azure发送到ubantu网站时,它可能来自不同的实例,所以ubantu的sugarcrm从不同的IP收到相同用户的请求并认为它是假会话,我不知道这个猜测是不是正确,也不知道如何在天蓝色中修复它,感谢您的帮助。