landpro/amo

方便快捷的amoCRM API客户端

1.0.0 2021-03-22 11:28 UTC

This package is not auto-updated.

Last update: 2024-10-01 04:59:56 UTC


README

amoCRM

Build Status Latest Stable Version Total Downloads License Code Coverage Scrutinizer Code Quality Say Thanks!

这是一个用于操作amoCRM API的PHP客户端,实现了所有原始API的方法。

注意!文档链接已过时

该包与旧版API交互。但这并不意味着该API不再受支持。这是一个完全可用的API,他们不打算删除它,只是链接已经过时。遗憾的是,目前唯一可行的解决方案是查看以下文档

https://web.archive.org/web/20170801033744/https://developers.amocrm.ru/rest_api/

迁移到新版本API不是很快,需要花费很长时间。

Say Thanks!

安装

通过composer

$ composer req "landpro/amo"

在composer.json文件的require部分

不使用composer

下载最新版本的amocrm.phar

<?php
// Использовать ее вместо vendor/autoload.php
require_once __DIR__ . '/amocrm.phar';

快速开始

try {
    // Создание клиента
    $amo = new \AmoCRM\Client(
        'SUBDOMAIN', 
        'CLIENT_SECRET', // Секретный ключ
        'CLIENT_ID', // ID интеграции
        'TOKEN_PATH', // Путь, где будет храниться файл с токеном
        'REDIRECT_URI' // Redirect URI указанный в настройках интеграции
    );

    // SUBDOMAIN может принимать как часть перед .amocrm.ru,
    // так и домен целиком например test.amocrm.ru или test.amocrm.com
    
    // Redirect URI - ссылка на ваш сайт, который будет обрабатывать работу с ключами. 

    // Получение экземпляра модели для работы с аккаунтом
    $account = $amo->account;

    // Вывод информации об аккаунте
    print_r($account->apiCurrent());

    // Получение экземпляра модели для работы с контактами
    $contact = $amo->contact;

    // Заполнение полей модели
    $contact['name'] = 'ФИО';
    $contact['request_id'] = '123456789';
    $contact['date_create'] = '-2 DAYS';
    $contact['responsible_user_id'] = 697344;
    $contact['company_name'] = 'ООО Тестовая компания';
    $contact['tags'] = ['тест1', 'тест2'];

    // Добавление кастомного поля
    $contact->addCustomField(100, 'Значение');

    // Добавление кастомного поля с типом "мультисписок"
    $contact->addCustomMultiField(200, [
        1237755,
        1237757
    ]);

    // Добавление ENUM кастомного поля
    $contact->addCustomField(300, '+79261112233', 'WORK');

    // Добавление кастомного поля c SUBTYPE поля
    $contact->addCustomField(300, '+79261112233', false, 'subtype');

    // Добавление ENUM кастомного поля с типом "мультисписок"
    $contact->addCustomField(400, [
        ['+79261112233', 'WORK'],
    ]);

    // Добавление нового контакта и получение его ID
    print_r($contact->apiAdd());

} catch (\AmoCRM\Exception $e) {
    printf('Error (%d): %s' . PHP_EOL, $e->getCode(), $e->getMessage());
}

支持模型列表

