binfotech / laravel-infusionsoft
此包提供了使用 Laravel facades 的 Infusionsoft SDK 的移植。
Requires
- php: >=7.2
- infusionsoft/php-sdk: ^1.4
- laravel/framework: >=5.7
This package is not auto-updated.
Last update: 2024-09-28 22:12:31 UTC
README
Laravel 6, 7 & 8 Laravel Infusionsoft
给我买杯咖啡 ☕
此包简化了 oAuth 认证流程并帮助管理令牌。
自 ^4.1 版本新增
新增连接多个 Infusionsoft 账户的能力!
安装
使用 composer 安装此包
composer require binfotech/laravel-infusionsoft
对于 Laravel 5.6+,此包使用服务提供者和别名自动发现。您仍然可以在 config/app.php
中添加服务提供者和别名。
Binfotech\Infusionsoft\InfusionsoftServiceProvider::class,
在 providers
数组中,并可选地
'Infusionsoft' => Binfotech\Infusionsoft\InfusionsoftFacade::class,
添加到 aliases
数组。
配置
发布 infusionsoft.php
配置文件。
php artisan vendor:publish --provider="Binfotech\Infusionsoft\InfusionsoftServiceProvider" --tag="config"
环境
填写您的客户端 ID 和密钥,以及重定向 URI 和缓存存储。以下使用默认值。
INFUSIONSOFT_CLIENT_ID=
INFUSIONSOFT_CLIENT_SECRET=
INFUSIONSOFT_CACHE=file
INFUSIONSOFT_REDIRECT_URI="/infusionsoft/auth/callback"
为了允许多个连接的账户,您的 .env 需要以下额外的参数。第一个表示将会有多个连接的 Infusionsoft 账户,第二个是一个 JSON 编码和转义的字符串,包含您的 API 凭据。该数组具有识别键,将在稍后解释 API 调用时说明。
INFUSIONSOFT_MULTI=true
INFUSIONSOFT_ACCOUNTS='[{\"account1\": {\"client_id\": \"\",\"client_secret\": \"\",\"redirect_uri\": \"\/infusionsoft\/account1\/auth\/callback\"}},{\"account2\": {\"client_id\": \"\",\"client_secret\": \"\",\"redirect_uri\": \"\/infusionsoft\/account2\/auth\/callback\"}}]'
凭证
一旦您在 .env
中输入所有必要的授权信息,我们就可以开始授权过程。
您可以通过访问 /infusionsoft/auth
路由来开始授权过程。此路由将生成必要的授权 URL 到 Infusionsoft 并将您重定向到您的 Infusionsoft 应用程序。您必须登录到 Infusionsoft 并授权您的应用程序使用 Infusionsoft API。一旦您 允许
,您将被重定向回您的应用程序 /infusionsoft/auth/callback
。在这里,您将收到异常或成功消息。
在使用多个连接的账户时,您的授权 URL 将根据您的识别键进行更改。例如,对于您想要连接的每个相应的账户,将分别是 /infusionsoft/account1/auth
和 /infusionsoft/account1/auth/callback
。
重定向 URI
如果使用 INFUSIONSOFT_REDIRECT_URI,将覆盖 Infusionsoft 的回调,并将导致不创建 infusionsoft.token
。这意味着您需要处理从 Infusionsoft 返回的授权代码以请求访问令牌。
对于多个账户连接,重定向 URI 需要遵循以下模式
/infusionsoft/{account1}/auth
/infusionsoft/{account1}/auth/callback
令牌名称 & 缓存
默认令牌名称为 infusionsoft.token
,但可以被 INFUSIONSOFT_TOKEN_NAME 覆盖。默认缓存存储设置为 local
,但可以是您在应用程序中设置的任何缓存存储,也可以被 INFUSIONSOFT_CACHE 覆盖。默认缓存存储为 file
,但可以是您设置的任何缓存存储。
对于多个账户连接,账户键将被附加到 infusionsoft.token
名称,例如
infusionsoft.token.account1
刷新访问令牌
虽然此包帮助使用刷新令牌保持访问令牌刷新,但在某些情况下这可能不是最佳实践。例如,在应用程序在两个或多个服务器之间负载均衡的环境中。在刷新操作期间,完全有可能使用过期的或无效的访问令牌。为了解决这个问题,建议使用计划任务。
php artisan infusionsoft::token-refresh
由于 Infusionsoft 访问令牌在 24 小时后过期,建议每天刷新两次访问令牌。已经注册了一个命令供您的应用程序使用。但是,您需要将其安排在您的 Console/Kernel.php
文件中。
$schedule->command('infusionsoft:token-refresh')->twiceDaily(5, 17);
尝试
可能存在Infusionsoft在API调用中失败的情况(这种情况经常发生),我总是苦恼于不断地创建do/while或while循环。在V4.2.0中,我引入了try
方法来帮助减轻这种负担。
方法
public function try(callable $callback, int $max_tries = 5, int $sleep = 2);
示例
$infusionsoft = new \Binfotech\Infusionsoft\Infusionsoft('inf1'); $affiliate = collect([ 'ContactId' => $contactId, 'Status' => 1, 'AffName' => 'Test Rat', 'AffCode' => 'testrat', ]); $external_id = $infusionsoft->try(function () use ($infusionsoft, $affiliate) { return $infusionsoft->data()->add('Affiliate', $affiliate->toArray()); });
Laravel自带一个retry
函数,但是,try
方法通过回调函数返回类实例和尝试次数,以防需要。所以另一种写法可以是
$external_id = $infusionsoft->try(function ($self, $try_count) use ($affiliate) { return $self->data()->add('Affiliate', $affiliate->toArray()); });
Lumen
注册服务提供者
$app->register(Binfotech\Infusionsoft\InfusionsoftLumenServiceProvider::class);
添加Infusionsoft配置bootstrap/app.php
// Add the ability to read the `infusionsoft` config file $app->configure('infusionsoft');
激活文件系统
config/filesystems.php
查看一个filesystems.php配置文件示例。https://github.com/laravel/laravel/blob/master/config/filesystems.php
添加我们的配置bootstrap/app.php
... $app->configure('filesystems'); ... $app->singleton( Illuminate\Contracts\Filesystem\Factory::class, function ($app) { return new Illuminate\Filesystem\FilesystemManager($app); } ); ...
添加Infusionsoft外观(可选)
class_alias(Binfotech\Infusionsoft\InfusionsoftFacade::class, 'Infusionsoft');
⚠️对于多个账户连接,
InfusionsoftFacade
将不再工作。
您必须直接调用该类
$inf = new \Binfotech\Infusionsoft\Infusionsoft('account1');
给我买杯咖啡 ☕
许可证
Binfotech/Infusionsoft与Infusionsoft SDK是免费软件,根据MIT许可证的条款进行分发。