2012-01-27 161 views
2

我在我的Magento店面出现问题,在结帐时向我的商店注册的客户无法完成OnePageCheckout结帐流程。这个错误对我来说很难重现。以下是我收到的错误消息:客户在结帐时注册时,结帐和客户注册失败

付款交易失败提醒
付款交易失败。原因:客户电子邮件是必需的。

支付交易失败提醒
支付交易失败。原因:此客户电子邮件已存在。

我很确定这意味着客户第二次尝试,并且无法完成第二次结帐。

这个错误对我来说很奇怪,原因有两个。首先,这个错误在结帐时不应该发生。由于在一页结帐的验证不允许您使用已存在的电子邮件地址进行注册,因此第二种错误应该是不可能的。如果没有输入电子邮件地址(第一种错误),验证检查也不会让您再进一步。在这两种情况下,最终付款标签似乎是遇到错误的地方,都应该通过JavaScript隐藏。

这怎么可能,一个客户得到一路在那里他们可以点击Place Order按钮,但没有通过注册选项卡上的验证得到筛选了点?

我的猜测是,它可能是导致验证失效的浏览器,并让客户一路走到最后一位。

当我说这个错误是“罕见的”,我的意思是它发生在1000次订单中的2次。

我很确定它在报价转换为订单时发生。在订单保存事件中,它将尝试并保存客户,作为交易的一部分,同时还处理付款。我不认为支付网关正在抛出错误,但可能控制权已转交给该类。它最有可能发生在OnePageController.php文件中调用saveOrderAction()函数之后。后一个错误在此函数被抛出时,错误被报道这样的堆栈跟踪:

Mage::helper('checkout')->sendPaymentFailedEmail($this->getOnepage()->getQuote(), $e->getMessage()); 

这是“付款事务失败提醒”电子邮件获取生成哪里。我认为错误必须在这个部分:

$this->getOnepage()->saveOrder(); 

我该如何去寻找PHP代码中哪里出现这个错误?我该如何纠正这一点,以便我不会失去试图从我那里购买产品的顾客?

我的店面正在运行Magento 1.9.1.1版本。

更新:刚刚得到的这些一个又一个。客户记录完全丢失,但有一个送货和账单地址。很奇怪。

+1

您是否设置了任何测试以尝试复制数据?如果不是的话,我建议尽快与Selenium合作。 – Nic 2012-01-30 00:56:20

+0

我可以使用Ecomdev测试套件进行复制。但是这不是一个完整的浏览测试。我有一个有趣的怀疑,即客户记录在回滚时被删除,因为出错了,但只有客户数据丢失,而不是地址,而且他们实际上已分配了客户ID。 – ShaunOReilly 2012-01-30 01:24:19

+0

我已经完成了浏览器测试的分配,包含大约100种不同的场景和不同的字符,但是网页在您下订单之前会停止任何无效的条目。 – ShaunOReilly 2012-01-30 06:02:16

回答

2

需要更多信息,但我敢打赌,这是一个MySQL主/从竞争条件。曾经发生过这种事情。 解决方案是使用Lua可脚本化的https://launchpad.net/mysql-proxy。 主从之间的负载平衡(不仅仅是读/写分割)更好,这个问题可以用一个小的Lua脚本来解决。

+0

我们有一个主/从设置,但仅用于故障转移,而不是负载平衡。无论如何感谢提示。几乎认为这是问题所在。 – ShaunOReilly 2012-02-05 23:35:09

+0

嘿@ShaunOReilly我认为你最终确认这是由于主/从复制?我正在用不同的结账扩展来解决这个问题。我注意到它似乎只影响Safari用户,所以我真的希望这是一个客户端问题,其中现有的电子邮件地址没有得到适当的验证。我很确定我甚至没有主/从复制设置,只是在考虑这一点。 – kalenjordan 2014-12-31 18:28:05

1

我们正在使用Firecheckout的Onepage Extension,但它听起来像是我们遇到的同样的问题。

时不时地,我们将有一个客户记录失踪,订单查看屏幕上我们只会看到

客户名称游客

电子邮件什么

我相信这发生在客户输入无效的电子邮件地址时。检查您的exception.log,如果发生这种情况,我们会看到以下内容:

2012-02-01T23:47:30+00:00 ERR (3): 
exception 'Zend_Mail_Transport_Exception' with message 'Unable to send mail. ' in  /var/www/html/lib/Zend/Mail/Transport/Sendmail.php:137 
Stack trace: 
#0 /var/www/html/lib/Zend/Mail/Transport/Abstract.php(348): Zend_Mail_Transport_Sendmail->_sendMail() 
#1 /var/www/html/lib/Zend/Mail.php(1194): Zend_Mail_Transport_Abstract->send(Object(Zend_Mail)) 
#2 /var/www/html/app/code/core/Mage/Core/Model/Email/Template.php(409): Zend_Mail->send() 
#3 /var/www/html/app/code/core/Mage/Core/Model/Email/Template.php(462): Mage_Core_Model_Email_Template->send(Array, Array, Array) 
#4 /var/www/html/app/code/core/Mage/Core/Model/Email/Template/Mailer.php(79): Mage_Core_Model_Email_Template->sendTransactional('sales_email_ord...', 'general', Array, Array, Array, '1') 
#5 /var/www/html/app/code/local/Mage/Sales/Model/Order.php(1310): Mage_Core_Model_Email_Template_Mailer->send() 
#6 /var/www/html/app/code/local/TM/FireCheckout/Model/Type/Standard.php(1079): Mage_Sales_Model_Order->sendNewOrderEmail() 
#7 /var/www/html/app/code/local/TM/FireCheckout/controllers/IndexController.php(559): TM_FireCheckout_Model_Type_Standard->saveOrder() 
#8 /var/www/html/app/code/core/Mage/Core/Controller/Varien/Action.php(420): TM_FireCheckout_IndexController->saveOrderAction() 
#9 /var/www/html/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(250): Mage_Core_Controller_Varien_Action->dispatch('saveOrder') 
#10 /var/www/html/app/code/core/Mage/Core/Controller/Varien/Front.php(176): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http)) 
#11 /var/www/html/app/code/core/Mage/Core/Model/App.php(349): Mage_Core_Controller_Varien_Front->dispatch() 
#12 /var/www/html/app/Mage.php(640): Mage_Core_Model_App->run(Array) 
#13 /var/www/html/index.php(106): Mage::run('', 'store') 
#14 {main} 
+0

听起来像一个非常好的答案 - 我要检查了这一点! – ShaunOReilly 2012-02-06 02:33:02

+0

我和Magento一起工作得越多,我就越是在内部工作。当客户输入一个无效的电子邮件地址时抛出堆栈跟踪异常是...让我们彬彬有礼,并说“指示工作不当”。 RFC 5321和5322已经存在数十年了! – 2012-02-06 19:21:58