❗️Bitrix24 forked this repository 🥳 and now I contribute there
❗️For new and existing projects please use https://github.com/bitrix24/b24phpsdk
A powerful PHP library for the Bitrix24 REST API
CI\CD status on master | 
|---|
Integration tests run in GitHub actions with real Bitrix24 portal
Support both auth modes:
- work with auth tokens for Bitrix24 applications in marketplace
 - work with incoming webhooks for simple integration projects for current portal
 
Domain core events:
- Access Token expired
 - Bitrix24 portal domain url changed
 
API - level features
- Auto renew access tokens
 - List queries with «start=-1» support
 - offline queues
 
Performance improvements 🚀
- Batch queries implemented with PHP Generators – constant low memory and low CPI usage:
 - batch read data from bitrix24
 - batch write data to bitrix24
 - read without count flag
 
- Good developer experience
- auto-completion of methods at the IDE
 - typed method call signatures
 - typed results of method calls
 - helpers for typical operations
 
 - Good documentation
- documentation on the operation of a specific method containing a link to the official documentation
 - documentation for working with the SDK
 
 - Performance first:
- minimal impact on client code
 - ability to work with large amounts of data with constant memory consumption
 - efficient operation of the API using batch requests
 
 - Modern technology stack
- based on Symfony HttpClient
 - actual PHP versions language features
 
 - Reliable:
- test coverage: unit, integration, contract
 - typical examples typical for different modes of operation and they are optimized for memory \ performance
 
 
- http2 protocol via json data structures
- symfony http client
- \Bitrix24\SDK\Core\ApiClient - work with b24 rest-api endpoints
    input: arrays \ strings
    output: Symfony\Contracts\HttpClient\ResponseInterface, operate with strings
    process: network operations 
- \Bitrix24\SDK\Services\* - work with b24 rest-api entities
    input: arrays \ strings
    output: b24 response dto
    process: b24 entities, operate with immutable objects  
- Bitrix24 API documentation - English
 - Internal documentation for bitrix24-php-sdk
 
- php: >=8.2
 - ext-json: *
 - ext-curl: *
 
Add "mesilov/bitrix24-php-sdk": "2.x" to composer.json of your application. Or clone repo to your project.
- Go to 
/examples/webhookfolder - Open console and install dependencies
 
composer install- Open Bitrix24 portal: Developer resources → Other → Inbound webhook
 - Open example file and insert webhook url into 
$webhookUrl 
see example.php file
declare(strict_types=1);
use Bitrix24\SDK\Services\ServiceBuilderFactory;
use Symfony\Component\EventDispatcher\EventDispatcher;
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
use Monolog\Processor\MemoryUsageProcessor;
require_once 'vendor/autoload.php';
$webhookUrl = 'INSERT_HERE_YOUR_WEBHOOK_URL';
$log = new Logger('bitrix24-php-sdk');
$log->pushHandler(new StreamHandler('bitrix24-php-sdk.log'));
$log->pushProcessor(new MemoryUsageProcessor(true, true));
// create service builder factory
$b24ServiceFactory = new ServiceBuilderFactory(new EventDispatcher(), $log);
// init bitrix24-php-sdk service from webhook
$b24Service = $b24ServiceFactory->initFromWebhook($webhookUrl);
// work with interested scope
var_dump($b24Service->getMainScope()->main()->getCurrentUserProfile()->getUserProfile());
// get deals list and address to first element
var_dump($b24Service->getCRMScope()->lead()->list([], [], ['ID', 'TITLE'])->getLeads()[0]->TITLE);- Call php file in shell
 
php -f example.php- Go to 
/examples/local-applicationfolder - Open console and install dependencies
 
composer install- Start local development server
 
sudo php -S 127.0.0.1:80- Expose local server to public via ngrok and remember temporally public url –
https://****.ngrok-free.app 
ngrok http 127.0.0.1- Check public url from ngrok and see 
x-powered-byheader with 200 status-code. 
curl https://****.ngrok-free.app -I
HTTP/2 200 
content-type: text/html; charset=UTF-8
date: Mon, 26 Aug 2024 19:09:24 GMT
host: ****.ngrok-free.app
x-powered-by: PHP/8.3.8- Open Bitrix24 portal: Developer resources → Other → Local application and create new local application:
type: serverhandler path:https://****.ngrok-free.app/index.phpInitial installation path:https://****.ngrok-free.app/install.phpMenu item text:Test local appscope:crm
 - Save application parameters in 
