Пример #1
0
 /**
  * connect to salesforce, get sforceClient
  * @return SforcePartnerClient
  */
 public static function getClient()
 {
     if (self::$_sForceClient == NULL) {
         $sforceClient = new SforcePartnerClient();
         // TODO now only partner client supported.
         $soapClient = $sforceClient->createConnection(self::$wsdlPartner);
         if (PHP_SAPI != 'cli') {
             @session_start();
             if (isset($_SESSION[self::SESSION_KEY])) {
                 $conf = $_SESSION[self::SESSION_KEY];
                 $sforceClient->setEndpoint($conf->location);
                 $sforceClient->setSessionHeader($conf->sessionId);
             } else {
                 $sforceLogin = $sforceClient->login(self::$username, self::$password . self::$securityToken);
                 $conf = new stdClass();
                 $conf->location = $sforceClient->getLocation();
                 $conf->sessionId = $sforceClient->getSessionId();
                 $_SESSION[self::SESSION_KEY] = $conf;
             }
         } else {
             $sforceLogin = $sforceClient->login(self::$username, self::$password . self::$securityToken);
         }
         self::$_sForceClient = $sforceClient;
     }
     return self::$_sForceClient;
 }
 function establish(ConnectionConfiguration $connConfig)
 {
     $connection = new SforcePartnerClient();
     $connection->createConnection($this->buildWsdlPath($connConfig));
     $connection->setEndpoint($this->buildEndpoint($connConfig));
     $connection->setSessionHeader($connConfig->getSessionId());
     $connection->setCallOptions(new CallOptions($connConfig->getClientId(), WorkbenchConfig::get()->value('callOptions_defaultNamespace')));
     if (WorkbenchContext::get()->isApiVersionAtLeast(27.0)) {
         if (!WorkbenchConfig::get()->value('ownerChangeOptions_transferAttachments') || !WorkbenchConfig::get()->value('ownerChangeOptions_transferOpenActivities')) {
             $connection->setOwnerChangeOptionsHeader(new OwnerChangeOptionsHeader(WorkbenchConfig::get()->value('ownerChangeOptions_transferAttachments'), WorkbenchConfig::get()->value('ownerChangeOptions_transferOpenActivities')));
         }
     }
     if (WorkbenchConfig::get()->value('assignmentRuleHeader_assignmentRuleId') || WorkbenchConfig::get()->value('assignmentRuleHeader_useDefaultRule')) {
         $connection->setAssignmentRuleHeader(new AssignmentRuleHeader(WorkbenchConfig::get()->value('assignmentRuleHeader_assignmentRuleId'), WorkbenchConfig::get()->value('assignmentRuleHeader_useDefaultRule')));
     }
     if (WorkbenchConfig::get()->value('mruHeader_updateMru')) {
         $connection->setMruHeader(new MruHeader(WorkbenchConfig::get()->value('mruHeader_updateMru')));
     }
     if (WorkbenchConfig::get()->value('queryOptions_batchSize')) {
         $connection->setQueryOptions(new QueryOptions(WorkbenchConfig::get()->value('queryOptions_batchSize')));
     }
     if (WorkbenchConfig::get()->value('emailHeader_triggerAutoResponseEmail') || WorkbenchConfig::get()->value('emailHeader_triggerOtherEmail') || WorkbenchConfig::get()->value('emailHeader_triggertriggerUserEmail')) {
         $connection->setEmailHeader(new EmailHeader(WorkbenchConfig::get()->value('emailHeader_triggerAutoResponseEmail'), WorkbenchConfig::get()->value('emailHeader_triggerOtherEmail'), WorkbenchConfig::get()->value('emailHeader_triggertriggerUserEmail')));
     }
     if (WorkbenchConfig::get()->value('UserTerritoryDeleteHeader_transferToUserId')) {
         $connection->setUserTerritoryDeleteHeader(new UserTerritoryDeleteHeader(WorkbenchConfig::get()->value('UserTerritoryDeleteHeader_transferToUserId')));
     }
     if (WorkbenchConfig::get()->value('allowFieldTruncationHeader_allowFieldTruncation')) {
         $connection->setAllowFieldTruncationHeader(new AllowFieldTruncationHeader(WorkbenchConfig::get()->value('allowFieldTruncationHeader_allowFieldTruncation')));
     }
     if (WorkbenchConfig::get()->value('allOrNoneHeader_allOrNone')) {
         $connection->setAllOrNoneHeader(new AllOrNoneHeader(WorkbenchConfig::get()->value('allOrNoneHeader_allOrNone')));
     }
     if (WorkbenchConfig::get()->value('disableFeedTrackingHeader_disableFeedTracking')) {
         $connection->setDisableFeedTrackingHeader(new DisableFeedTrackingHeader(WorkbenchConfig::get()->value('disableFeedTrackingHeader_disableFeedTracking')));
     }
     if (WorkbenchConfig::get()->value('localOptions_language')) {
         $connection->setLocaleOptions(new LocaleOptions(WorkbenchConfig::get()->value('localOptions_language')));
     }
     if (WorkbenchConfig::get()->value('packageVersionHeader_include') && WorkbenchConfig::get()->value('packageVersion_namespace') && WorkbenchConfig::get()->value('packageVersion_majorNumber') && WorkbenchConfig::get()->value('packageVersion_minorNumber')) {
         $connection->setPackageVersionHeader(WorkbenchConfig::get()->value("packageVersion_namespace"), WorkbenchConfig::get()->value("packageVersion_majorNumber"), WorkbenchConfig::get()->value("packageVersion_minorNumber"));
     }
     return $connection;
 }
 public static function get_api($settings = array(), $after_refresh = false)
 {
     // If it's already set, use it.
     if (!empty(self::$api)) {
         self::log_debug("get_api(): API connection already set.");
         return self::$api;
     }
     if (!is_array($settings) || empty($settings)) {
         $settings = self::$settings;
         if (!is_array($settings) || empty($settings)) {
             $settings = get_option("gf_salesforce_settings");
         }
     }
     // If the settings aren't set...return false
     if (!is_array($settings) || empty($settings)) {
         self::log_error("get_api(): Settings not set, so we can't get the Salesforce connection.");
         return false;
     }
     $libpath = plugin_dir_path(KWS_GF_Salesforce::$file) . 'lib/Force.com-Toolkit-for-PHP/soapclient/';
     $enterprise = apply_filters('gf_salesforce_enterprise', false, $settings);
     try {
         //This is instantiating the service used for the sfdc api
         if ($enterprise) {
             if (!class_exists("SforceEnterpriseClient")) {
                 require_once $libpath . 'SforceEnterpriseClient.php';
             }
             $mySforceConnection = new SforceEnterpriseClient();
             $_wsdl = 'enterprise.wsdl.xml';
         } else {
             if (!class_exists("SforcePartnerClient")) {
                 require_once $libpath . 'SforcePartnerClient.php';
             }
             $mySforceConnection = new SforcePartnerClient();
             $_wsdl = 'partner.wsdl.xml';
         }
         if (self::GF_SF_SANDBOX && file_exists($libpath . 'sandbox.wsdl.xml')) {
             $_wsdl = 'sandbox.wsdl.xml';
         }
         /**
          * Create a connection using SforceBaseClient::createConnection().
          *
          * @param string $wsdl   Salesforce.com Partner WSDL
          * @param object $proxy  (optional) proxy settings with properties host, port,
          *                       login and password
          * @param array $soap_options (optional) Additional options to send to the
          *                       SoapClient constructor. @see
          *                       http://php.net/manual/en/soapclient.soapclient.php
          */
         $mySforceConnection->createConnection(apply_filters('gf_salesforce_wsdl', $libpath . $_wsdl), apply_filters('gf_salesforce_proxy', NULL), apply_filters('gf_salesforce_soap_options', array()));
         /**
          * Set access using OAuth instead of Basic
          * @link  https://developer.salesforce.com/blogs/developer-relations/2011/03/oauth-and-the-soap-api.html
          */
         $token = self::getAccessToken();
         if (empty($token)) {
             self::log_debug("get_api(): The access token is empty - app is not yet authenticated");
             return false;
         }
         $mySforceConnection->setSessionHeader($token);
         $mySforceConnection->setEndpoint(self::getEndpoint($token));
         $mySforceConnection = apply_filters('gf_salesforce_connection', $mySforceConnection);
         //let's force some action through the connection to make sure is up and running!
         $timestamp = $mySforceConnection->getServerTimestamp();
         self::$api = $mySforceConnection;
         return $mySforceConnection;
     } catch (Exception $e) {
         self::log_error(sprintf("get_api(): There was an error getting the connection to Salesforce. The error message was: %s\nHere's the exception: %s", $e->getMessage(), print_r($e, true)));
         // The token has expired. We need to refresh the token.
         if (isset($e->faultcode) && in_array($e->faultcode, array('sf:INVALID_SESSION_ID', 'UNKNOWN_EXCEPTION')) && !$after_refresh) {
             try {
                 self::log_error("get_api(): The access token has expired; fetching a refresh token.");
                 // Refresh the token
                 $refreshToken = self::refreshToken();
                 // If the token fetch failed, return false.
                 if (empty($refreshToken)) {
                     self::log_error('get_api(): The refreshToken call has failed. This may be due to your Salesforce Instance "Refresh Token Policy". If it is not set to "Refresh token is valid until revoked" (the default), that can cause problems.');
                     self::log_error('See http://www.salesforce.com/us/developer/docs/packagingGuide/Content/connected_app_manage_edit.htm#oauth_policies for more information.');
                     return false;
                 }
             } catch (Exception $e) {
                 self::log_error(sprintf("get_api(): There was an error refreshing the access token to Salesforce. The error message was: %s\nHere's the exception: %s", $e->getMessage(), print_r($e, true)));
                 return false;
             }
             self::log_error("get_api(): The refresh token has been fetched; now trying get_api() again.");
             // And try one more time.
             return self::get_api($settings, true);
         }
         self::log_error(sprintf("get_api(): Token was not refreshed for this error: %s ", $e->getMessage()));
         return isset($e->faultstring) ? $e->faultstring : false;
     }
 }
