Импорт котировок в vtiger crm с веб-сервисами

Мне нужно импортировать цитаты в vtiger . Я узнаю, что это можно сделать с помощью API веб-служб vtiger

Я узнал справочное руководство: https://wiki.vtiger.com/archives/index.php/vtiger510:Webservice_reference_manual

Но я не могу найти какой-либо пример PHP-скрипта, ни какие поля данных, которые мне нужно передать в webservice.php .

Пожалуйста, помогите, мне нужно руководство.

    Возможно, вы можете начать так (согласно вашей ссылке ссылки).

    Руководство: https://wiki.vtiger.com/archives/index.php/vtiger510:Webservice_reference_manual
    Вход: https://wiki.vtiger.com/archives/index.php/vtiger510:Webservice_reference_manual#Login

    Псевдо;

     <?php class VTiger_Login { private $serviceURL = 'http://vtiger_url/webservice.php?operation=login&username=%s&accessKey=%s'; // A Vtiger username. private $userName = 'my_username'; // An md5 of the concatenation of the challenge token and the user's webservice access key. private accessKey = 'my_accesskey'; public function login() { // Open CURL $ch = curl_init(); // Set URL as same as on manual curl_setopt($ch, CURLOPT_URL, sprintf($this->serviceURL, $this->userName, $this->accessKey)); // Need POST according to manual curl_setopt($ch, CURLOPT_POST, 1); // Receive server response = TRUE curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // Exec CURL $result = curl_exec($ch); // Close CURL curl_close($ch); /* $result should be like this according to manual; LoginResult { sessionId: String // Unique Identifier for the session userId: String // The vtiger id for the logged in user version: String // The version of the webservices api vtigerVersion: String // The version of the vtiger crm. } */ // From manual: All structural data including response from the api is represented as JSON strings. $result =@ json_decode($result); // See "Response" on manual if (null === $result) { throw new Exception('No response returned from Vtiger server!'); } // See "ErrorObject" on manual if (null !== $result->success && false === $result->success) { throw new Exception('Something went wrong with login operation! errorCode: '. $result->errorCode .', errorMessage: '. $result->errorMessage); } // I think, there is no problem anymore, go with $result after this line... } } 

    Я сделал что-то вроде этого, у меня быстрое и (скорее) грязное, но рабочее решение:

     <?php function createOffer($account_id,$subject,$offerlanguage, $totalamount,$date_submission,$date_decision,$date_start,$assigned_user_id,$quotestage,$winningchance,$description,$productarray){ global $adb; $endpointUrl = "[your URL]/webservice.php"; $userName="admin"; $userAccessKey = '[your accesskey]'; $httpc = new HTTP_CLIENT(); //getchallenge request must be a GET request. $httpc->GET($endpointUrl."?operation=getchallenge&username=".$userName); $response = $httpc->currentResponse(); //decode the json encode response from the server. $jsonResponse = Zend_JSON::decode($response['body']); //check for whether the requested operation was successful or not. if($jsonResponse['success']==false) //handle the failure case. die('getchallenge failed:'.$jsonResponse['error']['errorMsg']); //operation was successful get the token from the reponse. $challengeToken = $jsonResponse['result']['token']; //create md5 string concatenating user accesskey from my preference page //and the challenge token obtained from get challenge result. $generatedKey = md5($challengeToken.$userAccessKey); //getchallenge request must be a GET request. $httpc->post("$endpointUrl", array('operation'=>'login', 'username'=>$userName, 'accessKey'=>$generatedKey), true); $response = $httpc->currentResponse(); //decode the json encode response from the server. $jsonResponse = Zend_JSON::decode($response['body']); //operation was successful get the token from the reponse. if($jsonResponse['success']==false) //handle the failure case. die('login failed:'.$jsonResponse['error']['errorMsg']); //login successful extract sessionId and userId from LoginResult to it can used for further calls. $sessionId = $jsonResponse['result']['sessionName']; $userId = $jsonResponse['result']['userId']; $currency_id=1; $params = array('description'=>$description,'subject'=>$subject,'quotestage'=>$quotestage,'assigned_user_id'=>'2x'.$assigned_user_id,'account_id'=>'3x'.$account_id,'cf_682'=>$offerlanguage,'currency_id'=>'21x'.$currency_id,'taxtype'=>'group','cf_683'=>$date_submission,'cf_684'=>$date_decision,'cf_685'=>$date_start,'cf_766'=>$winningchance); $urlArgs = "?&total=".$totalamount; //encode the object in JSON format to communicate with the server. $objectJson = Zend_JSON::encode($params); //name of the module for which the entry has to be created. $moduleName = 'Quotes'; //sessionId is obtained from loginResult. $params = array("sessionName"=>$sessionId, "operation"=>'create', "element"=>$objectJson, "elementType"=>$moduleName); //Create must be POST Request. $httpc->post($endpointUrl.$urlArgs, $params, true); $response = $httpc->currentResponse(); //decode the json encode response from the server. $jsonResponse = Zend_JSON::decode($response['body']); $savedObject = $jsonResponse['result']; $id = $savedObject['id']; $id=str_replace("13x", "", $id); echo $id." offer: ".$subject." created for amount ".$totalamount." for customer: ".$account_id." assigned to: ".$assigned_user_id; return $id; } 

    Как видите, есть несколько настраиваемых полей, поэтому вы можете видеть, как я их обрабатывал.

    Вы можете вызвать эту функцию следующим образом:

     createOffer($account_id, $subject, $offerlanguage, $totalamount, $date_submission, $date_decision, $date_start, $assigned_user_id, $quotestage, $winningchance, $description, $productarray) 

    Тогда вам также нужно добавить продукты, которые я нашел проще всего с помощью отдельной функции, так как может быть больше продуктов за кавычку …

     <?php function createProducts($productarray,$id) { $counter = 1; foreach ($productarray as $prod) { $query ="insert into vtiger_inventoryproductrel(id, productid, sequence_no, quantity, listprice) values(?,?,?,?,?)"; $qparams = array($id,$prod['prod'],$counter,$prod['pcs'],$prod['price']); $productadded=$adb->pquery($query,$qparams); $counter=$counter+1; } } , <?php function createProducts($productarray,$id) { $counter = 1; foreach ($productarray as $prod) { $query ="insert into vtiger_inventoryproductrel(id, productid, sequence_no, quantity, listprice) values(?,?,?,?,?)"; $qparams = array($id,$prod['prod'],$counter,$prod['pcs'],$prod['price']); $productadded=$adb->pquery($query,$qparams); $counter=$counter+1; } } 

    используйте его вот так:

     $prodlist = array(); array_push($prodlist,array('prod'=>"prod1",'pcs'=>2,'price'=>1000)); array_push($prodlist,array('prod'=>"prod2",'pcs'=>2,'price'=>100)); createProducts($prodlist,10); 

    поэтому моя логика такова:

    • вы создаете цитату с помощью функции createOffer. Он возвращается с идентификатором вновь созданной котировки
    • то вы создаете массив продуктов (у меня есть только самые основные данные здесь) и добавляйте это, ссылаясь на идентификатор цитаты

    Возможно, это не самое красивое решение, но работает.