fobilow / salesforce
用于与Salesforce REST API交互并管理OAuth流程的库
Requires
- php: >=5.5
- guzzlehttp/guzzle: ^6.0
- nesbot/carbon: ^1.12
Requires (Dev)
- mockery/mockery: ^0.9.4
- phpunit/phpunit: ^4.6
This package is not auto-updated.
Last update: 2024-09-19 17:17:56 UTC
README
Salesforce PHP库
一个用于与Salesforce REST API交互的简单库。
提供设置连接、请求访问令牌、刷新访问令牌、保存访问令牌以及针对API进行调用等方法。
入门
安装: 应通过composer安装该包,并锁定到主版本
composer require crunch-accounting/salesforce-api:~1.0
创建OAuth令牌: 您需要为用户获取访问令牌,后续的所有请求都将针对此用户执行。
$sfClient = \Crunch\Salesforce\Client::create('https://test.salesforce.com/', 'clientid', 'clientsecret'); if ( ! isset($_GET['code'])) { $url = $sfClient->getLoginUrl('http://example.com/sf-login'); header('Location: '.$url); exit(); } else { $token = $sfClient->authorizeConfirm($_GET['code'], 'http://example.com/sf-login'); $tokenGenerator = new \Crunch\Salesforce\AccessTokenGenerator(); $accessToken = $tokenGenerator->createFromSalesforceResponse($token); $_SESSION['accessToken'] = $accessToken->toJson(); }
执行操作: 获取访问令牌后,您可以对该API执行请求。
$sfClient = \Crunch\Salesforce\Client::create('https://test.salesforce.com/', 'clientid', 'clientsecret'); $tokenGenerator = new \Crunch\Salesforce\AccessTokenGenerator(); $accessToken = $tokenGenerator->createFromJson($_SESSION['accessToken']); $sfClient->setAccessToken($accessToken); $results = $sfClient->search('SELECT Name, Email FROM Lead Limit 10'); print_r($results);
令牌将在一小时后过期,因此您应该确保检查过期时间并相应地刷新。
设置Salesforce客户端
客户端可以通过两种方式配置,您可以通过调用上面的静态create方法并传入登录URL和OAuth详细信息来配置客户端,或者您可以使用以下示例中的配置对象。当您需要从ioc容器中解析客户端时,这很有用。
客户端的配置数据通过配置文件传入,该配置文件必须实现\Crunch\Salesforce\ClientConfigInterface
例如
class SalesforceConfig implements \Crunch\Salesforce\ClientConfigInterface { /** * @return string */ public function getLoginUrl() { return 'https://test.salesforce.com/'; } /** * @return string */ public function getClientId() { return 'clientid'; } /** * @return string */ public function getClientSecret() { return 'clientsecret'; } }
提供了一个配置类,如果需要可以使用。 \Crunch\Salesforce\ClientConfig
然后可以使用配置对象和Guzzle v4客户端实例化Salesforce客户端。
$sfConfig = new SalesforceConfig(); $sfClient = new \Crunch\Salesforce\Client($sfConfig, new GuzzleHttp\Client());
身份验证
身份验证通过oauth2进行,可以使用getLoginUrl
方法生成登录URL,您应该将此返回URL传递给OAuth流程的发送阶段。
$url = $sfClient->getLoginUrl('http://exmaple.com/sf-login');
您应将用户重定向到此返回的URL,完成操作后,他们将被重定向回带有查询字符串中代码的URL。
然后可以完成身份验证的第二阶段。
$token = $sfClient->authorizeConfirm($_GET['code'], 'http://exmaple.com/sf-login');
从这里返回的令牌是原始数据,可以传递给访问令牌生成器以创建AccessToken
。
$tokenGenerator = new \Crunch\Salesforce\AccessTokenGenerator(); $accessToken = $tokenGenerator->createFromSalesforceResponse($token);
存储访问令牌
应该存储此访问令牌。提供了一个将此存储在文件系统中的方法,但这不是必需的。
上面的示例使用php session来实现相同的结果。
需要使用具有对令牌生成器的访问权限以及实现\Crunch\Salesforce\TokenStore\LocalFileConfigInterface
的配置类来实例化LocalFileStore
对象。
class SFLocalFileStoreConfig implements \Crunch\Salesforce\TokenStore\LocalFileConfigInterface { /** * The path where the file will be stored, no trailing slash, must be writable * * @return string */ public function getFilePath() { return __DIR__; } }
然后可以创建并使用令牌存储来将访问令牌保存到本地文件系统以及获取先前保存的令牌。
$tokenStore = new \Crunch\Salesforce\TokenStore\LocalFile(new \Crunch\Salesforce\AccessTokenGenerator, new SFLocalFileStoreConfig); //Save a token $tokenStore->saveAccessToken($accessToken); //Fetch a token $accessToken = $tokenStore->fetchAccessToken();
刷新令牌
访问令牌在过期前仅持续1小时,因此您应该定期检查其状态并相应地刷新。
$accessToken = $tokenStore->fetchAccessToken(); if ($accessToken->needsRefresh()) { $accessToken = $sfClient->refreshToken(); $tokenStore->saveAccessToken($accessToken); }
发送请求
在发送请求之前,您应该像上面那样实例化客户端,然后将访问令牌分配给它。
$sfConfig = new SalesforceConfig(); $sfClient = new \Crunch\Salesforce\Client($sfConfig, new \GuzzleHttp\Client()); $sfClient->setAccessToken($accessToken);
执行SOQL查询
这是一个强大的选项,用于对Salesforce数据进行一般查询。只需将有效的查询传递给search方法,然后返回结果数据。
$data = $sfClient->search('SELECT Email, Name FROM Lead LIMIT 10');
获取单个记录
如果您知道记录的id和类型,您可以从它获取一组字段。
$data = $sfClient->getRecord('Lead', '00WL0000008wVl1MDE', ['name', 'email', 'phone']);
创建和更新记录
创建和更新记录的过程非常相似,可以按照以下方式进行。createRecord方法将返回新创建记录的id。
$data = $sfClient->createRecord('Lead', ['email' => 'foo@example.com', 'Company' => 'New test', 'lastName' => 'John Doe']); $sfClient->updateRecord('Lead', '00WL0000008wVl1MDE', ['lastName' => 'Steve Jobs']); // or with the above freshly created client $sfClient->updateRecord('Lead', $data, ['lastName' => 'Steve Jobs']);
删除记录
可以基于记录的id和类型进行删除。
$sfClient->deleteRecord('Lead', '00WL0000008wVl1MDE');
错误
如果出现问题,库将抛出异常。
如果是认证异常,例如令牌过期,这将作为Crunch\Salesforce\Exceptions\AuthenticationException
抛出,您可以使用getMessage
和getErrorCode
方法获取详细信息。
所有其他错误将是Crunch\Salesforce\Exceptions\RequestException
,salesforce错误将包含在消息中。
try { $results = $sfClient->search('SELECT Name, Email FROM Lead Limit 10'); print_r($results); } catch (\Crunch\Salesforce\Exceptions\RequestException $e) { echo $e->getMessage(); echo $e->getErrorCode(); } catch (\Crunch\Salesforce\Exceptions\AuthenticationException $e) { echo $e->getErrorCode(); }