Пример #4
0
     echo $record->Id . ": " . $record->FirstName . " " . $record->LastName . " " . $record->Phone . "<br/>\n";
 }
 echo "<br/>Finally, delete the records:<br/><br/>\n";
 $response = $mySforceConnection->delete($ids);
 foreach ($response as $result) {
     echo $result->success == 1 ? $result->id . " deleted<br/>\n" : "Error: " . $result->errors->message . "<br/>\n";
 }
 echo "</td><td>";
 echo "Now let's use the partner client<br/><br/>\n";
 $mySforceConnection = new SforcePartnerClient();
 $mySforceConnection->createConnection("soapclient/partner.wsdl.xml");
 if (isset($_SESSION['partnerSessionId'])) {
     $location = $_SESSION['partnerLocation'];
     $sessionId = $_SESSION['partnerSessionId'];
     $mySforceConnection->setEndpoint($location);
     $mySforceConnection->setSessionHeader($sessionId);
     echo "Used session ID for partner<br/><br/>\n";
 } else {
     $mySforceConnection->login(USERNAME, PASSWORD . SECURITY_TOKEN);
     $_SESSION['partnerLocation'] = $mySforceConnection->getLocation();
     $_SESSION['partnerSessionId'] = $mySforceConnection->getSessionId();
     echo "Logged in with partner<br/><br/>\n";
 }
 $query = "SELECT Id, FirstName, LastName, Phone from Contact";
 $response = $mySforceConnection->query($query);
 $queryResult = new QueryResult($response);
 echo "Results of query '{$query}'<br/><br/>\n";
 for ($queryResult->rewind(); $queryResult->pointer < $queryResult->size; $queryResult->next()) {
     $record = $queryResult->current();
     // Id is on the $record, but other fields are accessed via
     // the fields object