RetailCRM Integration with Website
RetailCRM is a specialized CRM for online retail, de facto standard for medium and large Russian e-commerce. Unlike universal CRM systems, RetailCRM was built specifically for order management, customer base work, and marketing communications in e-commerce.
Integration Architecture
RetailCRM acts as operating system for managers, site — frontend for buyers. Integration is bidirectional:
Site → RetailCRM: orders, customers, payments
RetailCRM → Site: order statuses, customer data, delivery
Connection via Official SDK
composer require retailcrm/api-client-php
$client = \RetailCrm\Factory::createClient(
'https://your-store.retailcrm.ru',
env('RETAILCRM_API_KEY')
);
Order Transmission
When order is created on site, it's immediately sent to RetailCRM:
$order = [
'number' => (string)$order->id,
'externalId' => (string)$order->id,
'createdAt' => $order->created_at->format('Y-m-d H:i:s'),
'status' => 'new',
'customer' => [
'externalId' => (string)$user->id,
'email' => $user->email,
'firstName' => $user->first_name,
'phones' => [['number' => $user->phone]]
],
'delivery' => [
'code' => 'courier',
'address' => ['text' => $order->delivery_address]
],
'items' => array_map(fn($item) => [
'offer' => ['externalId' => $item->product_id],
'productName' => $item->product_name,
'quantity' => $item->quantity,
'initialPrice' => $item->price / 100
], $order->items->toArray()),
'totalSumm' => $order->total / 100
];
$client->orders->create(new \RetailCrm\Api\Model\Request\Orders\OrdersCreateRequest(
\RetailCrm\Api\Model\Entity\Orders\Order::fromArray($order)
));
Status Synchronization Back
RetailCRM sends webhook when manager changes order status. Configure endpoint:
Route::post('/webhooks/retailcrm', function (Request $request) {
$data = json_decode($request->getContent(), true);
if ($data['topic'] === 'order_update') {
$order = $data['order'];
Order::where('id', $order['externalId'])
->update(['status' => $this->mapStatus($order['status'])]);
// Notify buyer of status change
dispatch(new OrderStatusChangedJob($order['externalId'], $order['status']));
}
});
Product Catalog
RetailCRM can be price and availability source via ICML feed:
<!-- retailcrm.xml - generated by site, imported to RetailCRM -->
<yml_catalog>
<shop>
<offers>
<offer id="123" available="true">
<price>1500</price>
<stockCount>10</stockCount>
<name>Blue T-shirt XL</name>
</offer>
</offers>
</shop>
</yml_catalog>
Feed is generated hourly, RetailCRM imports updates.
Customer Base and History
RetailCRM stores full customer order history, segments, and tags. Via API you can get this data for site personalization: show "recommended for you" based on previous purchases, display loyalty program status.
Triggered Communications
RetailCRM can launch email/SMS/push by events: abandoned cart, N days without purchases, birthday. Configured within RetailCRM, requires only correct customer data transmission — no site code needed.
Integration time: 1–2 weeks for complete bidirectional synchronization with order transmission, webhook processing, and ICML catalog feed.







