2017-11-17 4 views
1

developer guide for SuiteCRMは、software forkより前のものであったold SugarCRM oneと比較して、(少なくともここでは2017年の第4四半期に)不完全です。したがって、WordPress Plugin for SugarCRMをダウンロードすることで、SuiteCRMの販売リードを次のコードで追加するためのREST APIとJSONを理解することができました。SuiteCRMにリードを追加する際に重複を防止するにはどうすればよいですか?

自宅の電話、携帯電話、または電子メールアドレスで重複しないようにするにはどうすればよいですか?

<?php 

error_reporting(E_ALL); 
ini_set('display_errors','On'); 

header('Content-Type: text/plain'); 

CRM::loginCRM('admin','xxxxPASSWORDxxxxxx'); 

$aResult = CRM::addLead(array(
    'name' => 'John Doe', 
    'description' => 'sample description', 
    'salutation' => 'Mr.', 
    'first_name' => 'John', 
    'last_name' => 'Doe', 
    'do_not_call' => 'No', 
    'phone_home' => '202-111-2222', 
    'phone_mobile' => '202-111-2222', 
    'email1' => '[email protected]', 
    'primary_address_street' => '123 Main Street', 
    'primary_address_street2' => '', 
    'primary_address_street3' => '', 
    'primary_address_city' => 'New York', 
    'primary_address_state' => 'NY' 
)); 

print_r($aResult); 
CRM::logoutCRM(); 


die('OK'); 
///////////////////////// 

class CRM { 

private static $SessionID = ''; 

private static $URL = 'https://mycrmserver-example.com/service/v4_1/rest.php'; 

private static $User = ''; 
private static $Shadow = ''; 

public static function sendJSON($a) { 
    $s = file_get_contents(
    self::$URL, 
    false, 
    stream_context_create(
     array(
     'http' => array (
      'method' => 'POST', 
      'header' => 'Content-Type: application/x-www-form-urlencoded', 
      'content' => http_build_query($a) 
     ) 
    ) 
    ) 
); 
    $a2 = json_decode($s); 
    return $a2; 
} 

public static function loginCRM($sUser,$sPass) { 
    $sShadow = md5($sPass); 
    self::$User = $sUser; 
    self::$Shadow = $sShadow; 
    $asLogin = array (
    'method' => 'login', 
    'input_type' => 'JSON', 
    'response_type' => 'JSON', 
    'rest_data' => json_encode(array(
     'user_auth' => array(
     'user_name' => $sUser, 
     'password' => $sShadow, 
     'version' => 1 
    ), 
     'application_name' => 'RestTest', 
     'name_value_list' => array() 
    )) 
); 
    $a = self::sendJSON($asLogin); 
    self::$SessionID = $a->id; 
} 

public static function logoutCRM() { 
    $asLogin = array (
    'method' => 'logout', 
    'input_type' => 'JSON', 
    'response_type' => 'JSON', 
    'rest_data' => json_encode(array(
     'user_auth' => array(
     'user_name' => self::$User, 
     'password' => self::$Shadow, 
     'version' => 1 
    ), 
     'application_name' => 'RestTest', 
     'name_value_list' => array() 
    )) 
); 
    self::sendJSON($asLogin); 
} 

public static function addLead($a) { 
    $asNameValueList = array(); 
    foreach($a as $sKey => $sVal) { 
    $asNameValueList[] = array('name'=>$sKey,'value'=>$sVal); 
    } 
    $asAddEntry = array (
    'method' => 'set_entry', 
    'input_type' => 'JSON', 
    'response_type' => 'JSON', 
    'rest_data' => json_encode(array(
     'session' => self::$SessionID, 
     'module_name' => 'Leads', 
     'name_value_list' => $asNameValueList 
    )) 
); 
    $a = self::sendJSON($asAddEntry); 
    return $a; 
} 

} // end CRM 

答えて

2

これらの機能をCRMクラスに追加し、リードを追加する前に確認してください。私はちょっと助けてthis answerから偶然私にいくつかの洞察力を与えました。また、特定のIPアドレスのみを許可する.htaccessまたはNGINXルールを追加する、特定のヘッダーを/ serviceフォルダ内のもの、および/ service/*サブフォルダにHTTPまたはHTTP経由で接続するなど、セキュリティを強化することをお勧めしますHTTPS。

public static function leadExistsByPhone($sHomePhone,$sMobilePhone) { 
    $sHomePhone = (empty($sHomePhone)) ? 'xxxxxinvalid' : $sHomePhone; 
    $sMobilePhone = (empty($sMobilePhone)) ? 'xxxxxinvalid' : $sMobilePhone; 
    $asCheck = array (
    'method' => 'get_entry_list', 
    'input_type' => 'JSON', 
    'response_type' => 'JSON', 
    'rest_data' => json_encode(array(
     'session' => self::$SessionID, 
     'module_name' => 'Leads', 
     'query' => " 
     leads.phone_home = '$sHomePhone' 
     OR leads.phone_mobile = '$sMobilePhone' 
     ", 
     'order_by' => 'leads.date_entered DESC', 
     'offset' => '0', 
     'select_fields' => array(), 
     'link_name_to_fields_array' => array(), 
     'max_results' => 999999, 
     'deleted' => false 
    )) 
); 
    $a = self::sendJSON($asCheck); 
    $nCount = @ $a->result_count; 
    $nCount = intval($nCount); 
    return ($nCount > 0); 
} 

public static function leadExistsByEmail($sEmail) { 
    if (!filter_var($sEmail, FILTER_VALIDATE_EMAIL)) { 
    die('DENIED: invalid email address format'); 
    } 
    $asCheck = array (
    'method' => 'get_entry_list', 
    'input_type' => 'JSON', 
    'response_type' => 'JSON', 
    'rest_data' => json_encode(array(
     'session' => self::$SessionID, 
     'module_name' => 'Leads', 
     'query' => " 
     leads.id IN 
     (
      SELECT email_addr_bean_rel.bean_id 
      FROM email_addr_bean_rel 
      JOIN email_addresses 
      ON  email_addr_bean_rel.email_address_id = email_addresses.id 
      WHERE 
      email_addresses.email_address = '$sEmail' 
     ) 
     ", 
     'order_by' => 'leads.date_entered DESC', 
     'offset' => '0', 
     'select_fields' => array(), 
     'link_name_to_fields_array' => array(), 
     'max_results' => 999999, 
     'deleted' => false 
    )) 
); 
    $a = self::sendJSON($asCheck); 
    $nCount = @ $a->result_count; 
    $nCount = intval($nCount); 
    return ($nCount > 0); 
} 
+0

そして、あなたはその既存のリードを更新したい場合は、IDを取得し、その後で、 '$ asNameValueList'配列に' id'を渡すように、単に 'leadExists *()'関数を少し変更'set_entry'メソッドです。 – Volomike

関連する問題