Importing quotes into vtiger crm with web services

核能气质少年 提交于 2019-12-22 10:37:34

问题


I need to import quotes into vtiger. I find out it can be be done using vtiger web services API

I find out the reference manual: https://wiki.vtiger.com/archives/index.php/vtiger510:Webservice_reference_manual

But i can't find any example PHP script, neither what data fields I need to pass to webservice.php.

Please help, I need some guidance.


回答1:


Maybe you can start like this (according to your reference link).

Manual: https://wiki.vtiger.com/archives/index.php/vtiger510:Webservice_reference_manual
Login: https://wiki.vtiger.com/archives/index.php/vtiger510:Webservice_reference_manual#Login

Pseudo;

<?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...
    }
}



回答2:


I have done something like this, I have a quick and (rather) dirty but working solution:

<?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;

    }

As you see there are a few custom fields too so you can see how I've handled those.

You can call this function like this:

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

Then you need to add the products too, which I've found the easiest via a separate function as there can be more products per quote...

<?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;
    }
}

use it like this:

$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);

so my logic is like this:

  • you create the quote with the createOffer function. It returns with the newly created quote's ID
  • then you build the array of products (I have just the very basic data here) and add that by referencing the quote's ID

Maybe not the most beautiful solution but works.



来源:https://stackoverflow.com/questions/14523882/importing-quotes-into-vtiger-crm-with-web-services

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!