index.phpfile:Application ID (client_id)—BITRIX24_PHP_SDK_APPLICATION_CLIENT_IDApplication key (client_secret)—BITRIX24_PHP_SDK_APPLICATION_CLIENT_SECRETAssing permitions (scope)—BITRIX24_PHP_SDK_APPLICATION_SCOPE
 
see index.php file
declare(strict_types=1);
use Bitrix24\SDK\Core\Credentials\AuthToken;
use Bitrix24\SDK\Core\Credentials\ApplicationProfile;
use Bitrix24\SDK\Services\ServiceBuilderFactory;
use Monolog\Handler\StreamHandler;
use Monolog\Logger;
use Monolog\Processor\MemoryUsageProcessor;
use Symfony\Component\EventDispatcher\EventDispatcher;
use Symfony\Component\HttpFoundation\Request;
require_once 'vendor/autoload.php';
?>
    <pre>
    Application is worked, auth tokens from bitrix24:
    <?= print_r($_REQUEST, true) ?>
</pre>
<?php
$request = Request::createFromGlobals();
$log = new Logger('bitrix24-php-sdk');
$log->pushHandler(new StreamHandler('bitrix24-php-sdk.log'));
$log->pushProcessor(new MemoryUsageProcessor(true, true));
$b24ServiceBuilderFactory = new ServiceBuilderFactory(new EventDispatcher(), $log);
$appProfile = ApplicationProfile::initFromArray([
    'BITRIX24_PHP_SDK_APPLICATION_CLIENT_ID' => 'INSERT_HERE_YOUR_DATA',
    'BITRIX24_PHP_SDK_APPLICATION_CLIENT_SECRET' => 'INSERT_HERE_YOUR_DATA',
    'BITRIX24_PHP_SDK_APPLICATION_SCOPE' => 'INSERT_HERE_YOUR_DATA'
]);
$b24Service = $b24ServiceBuilderFactory->initFromRequest($appProfile, AuthToken::initFromPlacementRequest($request), $request->get('DOMAIN'));
var_dump($b24Service->getMainScope()->main()->getCurrentUserProfile()->getUserProfile());
// get deals list and address to first element
var_dump($b24Service->getCRMScope()->lead()->list([], [], ['ID', 'TITLE'])->getLeads()[0]->TITLE);if you want to create application you can use production-ready contracts in namespace
Bitrix24\SDK\Application\Contracts:
Bitrix24Accounts— Store auth tokens and provides methods for work with Bitrix24 account.ApplicationInstallations— Store information about application installation, linked with Bitrix24 Account with auth tokens. Optional can store links to:- Client contact person: client person who responsible for application usage
 - Bitrix24 Partner contact person: partner contact person who supports client and configure application
 - Bitrix24 Partner: partner who supports client portal
 
ContactPersons– Store information about person who installed application.Bitrix24Partners– Store information about Bitrix24 Partner who supports client portal and install or configure application.
Steps:
- Create own entity of this bounded contexts.
 - Implement all methods in contract interfaces.
 - Test own implementation behavior with contract-tests 
tests/Unit/Application/Contracts/*– examples. 
Tests locate in folder tests and we have two test types.
In folder tests create file .env.local and fill environment variables from .env.
Call in command line
make lint-phpstanCall in command line for validate
make lint-rectorCall in command line for fix codebase
make lint-rector-fixFast, in-memory tests without a network I\O For run unit tests you must call in command line
make test-unitSlow tests with full lifecycle with your test Bitrix24 portal via webhook.
❗️Do not run integration tests with production portals
For run integration test you must:
- Create new Bitrix24 portal for development tests.
 - Go to left menu, click «Sitemap».
 - Find menu item «Developer resources».
 - Click on menu item «Other».
 - Click on menu item «Inbound webhook».
 - Assign all permisions with webhook and click «save» button.
 - Create file 
/tests/.env.localwith same settings, see comments in/tests/.envfile. 
APP_ENV=dev
BITRIX24_WEBHOOK=https:// your portal webhook url
INTEGRATION_TEST_LOG_LEVEL=500- call in command line
 
make test-integration-core
make test-integration-scope-telephony
make test-integration-scope-workflows
make test-integration-scope-userBugs and feature request are tracked on GitHub
bitrix24-php-sdk is licensed under the MIT License - see the MIT-LICENSE.txt file for details
Maksim Mesilov - [email protected]
See also the list of contributors which participated in this project.
Email to [email protected] for private consultations or dedicated support.