En una instalación limpia y vainilla de Magento 1.9.2.4, parcheada con SUPEE-8788, SUPEE-9652 y SUPEE-9767, y con la nueva configuración 'Habilitar validación de clave de formulario al finalizar la compra' activada, luego de un pago exitoso del registro del nuevo cliente en el pago predeterminado de una página, no se crea un nuevo cliente y el cliente no ha iniciado sesión, aunque el pedido se realiza correctamente.
Desactivar la opción 'Habilitar validación de clave de formulario al finalizar la compra' hace que esto funcione nuevamente. ¿Alguién más ha tenido este problema? No parece importar qué métodos de envío / pago se utilicen.
Desde entonces he intentado esto con una instalación nueva y sin modificaciones de Magento 1.9.3.3 y parece tener el mismo problema. Al registrar un nuevo cliente a través de la comprobación de una página, no se crea ningún cliente, incluso si el pedido se procesa correctamente, siempre que la configuración 'Habilitar validación de clave de formulario al finalizar la compra' esté activada.
fuente
Cuando selecciona registrarse y continuar, el script JS llama
checkout.setMethod()
, que se encuentra enskin/frontend/base/default/js/opcheckout.js
. Desde allí podemos ver que realiza una solicitud POST AJAXthis.saveMethodUrl
, pero el único parámetro que pasa esmethod
. Si observamosMage_Checkout_OnepageController::saveMethodAction
, cuál es el objetivo de esa solicitud AJAX, podemos ver que el parche agregó:Dado que
_validateFormKey
busca unform_key
parámetro en la solicitud, y dado que lasetMethod
solicitud JS no envió esto cuando realizó la solicitud AJAX, simplemente regresa temprano y no hace nada. Volviendo a lasetMethod
función y podemos ver que, dado que no intenta hacer nada con un valor de retorno, no sucede nada más y el JS continúa. En este punto, el JS se ha establecido,this.method = 'register'
pero la cotización no se ha actualizado, por lo quecheckout_method
es el "invitado" predeterminado.Dado que JS conoce el registro seleccionado por el cliente, muestra los campos de contraseña, por lo que parece que se está registrando. Pero en lo que respecta al lado de PHP, es un pago de invitado, por lo que no crea el cliente cuando se completa el pago.
Editar: la solución más simple es comentar esas tres líneas de saveMethodAction. La solución más correcta / compleja es que
setMethod
debería tomar la tecla form_key de la página y enviarla con la solicitud AJAX.fuente
app/code/core/Mage/Checkout/controllers/OnepageController.php
. Es causado por el JS que hace que la solicitud no envíe form_key. Es un error con el parche. Sospecho que tendrá que haber una v2.¡Los créditos completos van a Peter por la solución! Me gustaría señalar instrucciones paso a paso sobre qué cambiar.
Vaya a app / code / core / Mage / Checkout / controllers / OnepageController.php
Localizar:
Comente la línea con / * * / etiquetas.
fuente
form key
lugar. Deberíamos informar esta falla (parche) al equipo central de magento.isFormkeyValidationOnCheckoutEnabled()
puede deshabilitar la configuración en el administrador, sin embargo, la mejor solución es Raphaels: magento.stackexchange.com/a/177125/2671Un buen punto para comenzar:
Parche de seguridad SUPEE-9767 - ¿Posibles problemas?
Necesita actualizar sus archivos de plantilla. Tenga en cuenta que solo quedan unas pocas horas desde el lanzamiento de este parche y por el momento tenemos que lidiar con lo que es público. Estoy bastante seguro de que en los próximos días las cosas se aclararán.
EDITAR: ¡Gracias por votar abajo! Lamento no poder dar una solución en 8 horas desde el lanzamiento de este parche.
fuente
Gracias por el parche @ Raphael en Digital Pianism.
Por conveniencia, creé un diff para que pueda aplicar rápidamente el parche.
fuente
La versión 2 del parche SUPEE-9767 se lanzó hoy, junto con Magento CE 1.9.3.4 . V2 corrige una serie de problemas, incluido este error de registro de pago.
Puede actualizar a la última versión (1.9.3.4) o revertir V1 y luego aplicar V2 del parche. Cualquiera de las opciones resolverá el problema.
El cambio oficial en V2 es efectivamente el mismo que Peter O'Callaghan describió, eliminando las tres líneas agregadas
Mage_Checkout_OnepageController::saveMethodAction
.fuente