vTiger webservice" ACCESS_DENIED:对于id"拒绝执行操作的权限。

时间:2013-03-20 18:43:19

标签: php web-services api vtiger

我想通过vTiger webservice添加SalesOrder。我正在使用这个vtwsclib。这是代码:

<?php
include_once('vtwsclib/Vtiger/WSClient.php');
$url = 'http://localhost:8888';
$client = new Vtiger_WSClient($url);
$login = $client->doLogin('admin', 'zzzzzzzz');
if(!$login) echo 'Login Failed';
else {

    $data = array(
        'subject' => 'Test SalesOrder',
        'sostatus' => 'Created',
        'invoicestatus'=>'AutoCreated',
        'account_id'=> '46', // Existing account id
        'bill_street' => 'Bill Street',
        'ship_street' => 'Ship Street',
    );
    $record = $client->doCreate('SalesOrder', $data);

$error = $client->lasterror();
    if($error) {
    echo $error['code'] . ' : ' . $error['message'];
}

if($record) {
    $salesorderid = $client->getRecordId($record['id']);
}

}
?>

我只得到:“ACCESS_DENIED:执行操作的权限被拒绝为id”。

Account_id存在于数据库中。其他SalesOrder添加了相同的account_id但通过网页。我也用accout_id =“6x46”尝试了变体,其中6是module_id。它也没用。任何想法如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

我认为您应该尝试11x46帐户ID。 Vtiger Web服务实体ID与tabid不同。

要获得所有实体ID的正确列表,请在MySQL中为CRM执行此操作:

select id, name from vtiger_ws_entity;

答案 1 :(得分:-1)

这种方法可以帮助您生成查询 q

"http://vtigercrm/webservice.php?operation=query&sessionName=ABC&query="+q

例如,您希望:

SELECT * FROM INVOICE WEHRE id='72xxx';

你可以做到

buildVtigerQuery('INVOICE', ['id' => '72xx']);

这是功能:

    protected function buildQuery(
    string $moduleName,
    array $filterData = [],
    string $attributes = '*',
    int $start = 0,
    int $limit = null
): string {
    $query = 'SELECT ' . $attributes . ' FROM ' . $moduleName . ' ';
    if (!empty($filterData)) {
        $query .= 'WHERE ';
        foreach ($filterData as $key => $value) {
            $whereOperator = (is_numeric($value) === true) ? ' = ' : ' like ';
            $value = (is_numeric($value) === true) ? $value : '%' . $value . '%';
            $query .= $key . $whereOperator . '\'' . $value . '\'' . ' AND WHERE ';
        }
    }

    if (substr($query, -11) === ' AND WHERE ') {
        $query = substr_replace($query, "", -11);
    }

    if ((!is_null($limit)) && (0 < $start)) {
        $query .= ' ORDER BY id LIMIT ' . $start . ',' . $limit;
    }


    if (!is_null($limit) && (0 >= $start)) {
        $query .= ' ORDER BY id LIMIT ' . $limit;
    }


    return $query . ';';
}

我没有考虑XSS注入,因为我的预期查询 q 将写在网址