I am assuming that you will not be having any hot wallets.
The best way to go is to generate a large number of addresses and then enter them in a database.
Then when an order is submitted (or new customer if fixed deposit address for each) you will automatically grab the first available address (one that was not used) and tie it to the order/customer no,
and of course give it to the customer to make the payment/deposit.
You can then just check if any transactions made to any address using blockchain info API:
https://blockchain.info/api/blockchain_apiHope that helps
EDIT: I know I do not need to mention this but just in case, DO NOT enter ANY private keys in the database.
You keep all private keys in your wallet and make sure it is well secured.