Это есть стандартно. В коде настроек ТДС магазина обработка:
// Обработка скачивания файла электронного товара
$guid = Core_Array::getGet('download_file');
if (strlen($guid))
{
$oShop_Order_Item_Digital = Core_Entity::factory('Shop_Order_Item_Digital')->getByGuid($guid);
if (!is_null($oShop_Order_Item_Digital) && $oShop_Order_Item_Digital->Shop_Order_Item->Shop_Order->shop_id == $oShop->id)
{
$iDay = 7;
// Проверяем, доступна ли ссылка (Ссылка доступна в течение недели после оплаты)
if (Core_Date::sql2timestamp($oShop_Order_Item_Digital->Shop_Order_Item->Shop_Order->payment_datetime) > time() - 24 * 60 * 60 * $iDay)
{
$oShop_Item_Digital = $oShop_Order_Item_Digital->Shop_Item_Digital;
if ($oShop_Item_Digital->filename != '')
{
Core_File::download($oShop_Item_Digital->getFullFilePath(), $oShop_Item_Digital->filename);
exit();
}
}
else
{
Core_Message::show(Core::_('Shop_Order_Item_Digital.time_is_up', $iDay));
}
}
Core_Page::instance()->response->status(404)->sendHeaders()->showBody();
exit();
}
в xsl письма темплейт:
<!-- Данные об электронных товарах -->
<xsl:template match="shop_order_item_digital">
<br />
<xsl:if test="shop_item_digital/value != ''">
<i>Текст электронного товара:</i><xsl:text> </xsl:text><xsl:value-of select="shop_item_digital/value" /><br />
</xsl:if>
<!-- Ссылка на файл электронного товара -->
<xsl:if test="shop_item_digital/filename != ''">
<a href="http://{/shop/site/site_alias/name}{/shop/url}?download_file={guid}"><i>Скачать файл</i></a><br />
</xsl:if>
</xsl:template>