Pregunta

La tienda que estoy trabajando es sólo para productos descargables. Durante la salida si tenemos un libro de un conjunto determinado atributo enviamos una solicitud SOAP a una empresa externa (para obtener la URL para descargar el libro electrónico de la empresa externa). He escrito un módulo que anula el saveOrderAction del OnepageController.php

He creado una tabla de base extra que almacena la información sobre URL descargable del elemento que se actualiza en la saveOrderAction.

Al igual que durante el pago y envío del ID del pedido no se genera He creado un observador, la cual comprueba la orden que guardan caso, durante este se encuentra el ID del pedido de los productos actuales que he actualizar la tabla de base de datos que he creado.

El problema que estoy teniendo ahora es cómo actualizar las URL para descargar cuando el usuario hace clic en su sección de descarga para descargar los productos de su cuenta de cliente.

En el DownloadController.php he encontrado la función linkAction que creo que se llama cuando se hace clic en el botón de descarga para un producto. Allí tengo print_r la variable $linkPurchasedItem que muestra una purchased_id y item_id que parecen ser únicos para el producto.

Para devolver la URL para descargar que se guarda en la base de datos (en mi tabla personalizada) y dado a la empresa externa que tendrá que actualizar la tabla de base de datos que he creado en algún momento de insertar el 'purchased_id' o 'item_id' por lo que en la DownloadController.php en el linkAction puedo correr otra llamada base de datos para obtener la URL para descargar el adecuado para el producto esta función se llama para.

Por lo tanto, mis preguntas son:

  • ¿En qué momento es el purchased_id y / o item_id generada?
  • ¿Es posible conseguir que en el OnepageController.php?
  • ¿Cuál es la mejor manera de identificar de forma única cada producto en cada orden en mi mesa de base de datos personalizada para que pueda hacer referencia a ella en el DownloadController.php?

Gracias por cualquier ayuda de antemano.

¿Fue útil?

Solución

Let's take your main questions, in order:

1. At what point is the purchased_id and/or item_id generated?

Both purchased_id and item_id are generated within Mage_Downloadable_Model_Observer from the method saveDownloadableOrderItem. This observer is registered to listen for the event sales_order_item_save_commit_after - which is called every time an order item is saved and the db transaction commit has completed.

The specific line where this is set is ~105*:

$linkPurchasedItem = Mage::getModel('downloadable/link_purchased_item')
    ->setPurchasedId($linkPurchased->getId())
    ->setOrderItemId($orderItem->getId());

This happens just before it generates the hash for the download link. You'll see that it does not explicitly set the item_id - indeed, it isn't necessary because it is the autoincrement primary key for the table.

In summary, the ids are set after the order item is successfully saved to the database, meaning the order itself is also saved.

2. Is it possible to get them in the OnepageController.php?

Because the order item has to be saved in order to generate the purchased_id, the answer is no.

3. What is the best way to uniquely identify each product in each order in my custom database table so I can reference it in the DownloadController.php?

In much the same way as shown above in the model setter setOrderItemId, they used the sales order item's id to reference that particular product. You should also use this strategy. In order to inject this into your own table, rewrite Mage_Downloadable_Model_Observer to save to your own table in parallel to the save in the downloadable tables -- otherwise you'll have to copy the pattern set forth in that class, doing many checks to ensure that the product type id is Downloadable, etc.

Summary:

You're not going to be able to generate download links from your SOAP service until after the order is completed. Without a major refactor there is no way to access purchased_id in Onepage.php.


* at least in CE 1.8 Alpha / EE 1.13.0.1

Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top