PHPackages                             salesoftech/amocrm-api-php-salesoftech - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [API Development](/categories/api)
4. /
5. salesoftech/amocrm-api-php-salesoftech

ActiveLibrary[API Development](/categories/api)

salesoftech/amocrm-api-php-salesoftech
======================================

Multi-tenant wrapper for amocrm/amocrm-api-php with pluggable storages (SQL, file, NoSQL)

v0.1.3(5mo ago)036MITPHPPHP &gt;=8.1

Since Nov 17Pushed 5mo agoCompare

[ Source](https://github.com/SalesOfTech/amocrm-api-php-salesoftech)[ Packagist](https://packagist.org/packages/salesoftech/amocrm-api-php-salesoftech)[ RSS](/packages/salesoftech-amocrm-api-php-salesoftech/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependencies (2)Versions (5)Used By (0)

SalesOfTech AmoCRM API Wrapper
==============================

[](#salesoftech-amocrm-api-wrapper)

**EN:** Composer library for multi-tenant work with AmoCRM/Kommo (OAuth2) on top of `amocrm/amocrm-api-php`.
**RU:** Composer-библиотека для мульти-клиентской работы с AmoCRM/Kommo (OAuth2) поверх `amocrm/amocrm-api-php`.

- Multi-company support via `companyId`
- Automatic token refresh (on 401 / proactively 1 hour before expiration)
- Pluggable token storage (SQL / file / custom)
- No changes to `amocrm/amocrm-api-php` (vendor stays clean)

---

Installation / Установка
------------------------

[](#installation--установка)

```
composer require salesoftech/amocrm-api-php-salesoftech
```

This will also install `amocrm/amocrm-api-php` and `league/oauth2-client`.
При этом будут установлены `amocrm/amocrm-api-php` и `league/oauth2-client`.

---

Namespaces / Пространства имён
------------------------------

[](#namespaces--пространства-имён)

Root namespace: `SalesOfTech\AmoCRM`

- `SalesOfTech\AmoCRM\SoftAmoClient`
- `SalesOfTech\AmoCRM\Model\AccountToken`
- `SalesOfTech\AmoCRM\Storage\TokenStorageInterface`
- `SalesOfTech\AmoCRM\Storage\SqlTokenStorage`
- `SalesOfTech\AmoCRM\Storage\FileTokenStorage`

---

Quick Start (EN)
----------------

[](#quick-start-en)

### 1. SQL storage (MySQL/PostgreSQL/SQLite)

[](#1-sql-storage-mysqlpostgresqlsqlite)

```
use SalesOfTech\AmoCRM\SoftAmoClient;
use SalesOfTech\AmoCRM\Storage\SqlTokenStorage;

$pdo = new PDO(
    'mysql:host=127.0.0.1;dbname=soft;charset=utf8mb4',
    'user',
    'pass',
    [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]
);

// Storage will automatically create table `amocrm_api_php_salesoftech_tokens` if it does not exist
$storage = new SqlTokenStorage($pdo);

$amo = (new SoftAmoClient($storage))
    ->setRedirectUri('https://example.com/amocrm/oauth/callback');

// Get client for a specific company (tenant)
$client = $amo->getClient(1);

// Use standard amocrm/amocrm-api-php services
$leadsService = $client->leads();
$leads        = $leadsService->get();
```

### 2. Initial authorization (by `code`)

[](#2-initial-authorization-by-code)

```
$client = $amo->authorize(
    companyId:    1,
    integrationId:'CLIENT_ID',
    secret:       'CLIENT_SECRET',
    baseDomain:   'example.amocrm.ru',
    authCode:     $_GET['code']
);
```

### 3. File storage (Not recommended :D better to use it for testing only.)

[](#3-file-storage-not-recommended-d-better-to-use-it-for-testing-only)

```
$storage = new FileTokenStorage(__DIR__ . '/amocrm_tokens');
$amo = (new SoftAmoClient($storage))->setRedirectUri('https://example.com/callback');
$client = $amo->getClient(1);
```

### 4. Multi-tenant usage

[](#4-multi-tenant-usage)

```
$client1 = $amo->getClient(1);
$client3 = $amo->getClient(3);
$client7  = $amo->getClient(7);
```

### 5. Custom storage example (Redis)

[](#5-custom-storage-example-redis)

(… full code omitted for brevity, original answer contains full example …)

---

Быстрый старт (RU)
------------------

[](#быстрый-старт-ru)

### 1. SQL-хранилище

[](#1-sql-хранилище)

```
$storage = new SqlTokenStorage($pdo);
$amo = (new SoftAmoClient($storage))->setRedirectUri('https://example.com/callback');
$client = $amo->getClient(1);
```

### 2. Первичная авторизация

[](#2-первичная-авторизация)

```
$client = $amo->authorize(
    companyId: 1,
    integrationId:'CLIENT_ID',
    secret:'CLIENT_SECRET',
    baseDomain:'example.amocrm.ru',
    authCode:$_GET['code']
);
```

### 3. Файловое хранилище (Не рекомендуется :D лучше использовать только для тестов)

[](#3-файловое-хранилище-не-рекомендуется-d-лучше-использовать-только-для-тестов)

```
$storage = new FileTokenStorage(__DIR__.'/tokens');
$amo = (new SoftAmoClient($storage))->setRedirectUri('https://example.com/callback');
$client = $amo->getClient(1);
```

### 4. Мульти-клиентская работа

[](#4-мульти-клиентская-работа)

```
$client1 = $amo->getClient(1);
$client3 = $amo->getClient(3);
$client7  = $amo->getClient(7);
```

### 5. Свое хранилище

[](#5-свое-хранилище)

Реализуй интерфейс `TokenStorageInterface` и передай в `SoftAmoClient`.

---

SQL Table Structure
-------------------

[](#sql-table-structure)

```
CREATE TABLE amocrm_api_php_salesoftech_tokens (
    id_company      VARCHAR(64) PRIMARY KEY,
    id_integration  VARCHAR(128) NOT NULL,
    secret          VARCHAR(128) NOT NULL,
    base_domain     VARCHAR(255) NOT NULL,
    access_token    TEXT NOT NULL,
    refresh_token   TEXT NOT NULL,
    expires         INTEGER NOT NULL,
    updated_at      INTEGER NOT NULL
);
```

---

License
-------

[](#license)

MIT

###  Health Score

31

—

LowBetter than 68% of packages

Maintenance69

Regular maintenance activity

Popularity7

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity37

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~1 days

Total

4

Last Release

179d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/8495ec793772c545a13f9a6709e7cf91b248258eddabf4ee22e9a1c1d3fc887b?d=identicon)[SalesOfTech](/maintainers/SalesOfTech)

---

Top Contributors

[![SalesOfTech](https://avatars.githubusercontent.com/u/244532793?v=4)](https://github.com/SalesOfTech "SalesOfTech (3 commits)")

### Embed Badge

![Health badge](/badges/salesoftech-amocrm-api-php-salesoftech/health.svg)

```
[![Health](https://phpackages.com/badges/salesoftech-amocrm-api-php-salesoftech/health.svg)](https://phpackages.com/packages/salesoftech-amocrm-api-php-salesoftech)
```

###  Alternatives

[atymic/twitter

Twitter API for PHP &amp; Laravel

945555.4k2](/packages/atymic-twitter)[dcblogdev/laravel-microsoft-graph

A Laravel Microsoft Graph API (Office365) package

168285.5k1](/packages/dcblogdev-laravel-microsoft-graph)[dcblogdev/laravel-xero

A Laravel Xero package

53129.1k1](/packages/dcblogdev-laravel-xero)[typhonius/acquia-php-sdk-v2

A PHP SDK for Acquia CloudAPI v2

222.8M7](/packages/typhonius-acquia-php-sdk-v2)[bynder/bynder-php-sdk

Bynder PHP Library

171.1M3](/packages/bynder-bynder-php-sdk)[weble/zohoclient

Zoho API Client for oAuth auth and common tasks - PHP SDK

11145.6k3](/packages/weble-zohoclient)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
