Время от времени клиент получает сообщение об ошибке при попытке отправить заказ, в котором говорится, что шлюз PayPal отклонил запрос. Сделка была отклонена в результате получения дублированного идентификатора счета. После того, как вы немного вникаете в это, я считаю, что я сузил проблему. В последних случаях клиент попытался разместить заказ 4 месяца назад и получил Внутреннюю ошибку от PayPal. Я узнал от разговоров с PayPal, что эта кредитная карта клиента была отмечена. Когда они попытались разместить первый заказ, PayPal отклонил его, но все еще считал идентификатор счета, который наш Magento Store предоставил "использован".
Ускорьте вперед на сегодняшний день... тот же клиент, новый заказ. У Magento STILL была старая цитата из сентября в таблице sales_flat_quote
. Когда они вошли в систему, она загрузила котировку клиента (которая по-прежнему активна) и попыталась использовать ее для этого заказа. Это привело к ошибке Duplicate Invoice ID.
В классе Mage_Sales_Model_Observer я вижу метод cleanExpiredQuotes
, который вызывается из задания cron. Тем не менее, это только эффекты котировки с "is_active" = 0. Поскольку эта цитата считается активной, она никогда не очищалась.
Так ясно, что есть разрыв между кодом Magento и PayPal. Но об этом, насколько я понял. Кто-нибудь еще испытал это? Если да, то какие-либо предложения?
EDIT:
Я получил немного больше. Я добавил код в checkout IndexController, чтобы поймать ошибку, и, если это Duplicate Invoice Error, он отключает зарезервировать_order_id в цитате, снова вызывает saveOrderAction. Это заставляет цитату зарезервировать новый идентификатор заказа, который затем отправляет в PayPal. Проблема, с которой я столкнулся сейчас, заключается в том, что когда она пытается второй раз с новым номером счета, все итоговые значения равны 0. Я попытался установить значение totals_collected_flag на false, чтобы он собирал итоговые суммы повторно, но они всегда 0 во второй раз. Более конкретно, итоговые значения в Mage_Sales_Model_Quote_Address равны 0, и это означает, что используется Mage_Sales_Model_Order. Итоговые значения в Mage_Sales_Model_Quote верны, но они переписываются в методе collectTotals()
цитаты.
Очевидно, что после первой попытки что-то отменяет все значения, но я не знаю, что и где. Если у кого-то есть идеи, я бы хотел их услышать!