obatfr/sfrest

一个简单但强大的 Salesforce REST API 包装库。

维护者

详细信息

gitlab.com/obatfr/sfrest

主页

问题

1.0.1 2020-01-23 11:53 UTC

This package is not auto-updated.

Last update: 2020-08-21 13:06:28 UTC


README

Build Status Scrutinizer Code Quality

一个简单但强大的小巧库,用于与 Salesforce REST API 交互。

它包含执行任何 REST 调用到 Salesforce 所需的所有内容,包括获取/创建/更新/删除记录,以及使用参数执行 SOQL 查询。

它处理登录/密码和 JWT(OAuth 2.0)身份验证。

您可以使用复合 API(自 2015 年夏季以来可用)执行单个请求,或在一次调用中执行多个请求。

此库现在是开源的,任何贡献都将受到高度赞赏。

入门

设置连接应用

  1. 登录您的 Salesforce 组织
  2. 点击右上角的设置
  3. 在构建下点击 创建 > 应用
  4. 滚动到页面底部并点击连接应用下的 新建
  5. 输入以下远程应用的详细信息
    • 连接应用名称
    • API 名称
    • 联系邮箱
    • 在 API 下启用 OAuth 设置
    • 回调 URL
    • 选择访问范围(如果您需要刷新令牌,请在此指定)
  6. 点击 保存

安装

可以使用 Composer 进行安装

composer require mograine/sfrest:~1.0

配置

您应该配置您的 config.json 文件。结构可以在 SfRest/Config/config.json.dist 中找到

您可以将此文件放在任何目录中,并在 SfRequest 构造函数中设置文件路径。默认情况下,SfConfig 将检查 SfRest/Config 中是否存在该文件

{
    "method":               "JWT",                          # JWT or LOGINPASS
    "client_id":            "",                             # Can be found in "Connected Application" in Salesforce
    "client_secret":        "",                             # Can be found in "Connected Application" in Salesforce
    "login_uri":            "https://login.salesforce.com", # Login or Test
    "username":             "p.nom@mycompany.com",          # Your username
    "password":             "",                             # If method is LOGINPASS, your password. Else, left empty
    "rsa_key_full_path":    "~/.ssh/key.pem"                # Path to your private key
}
$sfRequest = new \SfRest\SfRequest("/root/config_sfrest.json");

执行操作

一旦您已配置 config.json 文件并实例化一个新的 SfRequest 类,您就可以开始使用了!

以下是一些您可以执行的操作示例

$sfRequest = new \SfRest\SfRequest();

$results = $sfRequest->query('SELECT Name, Email FROM Lead Limit 10');

$postalCode = "12345";
$results = $sfRequest->query('SELECT Id, Name FROM Lead WHERE BillingPostalCode = ? Limit 10', $postalCode);

$account = new \StdClass();
$account->Name = "My super customer";
$sfRequest->createRecord("Lead", $account);

$sfRequest->prepare();
$sfRequest->createRecord("Lead", ["Name" => "My first super customer"]);
$sfRequest->updateRecord("Lead", 'a0E1800000kketp', ["Name" => "My second super customer"]);
$sfRequest->createRecord("Lead", ["Name" => "My third super customer"]);
$sfRequest->commit(); // Send all previous action in one API call

可用操作

执行 SOQL 查询

简单查询

您可以使用或不需要参数执行 SOQL 查询。

默认情况下,参数将被引号(')括起来。如果您需要避免此操作(例如,如果您的参数之一是数字),您可以设置参数类型为 SfRequest::PARAM_INT。

参数类型

  • SfRequest::PARAM_STR:默认值,用引号括起来
  • SfRequest::PARAM_INT:对于数字,参数不会被括起来
  • SfRequest::PARAM_NULL:仅接受值 'NULL'

$results = $sfRequest->query('SELECT Name, Email FROM Lead Limit 10');

$postalCode = "12345";
$results = $sfRequest->query('SELECT Id, Name FROM Lead WHERE BillingPostalCode = ?', $postalCode);

$postalCode = [12345, 54321];
$results = $sfRequest->query('SELECT Id, Name FROM Lead WHERE BillingPostalCode IN (?)', [SfRequest::PARAM_STR, $postalCode]);

$minimumEmployees = 10;
$maximumEmployees = 20;
$results = $sfRequest->query('SELECT Id, Name FROM Lead WHERE NumberOfEmployees >= ? AND NumberOfEmployees <= ?',
                             [SfRequest::PARAM_INT, $minimumEmployees],
                             [SfRequest::PARAM_INT, $maximumEmployees]);

"大数据" 查询

有时您需要从单个查询中获取大量数据(2000+)。Salesforce 不会在一次 API 调用中发送所有数据,您需要递归地遵循 "nextRecordsUrl"。

幸运的是,SfRest 可以为您做到! "queryMore" 方法将遵循 "nextRecordsUrl",您将收到一个数组中的所有数据。


$results = $sfRequest->queryMore('SELECT Name, Email FROM Lead');

echo $results[0]->Name;

获取记录

如果您知道记录的 id 和类型,您可以从中获取一组字段。

$data = $sfRequest->getRecord('Lead', '00WL0000008wVl1MDE', ['name', 'email', 'phone']);

创建记录

要创建记录,您只需要类型和字段值。

$sfRequest->createRecord("Lead", ['Name' => 'New Account']);

更新记录

要更新记录,您需要记录的类型和 id。

$sfRequest->updateRecord('Lead', '00WL0000008wVl1MDE', ['lastName' => 'Steve Jobs']);

删除记录

可以根据记录的 id 和类型删除记录。

$sfRequest->deleteRecord('Lead', '00WL0000008wVl1MDE');

一次性执行多个请求

有时您需要一次性执行多个操作。例如,当您的脚本生成许多对象时,在单个 API 调用中创建它们会很有趣。

这可以通过使用“批量模式”来实现,该模式将调用复合 API(自 2015 年夏季以来可用)。

您首先需要调用“准备”方法。您的所有后续请求都将存储在缓存中,并等待您调用“提交”方法,将所有之前的请求一次性发送。

如果成功,提交函数将在'results'数组中返回所有查询响应,顺序与您准备的顺序相同。

$sfRequest->prepare();

$sfRequest->createRecord("Lead", ['Name' => 'New Account 1']);
$sfRequest->createRecord("Lead", ['Name' => 'New Account 2']);
$sfRequest->query('SELECT Name, Email FROM Lead Limit 10');
$sfRequest->createRecord("Lead", ['Name' => 'New Account 3']);
$sfRequest->deleteRecord('Lead', '00WL0000008wVl1MDE');

$response = $sfRequest->commit();

$queryResponse = $response->results[2];

错误

如果出现问题,库将抛出异常。

所有错误都将使用\SfRest\Exception\SfException抛出。

try
{
    $results = $sfClient->search('SELECT Name, Email FROM Lead Limit 10');
    print_r($results);
}
catch (\SfRest\Exception\SfException $e)
{
    echo $e->getMessage();
}

致谢

此包装器由DMVP Formation公司创建并为其使用。

此README.md主要受到omniphx/forrest(连接的应用程序设置)和crunch-accounting salesforce PHP包装器的启发。