upwebdesign / laravel-infusionsoft
此包提供了利用Laravel门面实现的Infusionsoft SDK端口。
Requires
- php: >=7.2
- infusionsoft/php-sdk: ^1.4
- laravel/framework: >=5.7
README
Laravel Infusionsoft
请我喝杯咖啡 ☕
此包简化了OAuth认证流程并有助于管理令牌。
新增于^4.1
新增连接多个Infusionsoft账户的能力!
安装
使用Composer安装此包
composer require upwebdesign/laravel-infusionsoft
对于Laravel 5.6+,此包使用服务提供者和别名自动发现。您仍然可以在config/app.php
中添加服务提供者和别名。
Upwebdesign\Infusionsoft\InfusionsoftServiceProvider::class,
在providers
数组中,并可选地
'Infusionsoft' => Upwebdesign\Infusionsoft\InfusionsoftFacade::class,
添加到aliases
数组。
配置
发布infusionsoft.php
配置文件。
php artisan vendor:publish --provider="Upwebdesign\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覆盖。默认情况下,缓存存储设置为file
,但可以是您在应用程序中设置的任何缓存存储,并且可以由INFUSIONSOFT_CACHE覆盖。
对于多个账户连接,账户键将追加到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 \Upwebdesign\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(Upwebdesign\Infusionsoft\InfusionsoftLumenServiceProvider::class);
在bootstrap/app.php
中添加Infusionsoft配置
// Add the ability to read the `infusionsoft` config file $app->configure('infusionsoft');
激活文件系统
config/filesystems.php
查看一个sample 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(Upwebdesign\Infusionsoft\InfusionsoftFacade::class, 'Infusionsoft');
⚠️ 对于多个账户连接,
InfusionsoftFacade
将不再工作。
您必须直接调用类
$inf = new \Upwebdesign\Infusionsoft\Infusionsoft('account1');
请我喝杯咖啡 ☕
许可证
Upwebdesign/Infusionsoft 及 Infusionsoft SDK 是在MIT许可证下免费分发的软件。