模型方法描述

  • account 模型用于处理账户

    • apiCurrent($short = false) - 获取当前登录账户的信息
    • getUserByLogin($login = null) - 根据登录名返回用户信息
  • contact 模型用于处理联系人

    • apiList($parameters, $modified = null) - 方法用于获取联系人列表,支持筛选和分页
    • apiAdd($contacts = []) - 方法允许单个或批量添加联系人
    • apiUpdate($id, $modified = 'now') - 方法允许更新现有联系人的数据
    • apiLinks($parameters, $modified = null) - 方法用于获取交易和联系人之间的联系列表
  • lead 模型用于处理交易

    • apiList($parameters, $modified = null) - 方法用于获取交易列表,支持筛选和分页
    • apiAdd($leads = []) - 方法允许单个或批量添加交易
    • apiUpdate($id, $modified = 'now') - 方法允许更新现有交易的数据
  • company 模型用于处理公司

    • apiList($parameters, $modified = null) - 方法用于获取公司列表,支持筛选和分页
    • apiAdd($companies = []) - 方法允许单个或批量添加公司
    • apiUpdate($id, $modified = 'now') - 方法允许更新现有公司的数据
  • customer 模型用于处理买家

    • apiList($parameters) - 方法用于获取账户的买家
    • apiAdd($customers = []) - 方法允许单个或批量添加买家
    • apiUpdate($id) - 方法允许更新现有买家的数据
  • transaction 模型用于处理交易

    • apiList($parameters) - 方法用于获取账户的交易
    • apiAdd($transactions = []) - 方法允许单个或批量添加交易
    • apiDelete($id) - 方法允许删除交易
  • task 模型用于处理任务

    • apiList($parameters, $modified = null) - 方法用于获取任务列表,支持筛选和分页
    • apiAdd($tasks = []) - 方法允许单个或批量添加任务
    • apiUpdate($id, $text, $modified = 'now') - 方法允许更新现有任务的数据
  • note 模型用于处理备注(任务)

    • apiList($parameters, $modified = null) - 方法用于获取备注列表,支持筛选和分页
    • apiAdd($notes = []) - 方法允许单个或批量添加备注
    • apiUpdate($id, $modified = 'now') - 方法允许更新现有备注的数据
  • custom_field 模型用于处理附加字段

    • apiAdd($fields = []) - 方法允许单个或批量添加附加字段
    • apiDelete($id, $origin) - 方法允许删除附加字段
  • call 模型用于处理通话

    • apiAdd($code, $key, $calls = []) - 方法允许单个或批量添加通话
  • 模型 unsorted 用于处理未整理的申请列表

    • apiList($parameters = []) - 获取未整理申请列表的方法,支持过滤和分页
    • apiGetAllSummary() - 获取未整理申请的聚合信息的方法
    • apiAccept($uids, $user_id, $status_id = null) - 接受未整理申请的方法
    • apiDecline($uids, $user_id) - 拒绝未整理申请的方法
    • apiAddSip($sip = []) - 添加类型为SIP的未整理申请
    • apiAddMail($mails = []) - 添加类型为MAIL的未整理申请
    • apiAddForms($forms = []) - 添加类型为FORMS的未整理申请
    • addDataLead($values) - 添加将在批准申请后创建的交易
    • addDataContact($values) - 添加将在批准申请后创建的联系人或公司
  • 模型 webhooks 用于处理Webhooks

    • apiList() - 获取Webhooks列表的方法
    • apiSubscribe($url, $events = []) - 添加Webhooks的方法
    • apiUnsubscribe($url, $events = []) - 删除Webhooks的方法
  • 模型 pipelines 用于处理销售漏斗和阶段

    • apiList($id = null) - 获取销售漏斗和阶段列表的方法
    • apiAdd($pipelines = []) - 允许单个或批量添加销售漏斗和阶段的方法
    • apiUpdate($id) - 允许更新现有销售漏斗和阶段数据的方法
    • apiDelete($id) - 允许单个或批量删除销售漏斗的方法
    • addStatusField($parameters, $id = null) - 添加销售漏斗阶段
  • 模型 customers_periods 用于处理公司

    • apiList() - 获取周期列表的方法
    • apiSet($periods = []) - 允许更改周期数据的方法
  • 模型 widgets 用于处理小部件

    • apiList($parameters = []) - 获取可安装的小部件列表的方法
    • apiInstall($parameters) - 允许单个或批量启用小部件的方法
    • apiUninstall($parameters) - 允许单个或批量禁用小部件的方法
  • 模型 catalog 用于处理目录

    • apiList($id = null) - 获取账户目录列表的方法
    • apiAdd($catalogs = []) - 允许单个或批量添加目录的方法
    • apiUpdate($id) - 允许更新现有目录数据的方法
    • apiDelete($id) - 允许删除现有目录数据的方法
  • 模型 catalog_element 用于处理目录元素

    • apiList($parameters = []) - 获取账户目录元素列表的方法
    • apiAdd($elements = []) - 允许单个或批量添加目录元素的方法
    • apiUpdate($id) - 允许更新现有目录元素数据的方法
    • apiDelete($id) - 允许删除现有目录元素数据的方法
  • 模型 links 用于处理实体间的关联

    • apiList($parameters) - 获取账户实体间关联列表的方法
    • apiLink($links = []) - 允许在实体间建立关联的方法
    • apiUnlink($links = []) - 允许删除实体间关联的方法

