binfotech/laravel-infusionsoft

此包提供了使用 Laravel facades 的 Infusionsoft SDK 的移植。

dev-main 2022-06-10 12:34 UTC

This package is not auto-updated.

Last update: 2024-09-28 22:12:31 UTC


README

Total Downloads Latest Stable Version

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许可证的条款进行分发。