Without a ready-made "Buy in One Click" component, developers often cobble together workarounds: they create orders via the cart without stock checks, lose UTM tags, or forget about 54-FZ requirements. We eliminate these risks during the design phase of the quick order module for 1C-Bitrix. The user enters only a name and phone number—the rest is handled by the manager. The module is built on the sale API with tagged caching and a separate log table, which accelerates report generation by 10x. Our solutions are proven on sites with loads up to 10,000 orders per day and ensure stable operation under peak loads. Our certified specialists have years of experience, confirmed by dozens of successful projects.
How to Set Up the Quick Order Module: Step-by-Step Guide
- Install the module: copy files to
local/modules/vendor.quickorder/or install via Marketplace. - Create a form component and place it on the product page or in a modal window.
- Configure email events for the manager and client, as well as SMS notifications via the provider's API.
- Verify integration with 1C (CommerceML) and CRM (via REST API or direct calls).
Implementing Quick Order in Bitrix
The module is registered in local/modules/vendor.quickorder/. Key files:
-
lib/QuickOrderHandler.php— order creation business logic -
lib/Notification.php— sending notifications -
components/vendor/quickorder.form/— form component -
install/db/install.sql— log table creation
Creating an Order via Sale API
Quick checkout is implemented using the sale module API. The product is added to the cart programmatically, then an order is created:
use Bitrix\Sale\Order; use Bitrix\Sale\Basket; use Bitrix\Sale\BasketItem; $order = Order::create(SITE_ID, null); // null = guest order $order->setPersonTypeId(1); $basket = Basket::create(SITE_ID); $item = $basket->createItem('catalog', $productId); $item->setFields([ 'QUANTITY' => 1, 'CURRENCY' => \Bitrix\Currency\CurrencyManager::getBaseCurrency(), 'LID' => SITE_ID, 'PRODUCT_PROVIDER_CLASS' => \CCatalogProductProvider::class, ]); $order->setBasket($basket); $propertyCollection = $order->getPropertyCollection(); $propPhone = $propertyCollection->getPhone(); if ($propPhone) { $propPhone->setValue($phone); } $order->setField('USER_DESCRIPTION', $comment); $order->save(); The new order status is set to "New" (usually N) or a special "Quick Order" status created in the sale module's status dictionary.
Analytics Using the Log Table
Structure of the b_quickorder_log table
In addition to order creation, we log to a separate table—this allows us to generate statistics without parsing the entire b_sale_order, speeding up reports by 10x.
| Field | Type | Purpose |
|---|---|---|
| ID | int auto_increment | — |
| ORDER_ID | int | ID of the created order in b_sale_order |
| PRODUCT_ID | int | Product ID |
| PHONE | varchar(20) | Phone number |
| NAME | varchar(255) | Name |
| SOURCE_URL | varchar(2048) | Page where the order was placed |
| UTM_SOURCE | varchar(100) | UTM tags |
| CREATED_AT | datetime | — |
| PROCESSED_AT | datetime | When the manager took it into work |
How is Phone Validated on the Server?
The quick order form is minimal—name and phone. Server-side phone validation uses a regular expression supporting formats: +7 (999) 123-45-67, 89991234567, +375 29 123-45-67. After normalization, we store it in E.164 format.
Anti-flood protection: we check the b_quickorder_log table for how many orders have been made from this IP in the last hour. If the threshold is exceeded (e.g., 5 orders), we return an error without creating the order.
Notifications for Manager and Client
After successful order creation, two notifications are triggered:
For the manager — the email event QUICKORDER_NEW with a template that includes the client's name, phone, product name and photo, and a link to the order in the admin panel. Additionally, an SMS can be configured via the integrated SMS provider's API.
For the client — an optional SMS confirmation: "Your order has been accepted; a manager will contact you within 15 minutes."
How to Integrate Quick Order with CRM?
If the project has a CRM module (custom or Bitrix24), a lead is automatically created when a quick order is placed. Data is transmitted via \Bitrix\Crm\LeadTable::add() or via the Bitrix24 REST API (crm.lead.add). The lead's SOURCE_ID field is set to "Quick Order from Site." This allows tracking channel effectiveness and the conversion funnel.
Placing the Button on the Product Card
The "Buy in One Click" button is placed in the bitrix:catalog.element component template. When clicked, a modal window with the form opens—either via bitrix:sale.order.ajax with a custom template or via a custom AJAX component. The modal must not reload the page and must work correctly with the product card component's caching enabled (the form is loaded via a separate non-cached AJAX request).
What's Included in the Module Development
- Full module code (backend and frontend).
- Installation and configuration documentation.
- Email and SMS notification setup.
- CRM integration (as needed).
- Training for managers on order handling.
- 6-month warranty covering bug fixes and consultations.
All source code is delivered to the client; the module is ready for installation on any 1C-Bitrix site.
Advantages of Our Module
Using a separate log table instead of parsing b_sale_order accelerates report generation by 10x, and phone number normalization to E.164 format simplifies integration with any CRM. Our certified specialists guarantee deadline adherence and code quality. Years of experience confirm the reliability of our solutions. Contact us to discuss your project and receive a consultation on module setup.
Development Timeline
| Scope | Features | Duration |
|---|---|---|
| Basic | Form, order creation in sale, email notification to manager |
3–4 days |
| Standard | + Anti-flood, database log, UTM parameters, SMS notification | 6–8 days |
| Extended | + CRM integration, source analytics, A/B testing of forms | 10–13 days |
Development cost depends on the required functionality and is calculated individually. Request a demo of the module to evaluate its features.

