Я использую Zapier для экспорта заказов из WooCommerce в программное обеспечение моей учетной записи при создании заказа. Данные отправляются через WooCommerce REST API.
Все работает нормально, но я заметил, что цена за единицу в метаданных заказа иногда отображает цены продуктов с более чем двумя знаками после запятой. Это происходит при заказе нескольких одинаковых товаров. Кажется, это всегда происходит, когда цена товара имеет два знака после запятой и упорядочена кратно нечетным числам.
Моя бухгалтерская программа принимает только до 2 знаков после запятой. Таким образом, возникает ошибка каждый раз, когда цена за единицу имеет более двух знаков после запятой. Вот как я обнаружил эту проблему.
Я проверил цену товара, и цены верны. Я также проверил, включив и отключив округление налога на промежуточном уровне вместо округления по строке. Кажется, ничего не решает проблему.
Я хотел бы отфильтровать цену за единицу при создании заказа в WooCommerce, чтобы они были преобразованы в два десятичных знака. Любые мысли или предложения о том, как решить эту проблему, будут оценены.
Вот пример только одного заказа, в котором элемент отображается с более чем двумя знаками после запятой:
isCreditInvoice:false
customer:d58ca99b-07f3-45fa-80ae-164ebbc881f1
invoiceDate:2021-03-07T09:18:06+02:00
quantity:1,1,1,1,1,1,2,6,6,5,7,7,4,10,10,1,1,1,1,1,1,1,1
yourReference:Order Number 6631
deliveryDate:{{111079934__date_completed}}
ourReference:Order Number 6631
unitPrice:22.5,22.5,26.25,25,34.95,34.95,23.76,6.95,6.95,6.95,9.950000000000001,9.950000000000001,9.95,1.6,1.6,14.95,23.4,8.4,30,21.36,25,12.5,26.5
Обновление: это проблема ядра плагина WooCommerce, о которой уже сообщалось WooCommerce на Github
https://github.com/woocommerce/woocommerce/issues/27911
Используйте следующий патч, чтобы временно устранить проблему:
Перейдите к строке 172 woocommerce/includes/rest-api/Controllers/Version2/class-wc-rest-orders-v2-controller.php.
Заменять:
$data['price'] = $item->get_quantity() ? $item->get_total() / $item->get_quantity() : 0;
С:
$data['price'] = $item->get_quantity() ? wc_format_decimal( $item->get_total() / $item->get_quantity() ): 0;
Проверено и работает.
Теперь unitPrice будет округлен до двух знаков после запятой.