class SalesforceSoapPartner in Salesforce Suite 7.3
Expose the partner SOAP API by extending SforcePartnerClient and configuring it with the OAUTH credentials and endpoints from the Salesforce API class.
Hierarchy
- class \SalesforceSoapPartner extends \SforcePartnerClient
Expanded class hierarchy of SalesforceSoapPartner
1 string reference to 'SalesforceSoapPartner'
- salesforce_pull_get_deleted_records in modules/
salesforce_pull/ salesforce_pull.module - Get deleted records from salesforce.
File
- modules/
salesforce_soap/ salesforce_soap.inc, line 12 - Contains SalesforceSoapPartner.
View source
class SalesforceSoapPartner extends SforcePartnerClient {
protected $salesforceApi;
protected $isConnected;
private $refreshed;
/**
* Constructor for SalesforceSoapPartner.
*
* @param Salesforce $sfapi
* Salesforce API object
* @param string $wsdl
* WSDL provided by Salesforce account. One will be created if not
* explicitly provided.
*/
public function __construct(Salesforce $sfapi, $wsdl = NULL) {
parent::__construct();
if (empty($wsdl)) {
$wsdl = libraries_get_path('salesforce') . '/soapclient/partner.wsdl.xml';
}
$this
->setConnected(FALSE);
$this
->createConnection($wsdl);
$this->salesforceApi = $sfapi;
// Use the "isAuthorized" callback to initialize session headers.
// Callers can use the trySoap() wrapper to automatically handle
// the SoapFault invalid session exception.
if ($this->salesforceApi
->isAuthorized()) {
$token = $this->salesforceApi
->getAccessToken();
if (!$token) {
$token = $this->salesforceApi
->refreshToken();
}
$this
->setSessionHeader($token);
$this
->setEndPoint($this->salesforceApi
->getApiEndPoint('partner'));
$this
->setConnected(TRUE);
}
else {
// Alert the caller that the Salesforce instance has not been configured.
watchdog('salesforce_soap', 'Attempting to use an instance of
the SalesforceSoapPartner class with a non-authorized Salesforce API
instance. Please ensure the Salesforce API module has been configured
and successfully authorized with a Salesforce org.', NULL, WATCHDOG_ERROR);
$this
->setConnected(FALSE);
}
}
/**
* Setter for isConnected private variable.
*
* @param bool $is_connected
* Boolean to indicate whether the instance made a successful connection
* to the SOAP API.
*/
protected function setConnected($is_connected) {
$this->isConnected = $is_connected;
}
/**
* Indicates whether or not a successfull connection was made the SOAP API.
*/
public function isConnected() {
return $this->isConnected;
}
/**
* Wrap SF SOAP API resources in a try-catch so that we can automatically
* re-auth when we have an invalid session id / access token.
*
* @param string $function
* The name of the SforcePartnerClient function to attempt.
* @param mixed arg1, arg2, arg3...
* Parameters to pass through to $function
*
* @return the results of $function
* @see SforcePartnerClient()
*/
public function trySoap($function) {
$args = func_get_args();
array_shift($args);
try {
$results = call_user_func_array(array(
$this,
$function,
), $args);
// If returned without exceptions, reset the refreshed flag.
$this->refreshed = FALSE;
return $results;
} catch (SoapFault $e) {
// sf:INVALID_SESSION_ID is thrown on expired login (and other reasons).
// Our only recourse is to try refreshing our auth token. If we get any
// other exception, bubble it up.
if ($e->faultcode != 'sf:INVALID_SESSION_ID') {
throw $e;
}
if (!$this->refreshed) {
// If we got an invalid session exception, try to refresh the auth
// token through REST API. The "refreshed" flag will make sure we retry
// only once.
$this->refreshed = TRUE;
$this->salesforceApi
->refreshToken();
return $this
->trySoap($function, $args);
}
// If we've already tried a refresh, this refresh token is probably
// invalid. Kill it, log, and bubble the exception.
$this
->setConnected(FALSE);
variable_del('salesforce_refresh_token');
$link = l(t('the Salesforce configuration page'), 'admin/config/services/salesforce');
$message = t('Your website is not authorized to connect with Salesforce. Please visit !config to authorize your site.', array(
'!config' => $link,
));
salesforce_set_message($message, $error, FALSE);
watchdog_exception('salesforce_soap', $e, t('Salesforce SOAP %function failed. Your website is not authorized to connect with Salesforce.'), array(
'%function' => $function,
), WATCHDOG_ERROR, $link);
throw $e;
}
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
SalesforceSoapPartner:: |
protected | property | ||
SalesforceSoapPartner:: |
private | property | ||
SalesforceSoapPartner:: |
protected | property | ||
SalesforceSoapPartner:: |
public | function | Indicates whether or not a successfull connection was made the SOAP API. | |
SalesforceSoapPartner:: |
protected | function | Setter for isConnected private variable. | |
SalesforceSoapPartner:: |
public | function | Wrap SF SOAP API resources in a try-catch so that we can automatically re-auth when we have an invalid session id / access token. | |
SalesforceSoapPartner:: |
public | function | Constructor for SalesforceSoapPartner. |