webservice.php Vtiger更新查询字符串php curl post

webservice.php Vtiger更新查询字符串php curl post,php,curl,post,vtiger,Php,Curl,Post,Vtiger,是否有人知道如何正确格式化vtiger中的更新查询以更新Leads模块下的记录 我一直在关注这一点: 并且能够登录、查询和执行质询响应,但我无法让更新功能正常工作,这可能是因为我不确定他们希望查询的外观如何。这是我发送查询时遇到的错误: stdClass Object ( [success] => [error] => stdClass Object ( [code] => ACCESS_DENIED [message] => Permission to perform

是否有人知道如何正确格式化vtiger中的更新查询以更新Leads模块下的记录

我一直在关注这一点:

并且能够登录、查询和执行质询响应,但我无法让更新功能正常工作,这可能是因为我不确定他们希望查询的外观如何。这是我发送查询时遇到的错误:

stdClass Object ( [success] => [error] => stdClass Object ( [code] => ACCESS_DENIED [message] => Permission to perform the operation is denied for id ) )   
当前测试代码:

function updatesomeone(){
global $createduserleadnum;
global $url;
global $sessionID;
global $createduserid;


$customdata = array(
'firstname'=> 'TestAPILead2',//Update First name
'lastname'=> 'TestAPILeadLast2', //Updated Last name
'leadstatus'=> 'New',
'leadsource'=> 'Some Lead Source', //Not Real Lead source
'assigned_user_id'=> 'User-Assigned', //not real user
'cf_755'=> 'A Custom Field', // A Custom Field
'lead_no' => $createduserleadnum, Acquired from other function/stored value
);

$customdata = json_encode($customdata);
$field = array(
'operation' => 'update',
'sessionName'=> $sessionID,
'element' => $customdata
);


$fields_string;
foreach($field as $key=>$value) { global $fields_string;
$fields_string .= $key.'='.$value.'&'; }
$ch = curl_init();


curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_POST, count($field));
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

$result = curl_exec($ch);
$pringjson = json_decode($result);

print_r($pringjson);

}

把它弄明白了。它与$fieldstring变量相关。出于某种原因,它没有保持函数的局部性,因此它包含了一些其他变量。刚刚更改了fieldstring变量,该变量末尾有一个数字。在最后的代码中,我将编写一个更好的用于url-ify变量的脚本。我还必须使用提供的完整id。无论哪种方式,它现在都已解决,并且代码正常工作。

我对您的代码有一个建议。您还没有删除&最后将在“foreach”循环之后生成。因此,只需在foreach之后添加rtrim,并将$fields\u字符串变量定义为空

$fields_string = '';
foreach($field as $key=>$value) {
     global $fields_string;
     $fields_string .= $key.'='.$value.'&'; 
}
rtrim($fields_string, '&');

关于对象的更新,api的文档不是很清楚,所以我认为这段代码可能会引起一些人的兴趣

基本上,为了能够更新对象,您至少需要

  • 身份证
  • 要更新的对象的所有“必需”字段(取决于对象类型),即使您不想更新它们。例如,对于标准配置中的Lead,您至少需要“姓氏”和“分配的用户ID”
  • 如果需要,以下是我的代码:

    $vt_address = 'URL of Vtiger install';
    $vt_session = 'Vtiger Session ID';
    
    $object_to_update = array('id' => '10x71', 'lastname'=>'Test Lead', 'assigned_user_id' => '19x1');
    
    vtlib_update_data($vt_address, $vt_session, $object_to_update);
    
    function vtlib_update_data($vt_address, $vt_session, $vt_object) {
    
        $vt_json = json_encode($vt_object);
        $vt_url = "$vt_address/webservice.php";
    
        $vt_post_data = array(
            'operation' => 'update',
            'sessionName' => $vt_session,
            'element' => $vt_json
        );
    
        $vt_data = vtlib_curl($vt_url, $vt_post_data);
    
        return ($vt_data['success']) ? $vt_data['result'] : false;
    
    }
    
    function vtlib_curl($vt_url, $vt_post_data) {
    
        $vt = curl_init($vt_url);
        curl_setopt($vt, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($vt, CURLOPT_POST, true);
        curl_setopt($vt, CURLOPT_POSTFIELDS, $vt_post_data);
        $vt_data = json_decode(curl_exec($vt), true);
        curl_close($vt);
    
        return $vt_data;
    }