Ошибка дублирования счета в Magento PayPal

Время от времени клиент получает сообщение об ошибке при попытке отправить заказ, в котором говорится, что шлюз PayPal отклонил запрос. В транзакции было отказано из-за предоставленного дублирующего идентификатора счета-фактуры. Немного покопавшись в этом, я считаю, что сузил проблему. В самых последних случаях клиент пытался разместить заказ 4 месяца назад и получил внутреннюю ошибку от PayPal. Из разговора с PayPal я узнал, что кредитная карта этого клиента была помечена. Когда они попытались разместить первый заказ, PayPal отклонил его, но все же посчитал «использованным» идентификатор счета-фактуры, предоставленный нашим магазином Magento.

Перенесемся в сегодняшний день ... тот же клиент, новый заказ. Magento ВСЕ ЕЩЕ содержала старую сентябрьскую цитату в таблице sales_flat_quote . Когда они вошли в систему, он загрузил предложение клиента (которое все еще было активным) и попыталось использовать его для этого заказа. Это привело к ошибке Повторяющийся идентификатор счета .

Я вижу в классе Mage_Sales_Model_Observer, что есть метод cleanExpiredQuotes , который вызывается из задания cron. Однако это влияет только на кавычки с "is_active" = 0. Так как эта котировка считается активной, она никогда не сбрасывалась.

Совершенно очевидно, что между кодом Magento и PayPal есть несоответствие.Но это примерно то, что я дошел до этого. Кто-нибудь еще испытал это? Если да, какие-нибудь предложения?

РЕДАКТИРОВАТЬ:

Я немного продвинулся в этом. Я добавил код для проверки IndexController, чтобы отловить ошибку, и, если это ошибка дублирования счета-фактуры, он сбрасывает reserved_order_id в цитате, a снова вызывает saveOrderAction . Это заставляет предложение зарезервировать новый идентификатор заказа, который затем отправляется в PayPal. Проблема, с которой я столкнулся сейчас, заключается в том, что, когда он пытается второй раз с новым номером счета-фактуры, все итоги равны 0. Я попытался установить для totals_collected_flag значение false, чтобы он повторно собирал итоги, но они всегда равны 0 во второй раз. В частности, итоги в Mage_Sales_Model_Quote_Address равны 0, что и используется в Mage_Sales_Model_Order . Итоги в Mage_Sales_Model_Quote верны, но они перезаписываются в методе collectTotals () цитаты.

Очевидно, что после первой попытки что-то сбивает все значения, но я не знаю, что и где. Если у кого-то есть идеи, я хотел бы их услышать!

11
задан BrianVPS 13 January 2012 в 21:16
поделиться