Webhooks使用说明

Webhooks - 通过发送事件通知到第三方应用程序,在amoCRM中发生事件时进行通知。您可以在账户设置中,在“API”部分设置您应用程序的HTTP地址和相关的工作规则。

可用的通知列表

  • add_lead - 添加交易
  • add_contact - 添加联系人
  • add_company - 添加公司
  • add_customer - 添加客户
  • update_lead - 更新交易
  • update_contact - 更新联系人
  • update_company - 更改公司
  • update_customer - 更改客户
  • delete_lead - 删除商机
  • delete_contact - 删除联系人
  • delete_company - 删除公司
  • delete_customer - 删除客户
  • status_lead - 修改商机状态
  • responsible_lead - 修改商机负责人
  • restore_contact - 恢复联系人
  • restore_company - 恢复公司
  • restore_lead - 恢复商机
  • note_lead - 商机备注
  • note_contact - 联系人备注
  • note_company - 公司备注
  • note_customer - 客户备注
try {
    $listener = new \AmoCRM\Webhooks\Listener();

    // Добавление обработчика на уведомление contacts->add
    $listener->on('add_contact', function ($domain, $id, $data) {
        // $domain Поддомен amoCRM
        // $id Id объекта связанного с уведомлением
        // $data Поля возвращаемые уведомлением
    });

    // Вызов обработчика уведомлений
    $listener->listen();

} catch (\AmoCRM\Exception $e) {
    printf('Error (%d): %s' . PHP_EOL, $e->getCode(), $e->getMessage());
}

Fields Helper 描述

可以使用 Fields Helper 来存储字段 ID。

try {
    $amo = new \AmoCRM\Client(getenv('DOMAIN'), getenv('LOGIN'), getenv('HASH'));

    // Для хранения ID полей можно воспользоваться хелпером \AmoCRM\Helpers\Fields
    $amo->fields->StatusId = 10525225;
    $amo->fields->ResponsibleUserId = 697344;

    // Добавление сделок с использованием хелпера
    $lead = $amo->lead;
    $lead['name'] = 'Тестовая сделка';
    $lead['status_id'] = $amo->fields->StatusId;
    $lead['price'] = 3000;
    $lead['responsible_user_id'] = $amo->fields->ResponsibleUserId;
    $lead->apiAdd();

    // Также можно просто использовать хелпер без клиента
    $fields = new \AmoCRM\Helpers\Fields();

    // Как объект
    $fields->StatusId = 10525225;
    $fields->ResponsibleUserId = 697344;

    // Или как массив
    $fields['StatusId'] = 10525225;
    $fields['ResponsibleUserId'] = 697344;

} catch (\AmoCRM\Exception $e) {
    printf('Error (%d): %s' . PHP_EOL, $e->getCode(), $e->getMessage());
}

B2BFamily Helper 描述

此 Helper 用于通过 B2BFamily 发送邮件,并关联 amoCRM 中的商机。

try {
    $amo = new \AmoCRM\Client(getenv('DOMAIN'), getenv('LOGIN'), getenv('HASH'));

    $b2b = new \AmoCRM\Helpers\B2BFamily(
        $amo,
        getenv('B2B_APPKEY'),
        getenv('B2B_SECRET'),
        getenv('B2B_EMAIL'),
        getenv('B2B_PASSWORD')
    );

    // Подписать клиента AmoCrm на Webhooks
    $b2b->subscribe();

    // Отправить письмо и прикрепить его к сделке
    $b2b->mail(6003277, [
        'to' => 'mail@example.com',
        'type' => 'message',
        'subject' => 'Тест b2bfamily',
        'text' => 'Тестовое сообщение',
        'events' => [
            'trigger' => 'message_open',
            'not_open_timeout' => 1
        ]
    ]);

} catch (\AmoCRM\Helpers\B2BFamilyException $e) {
    printf('Error (%d): %s' . PHP_EOL, $e->getCode(), $e->getMessage());
}

与框架的集成

测试

首先安装 --dev 依赖。然后运行

$ vendor/bin/phpunit

许可证

此库在 MIT 许可证下可用: https://open-source.org.cn/licenses/mit-license.php