Content Disposition is ok, but another solution would be using PATH_INFO and get the file this way:
http://example.com/download.php/2793156879.zip
Your download.php will be like
// handle path_info
$filename=$_SERVER['PATH_INFO']; // gets "/2793156879.zip" as $filename
// do smtg w/ $filename...
// ...
// download
$len = filesize($filename);
header("Content-type: application/force-download");
header("Content-Length: $len");
readfile($filename);
Note: application/force-download does not exists, it's just there to force downloads with every browser there is. (some MSIEs seem to have had troubles with application/octet-stream)
This approach has the advantage of working with all browsers: even the very old ones, not supporting "Content-Disposition:" header.
It has the small disadvantage you have to substr() the product code yourself from the PATH_INFO string