vpmv / marketo-client
Marketoo REST API 的 PHP 客户端。
Requires
- php: >=7.4
- ext-json: *
- guzzlehttp/guzzle: ^7.4
- league/oauth2-client: ^2.6
- psr/http-message: ^1.0
Requires (Dev)
- codeclimate/php-test-reporter: dev-master
- mockery/mockery: *
- phpunit/phpunit: ^9
- squizlabs/php_codesniffer: ~3.6
This package is auto-updated.
Last update: 2024-09-24 12:37:53 UTC
README
本包提供了一个与 Marketo REST API 交互的接口。
代码是对 eventfarm/marketo-client 的改进版分支。内部架构已被简化,性能得到提升,并添加了辅助函数,以便更好地集成到您的消费应用程序中。
安装
$ composer require vpmv/marketo-client
或者,将以下行添加到您的 composer.json
文件中
{ "require": { "vpmv/marketo-client": "dev-master" } }
$ composer install
实现细节
项目默认值
为了使您能够尽可能轻松地启动,我们提供了默认的 REST 客户端和 Marketo 提供程序的实现,以便与该包一起使用。
- 我们选择使用 Guzzle 发送 HTTP 请求
- 我们选择使用 The PHP League 的 Oauth Client 进行 Marketo 认证和令牌刷新。
您可以通过使用构造函数参数 TokenRefreshCallback 来扩展客户端,以实现您自己的接口来缓存访问令牌。
Guzzle REST 客户端
我们的 REST 客户端实现了 PSR-7 HTTP 消息接口。
您可以使用提供的 GuzzleRestClient,或者拥有自己的实现我们的 RestClientInterface。
MarketoProvider
我们的默认 Marketo OAuth2 提供程序是 Marketo Provider 库。
您可以使用提供的 MarketoProvider,或者使用您自己的实现我们的 MarketoProviderInterface。
示例客户端实现
<?php namespace App; use VPMV\Marketo\Oauth\AccessToken; use VPMV\Marketo\MarketoClient; class DemoMarketoAPI extends Marketo { public function __cosntruct() { parent::__construct($this->getMarketoClient()); } public function getMarketoClient():MarketoClient { if (empty($this->client)) { $this->client = MarketoClient::with( 'CLIENT_ID', 'CLIENT_SECRET', 'BASE_URL', $this->getRefreshTokenFromCache(), $this->tokenRefreshCallback ); } return $this->client; } private function getRefreshTokenFromCache(): ?AccessToken { // get token from cache return new AccessToken('my_token', 300, 1642768705); // or return null } public function tokenRefreshCallback(AccessToken $token) { // store the token } }
用法
使用 Marketo 辅助接口是完全可选的。它所做的只是将 MarketoClient 封装到 API 端点抽象中。
注意:在某些实现中,在全面审查期间已发生更改,可能无法按以下描述工作!
活动
获取活动
返回活动记录的列表。有关完整选项列表,请参阅文档。
public function getCampaigns(array $options = array())
<?php $demoMarketo = new DemoMarketoAPI(); $options = [ "programName" => "My Marketo Program", "batchSize" => 10 ]; $campaigns = $demoMarketo->campaigns()->getCampaigns($options); // getCampaigns() can also be called without options. // $campaigns = { ... }
触发活动
将一组潜在客户传递给触发活动以通过活动的流程。有关完整选项列表,请参阅文档。
- 必须将
campaignId
和包含input
键的选项数组(映射到包含潜在客户数据的数组)传递给triggerCampaign()
。
public function triggerCampaign(int $campaignId, array $options)
<?php $demoMarketo = new DemoMarketoAPI(); $campaignId = 1029; $options = [ "input" => [ "leads" => [ [ "id" => 1234 ] ] ]//, additional options ]; $campaign = $demoMarketo->campaigns()->triggerCampaign($campaignId, $options); // $campaign = { ... }
潜在客户字段
获取潜在客户字段
返回目标实例中潜在客户对象的相关信息,包括通过 API 交互的所有可用字段的列表。
public function getLeadFields(array $options = array())
<?php $demoMarketo = new DemoMarketoAPI(); $leadFields = $demoMarketo->leadFields()->getLeadFields(); // $leadFields = { ... }
潜在客户
创建或更新潜在客户
将潜在客户列表同步到目标实例。有关完整选项列表,请参阅文档。
- 必须将包含
input
键的选项数组(映射到包含潜在客户数据的数组)传递给createOrUpdateLeads()
。
public function createOrUpdateLeads(array $options)
默认情况下,Marketo 将同步操作类型(action
)设置为 createOrUpdate
,并将 lookupField
设置为 email
。如果使用这些默认值
- 电子邮件不是必需的;如果潜在客户数组中不包含电子邮件,Marketo将创建一个没有电子邮件的潜在客户。
- 当包含电子邮件时,Marketo将搜索具有该电子邮件的现有潜在客户。如果找到,Marketo将更新找到的潜在客户的数据;如果没有找到,Marketo将使用发送的数据创建一个新的潜在客户。
<?php $demoMarketo = new DemoMarketoAPI(); $options = [ "input" => [ [ "email" => "email1@example.com", "firstName" => "Example1First", "lastName" => "Example1Last" ], [ "email" => "email2@example.com", "firstName" => "Example2First", "lastName" => "Example2Last" ] ]//, additional options ]; $leads = $demoMarketo->leads()->createOrUpdateLeads($options); // $leads = { ... }
更新潜在客户的程序状态
更改目标程序中潜在客户列表的程序状态。请参阅文档以获取完整选项列表。
- 必须传递一个
programId
和一个包含一个input
键(映射到一个包含潜在客户数据数组的数组)和一个status
键(映射到程序状态)的选项数组给updateLeadsProgramStatus()
。
public function updateLeadsProgramStatus(int $programId, array $options)
<?php $demoMarketo = new DemoMarketoAPI(); $programId = 1234; $options = [ "input" => [ [ "id" => 1111 ] ], "status" => "Registered" ]; $leads = $demoMarketo->leads()->updateLeadsProgramStatus($programId, $options); // $leads = { ... }
按程序获取潜在客户
检索指定程序中的潜在客户列表。请参阅文档以获取完整选项列表。
- 必须传递一个
programId
给getLeadsByProgram()
。
public function getLeadsByProgram(int $programId, array $options = array())
<?php $demoMarketo = new DemoMarketoAPI(); $programId = 1234; $options = [ "fields" => 'firstName,lastName,email,middleName,mktoIsPartner'; ]; $leads = $demoMarketo->leads()->getLeadsByProgram($programId, $options); // getLeadsByProgram() can also be called without options. // $leads = { ... }
潜在客户分区
获取潜在客户分区
返回目标实例中可用的分区列表。请参阅文档以获取完整选项列表。
public function getPartitions(array $options = array())
<?php $demoMarketo = new DemoMarketoAPI(); $partitions = $demoMarketo->partitions()->getPartitions(); // $partitions = { ... }
程序
获取程序
检索目标实例中可访问的程序列表。请参阅文档以获取完整选项列表。
public function getPrograms(array $options = array())
<?php $demoMarketo = new DemoMarketoAPI(); $programs = $demoMarketo->programs()->getPrograms(); // $programs = { ... }
状态
获取状态
根据提供的名称检索通道。请参阅文档以获取完整选项列表。
- 必须传递一个
programChannel
给getStatuses()
。
public function getStatuses(string $programChannel, array $options = array())
<?php $demoMarketo = new DemoMarketoAPI(); $programChannel = "Live Event"; $programs = $demoMarketo->statuses()->getStatuses($programChannel); // $programs = { ... }