Валюты и цены на собственном сайте: мультивалютное отображение, обновление курсов, расчёт налогов и оплата
1. Три технических заблуждения о мультивалютном отображении
Первое заблуждение: пересчёт через JavaScript с обращением к API курсов в реальном времени на витрине. Покупатель открывает страницу и видит цену по текущему курсу, но пока он добавляет товар в корзину, заполняет адрес и доходит до оформления, курс уже изменился — итоговая цена не совпадает с показанной. На B2C-сайтах из-за этого растёт доля возвратов, а на B2B-сайтах покупатели просто бросают заказ и уходят в запрос.
Второе заблуждение: делать только мультивалютное отображение и не локализовать налоги. Покупатели из ЕС привыкли видеть цену с налогом (MwSt. inkl.), покупатели из США — цену без налога плюс оценку налога с продаж. Если показать пользователю из ЕС цену без налога, он решит, что сверху добавят ещё 20%, и просто уйдёт. Третье заблуждение: подключать онлайн-оплату к B2B-сайту с запросами. Заказы B2B обычно крупные, требуют коммерческого предложения и отсрочки платежа — платёжные шлюзы этого не умеют, а их принудительное подключение повышает риск чарджбэков. Обсуждение стратегии ценообразования — в разделе Ценообразование при выходе на зарубежные рынки: от затратного метода к ценностному.
| Техническое заблуждение | Что получают | Правильный подход |
|---|---|---|
| Пересчёт курса через JS на витрине в реальном времени | Разница между показанной и итоговой ценой больше 1% | Ежедневная пакетная загрузка, один курс для витрины и заказа |
| Меняем валюту, но не налоги | Покупатель из ЕС думает, что добавят 20% налога | Показывать с налогом или без — в зависимости от страны |
| Принудительное подключение онлайн-оплаты на B2B-сайте | Высокий риск чарджбэков по крупным заказам | Мультивалютность только для отображения, оплата — по запросу |
| Курс по спот-курсу продавца | На 3–5% выше курса ЦБ | Средний курс ЦБ плюс буфер 1–2% |
| Нет ручного переключения валюты | Пользователи с VPN видят неверную валюту | Селектор валюты в футере, по умолчанию — по IP |
2. Частота обновления курсов: раз в сутки, не в реальном времени
Частота обновления курсов для мультивалютного отображения на B2B-сайте — раз в сутки, пакетная загрузка в 00:00 UTC с записью в кэш базы данных на весь день. Не обращайтесь к API курсов в реальном времени с фронтенда. Причин три: во-первых, обращения в реальном времени увеличивают задержку загрузки страницы и влияют на Core Web Vitals показатели; во-вторых, у API курсов есть лимит обращений, а пересчёт в реальном времени обходится дорого; в-третьих, пересчёт в реальном времени приводит к расхождению показанной и итоговой цены.
Три источника курсов: ежедневный фиксинг Европейского центрального банка (бесплатно и стабильно), XE API (бесплатного лимита хватит небольшому сайту), Open Exchange Rates (1000 запросов в месяц на бесплатном тарифе). К курсу стоит добавить буфер 1–2% в пользу магазина: платёжный шлюз при фактическом расчёте даёт курс чуть выше среднего курса ЦБ. Об управлении курсовыми колебаниями в B2B-котировках см.Управление валютными рисками, здесь речь только о витрине.
| Варианты работы с курсами | Частота обновления | Когда подходит | Затраты |
|---|---|---|---|
| Фиксинг ЕЦБ | Раз в день | B2B-сайты с фокусом на Европу | Бесплатно |
| XE API | Раз в день | Мультивалютные B2B-сайты | Бесплатного лимита хватит небольшому сайту |
| Open Exchange Rates | Каждый час | B2C-сайты с высокой частотой заказов | 1000 запросов в месяц на бесплатном тарифе |
| Автоконвертация Stripe | В реальном времени при оплате | Чистый B2C с небольшими заказами | Stripe рассчитывает в валюте карты |
3. Расчёт налогов: по стране назначения, а не по месту склада
Главное правило расчёта налогов — считать по стране назначения, а не по месту склада. Если немецкий покупатель заказывает у вас товар, неважно, отправляете вы его напрямую из Китая или со склада в ЕС: на немецкой версии сайта цена обязательно должна быть с НДС 19% (MwSt). Американскому покупателю показывайте цену без налога, а на этапе оформления заказа добавляйте налог с продаж по ставке его штата. Это правило называется принципом страны назначения (destination principle), и ему следуют и правила ЕС по НДС, и правила налога с продаж в США.
Пример: экспортёр промышленных датчиков, сайт по умолчанию показывает цены в USD без налога. Немецкий покупатель открывает страницу, видит датчик за $100 и мысленно прибавляет к этому 19% немецкого НДС — получается 119 долларов. Если на сайте нет локализации налогов, цена кажется ему непрозрачной, и он сразу пишет запрос с вопросом “including VAT?”. Правильно так: при заходе с немецкого IP автоматически показывать цену в EUR с налогом — “€109.90 inkl. MwSt”, а при заходе с американского IP — “$99.00 + sales tax”. О надёжности формы запроса см.Надёжность формы запроса.
| Регион | Как показывать цену | Налоги | Типичная ставка |
|---|---|---|---|
| ЕС (Германия) | Цена в EUR с налогом | Включая MwSt, без доплат | 19% (стандартная) / 7% (пониженная) |
| ЕС (Франция) | Цена в EUR с налогом | Включая TVA | 20% |
| США | Цена в USD без налога | Налог с продаж по штату при оформлении заказа | От 0% до 10%, в каждом штате своя |
| Великобритания | Цена в GBP с налогом | Включая VAT | 20% |
| Япония | Цена в JPY с налогом | Включая потребительский налог | 10% |
4. Платежи и расчёты: получаете в основной валюте, платите в валюте карты
Мультивалютные цены и расчёты по платежам — это две разные вещи. Уровень цен: на витрине показываете цену в валюте покупателя, чтобы он понимал, сколько платит. Уровень расчётов: вы как продавец в итоге всё равно должны получить деньги в своей основной валюте (обычно USD или CNY). Конвертацию между ними выполняет платёжный шлюз — не стоит делать собственную логику обмена валюты на сайте.
Рекомендуемая схема: покупатель видит цену в EUR с налогом, при оформлении заказа выбирает оплату через Stripe, и Stripe списывает деньги в валюте его карты (если карта в евро — спишет евро, если в долларах — спишет доллары по текущему курсу). При расчёте Stripe конвертирует деньги в вашу основную валюту и переводит их на ваш банковский счёт. Так вам нужно поддерживать только один набор цен в основной валюте: на витрине они отображаются по кэшу курсов, а расчёт идёт через платёжный шлюз. Не пишите собственную логику конвертации валют в бэкенде сайта — это дорого в поддержке и легко приводит к ошибкам. Сравнение платёжных шлюзов и их тарифов смотрите в Надёжность формы запроса статьях о платежах на этом же сайте.
| Этап | Валюта | Источник курса | На что обратить внимание |
|---|---|---|---|
| Отображение на витрине | Валюта покупателя | Ежедневно кэшируемый курс ЦБ | Плюс 1–2% буфер для продавца |
| Добавление в корзину | Валюта покупателя | Тот же кэш, что на витрине | Фиксируется на время сессии, не меняется |
| Списание при оформлении | Валюта держателя карты | Курс Stripe/PayPal в реальном времени | Сообщите покупателю, что расчёт пойдёт по этому курсу |
| Расчёт с продавцом | Основная валюта (USD/CNY) | Курс расчёта платёжного шлюза | Потери на конвертации 1–3% |
V. Мультивалютная стратегия для B2B-сайтов с запросами
Мультивалютные стратегии для B2B-сайтов и B2C-магазинов устроены совершенно по-разному. В B2B суммы заказов крупные (обычно от нескольких тысяч до сотен тысяч долларов), нужны коммерческие предложения, отсрочка платежа и цены со скидкой за объём — платёжные шлюзы такое не обрабатывают. Поэтому на B2B-сайте мультивалютность решает одну задачу: показать покупателю цену в привычной ему валюте, снизить затраты на согласование и подвести его к отправке запроса.
Как это делается на практике: на витрине валюта переключается автоматически по IP, внизу добавьте ручной выбор валюты (USD/EUR/GBP/JPY/AUD), цены пересчитываются по ежедневно кэшируемому курсу, а рядом с ценой укажите «Reference price, final quote in USD». В форму запроса добавьте выпадающий список «Preferred currency», чтобы покупатель выбрал валюту, в которой хочет получить предложение. Обязательства по срокам поставки и правила расчёта смотрите в Обязательство по срокам.
| Тип сайта | Мультивалютный подход | Способ оплаты | Обновление курса |
|---|---|---|---|
| B2C-магазин | Отображение и полный цикл расчёта | Онлайн-оплата через Stripe/PayPal | Раз в час или раз в день |
| B2B-сайт с запросами | Только отображение, без расчёта | Подводим к запросу, оплата через T/T | Раз в день |
| Смешанный сайт | Розничные SKU оплачиваются онлайн, крупные суммы — через запрос | Автоматическое разделение по сумме | Раз в день |
FAQ: частые вопросы
Насколько может расходиться цена на витрине и при оформлении заказа?
Как часто обновлять курс?
Как показывать VAT ЕС на сайте?
Стоит ли подключать онлайн-оплату на B2B-сайте?
Чем отличаются мультивалютные расчёты в Stripe и PayPal?
Добавлять ли наценку к кэшу курсов и какую?
В заключение
Техническая суть мультивалютного ценообразования не в конвертации, а в согласованности: цена на витрине, цена в корзине и цена при оформлении должны рассчитываться по одному и тому же набору курсов. Пересчёт в реальном времени выглядит прогрессивно, но на деле перекладывает колебания цены на покупателя — и в итоге растут возвраты и брошенные корзины.
Три шага к внедрению. Первый: раз в день по расписанию забирайте курс центробанка и кэшируйте его в базе данных. Второй: показывайте цену с налогом или без него в зависимости от страны — в ЕС с налогом, в США без. Третий: на B2B-сайте мультивалютность только для показа, без расчётов, с призывом отправить запрос; на B2C-сайте рассчитывайте через Stripe в валюте карты и не пишите собственную логику конвертации.
Фраза, которую стоит запомнить: мультивалютное ценообразование — это не когда сайт конвертирует валюту за вас, а когда покупатель видит неизменную цену в привычной ему валюте.
