doniyor / bitrix24-laravel
Laravel integration for the Bitrix24 REST API with CRM entity helpers.
Installs: 5
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/doniyor/bitrix24-laravel
Requires
- php: ^8.1
- guzzlehttp/guzzle: ^7.0
- illuminate/support: ^9.0|^10.0|^11.0
README
Laravel wrapper around the Bitrix24 REST API with a focus on CRM entities.
Installation
composer require doniyor/bitrix24-laravel
Publish configuration:
php artisan vendor:publish --tag=bitrix24-config
Configure the following environment variables:
BITRIX24_BASE_URI="https://your-domain.bitrix24.com/rest/"
BITRIX24_WEBHOOK_USER=1
BITRIX24_WEBHOOK_CODE=abcdefghijklmno
# Optional when using OAuth:
# BITRIX24_AUTH_TOKEN="oauth_access_token"
Authentication
- Incoming webhook: supply
BITRIX24_BASE_URI,BITRIX24_WEBHOOK_USER, andBITRIX24_WEBHOOK_CODE. Requests are routed to{base}/{user}/{code}/{method}.jsonautomatically. Leave the auth token unset. - OAuth: omit webhook credentials and provide
BITRIX24_AUTH_TOKEN. The client sends the token as theauthquery parameter.
If both webhook credentials and an auth token are present, the webhook path takes precedence.
Usage
Access the manager with dependency injection:
use Doniyor\Bitrix24\Bitrix24Manager; use Doniyor\Bitrix24\DTO\CRM\LeadFieldsDto; public function __construct(private Bitrix24Manager $bitrix) {} public function createLead(): int { return $this->bitrix->crm()->leads()->add( new LeadFieldsDto( title: 'New lead', name: 'Jane', lastName: 'Doe', phones: [ ['VALUE' => '+123456789', 'VALUE_TYPE' => 'WORK'], ], emails: [ ['VALUE' => 'jane@example.com', 'VALUE_TYPE' => 'WORK'], ], ) ); }
Or via the facade:
use Doniyor\Bitrix24\Facades\Bitrix24; use Doniyor\Bitrix24\DTO\CRM\LeadFieldsDto; $lead = Bitrix24::crm()->leads()->get(42); Bitrix24::crm()->leads()->update( 42, (new LeadFieldsDto(title: 'Existing lead')) ->withExtra(['STATUS_ID' => 'CONVERTED']) );
Supported CRM services
- Leads
- Deals
- Contacts
- Companies
- Products
- Product Sections
- Quotes
- Invoices
- Activities
- Requisites
- Deal Categories
- Statuses
- Stages
- Currencies
For other CRM entities, use Bitrix24::crm()->service('entityName').
Field DTOs
- All
addandupdateoperations expect an implementation ofDoniyor\Bitrix24\DTO\FieldsDtoInterface. - Use any of the ready-made CRM DTOs for type-safe payloads:
Doniyor\Bitrix24\DTO\CRM\LeadFieldsDtoDoniyor\Bitrix24\DTO\CRM\DealFieldsDtoDoniyor\Bitrix24\DTO\CRM\ContactFieldsDtoDoniyor\Bitrix24\DTO\CRM\CompanyFieldsDtoDoniyor\Bitrix24\DTO\CRM\ProductFieldsDtoDoniyor\Bitrix24\DTO\CRM\ProductSectionFieldsDtoDoniyor\Bitrix24\DTO\CRM\QuoteFieldsDtoDoniyor\Bitrix24\DTO\CRM\InvoiceFieldsDtoDoniyor\Bitrix24\DTO\CRM\ActivityFieldsDtoDoniyor\Bitrix24\DTO\CRM\RequisiteFieldsDtoDoniyor\Bitrix24\DTO\CRM\DealCategoryFieldsDtoDoniyor\Bitrix24\DTO\CRM\StatusFieldsDtoDoniyor\Bitrix24\DTO\CRM\StageFieldsDtoDoniyor\Bitrix24\DTO\CRM\CurrencyFieldsDto
- Use
Doniyor\Bitrix24\DTO\GenericFieldsDtofor quick array-backed payloads. - Create your own DTO classes to add validation, defaults, or IDE type safety before making requests.
Response DTOs & Mappers
- Services still return the raw Bitrix24 payload arrays so you can keep existing behaviour.
- When you want typed objects, use the dedicated mappers:
Doniyor\Bitrix24\CRM\Mappers\LeadResponseMapper→Doniyor\Bitrix24\DTO\CRM\Response\LeadDataDoniyor\Bitrix24\CRM\Mappers\DealResponseMapper→Doniyor\Bitrix24\DTO\CRM\Response\DealDataDoniyor\Bitrix24\CRM\Mappers\ContactResponseMapper→Doniyor\Bitrix24\DTO\CRM\Response\ContactDataDoniyor\Bitrix24\CRM\Mappers\CompanyResponseMapper→Doniyor\Bitrix24\DTO\CRM\Response\CompanyDataDoniyor\Bitrix24\CRM\Mappers\ProductResponseMapper→Doniyor\Bitrix24\DTO\CRM\Response\ProductDataDoniyor\Bitrix24\CRM\Mappers\ProductSectionResponseMapper→Doniyor\Bitrix24\DTO\CRM\Response\ProductSectionDataDoniyor\Bitrix24\CRM\Mappers\QuoteResponseMapper→Doniyor\Bitrix24\DTO\CRM\Response\QuoteDataDoniyor\Bitrix24\CRM\Mappers\InvoiceResponseMapper→Doniyor\Bitrix24\DTO\CRM\Response\InvoiceDataDoniyor\Bitrix24\CRM\Mappers\ActivityResponseMapper→Doniyor\Bitrix24\DTO\CRM\Response\ActivityDataDoniyor\Bitrix24\CRM\Mappers\RequisiteResponseMapper→Doniyor\Bitrix24\DTO\CRM\Response\RequisiteDataDoniyor\Bitrix24\CRM\Mappers\DealCategoryResponseMapper→Doniyor\Bitrix24\DTO\CRM\Response\DealCategoryDataDoniyor\Bitrix24\CRM\Mappers\StatusResponseMapper→Doniyor\Bitrix24\DTO\CRM\Response\StatusDataDoniyor\Bitrix24\CRM\Mappers\StageResponseMapper→Doniyor\Bitrix24\DTO\CRM\Response\StageDataDoniyor\Bitrix24\CRM\Mappers\CurrencyResponseMapper→Doniyor\Bitrix24\DTO\CRM\Response\CurrencyData
- Example usage:
use Doniyor\Bitrix24\Facades\Bitrix24; use Doniyor\Bitrix24\CRM\Mappers\LeadResponseMapper; $payload = Bitrix24::crm()->leads()->get(42); $lead = app(LeadResponseMapper::class)->map($payload); echo $lead->title;