upwebdesign/laravel-infusionsoft

此包提供了利用Laravel门面实现的Infusionsoft SDK端口。

v4.2.0 2022-05-10 20:25 UTC

README

Total Downloads Latest Stable Version

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许可证下免费分发的软件。