Yes. The payee will have a database full of Bitcoin addresses, preferably derived from a master public key, along with an extra empty column. Each time a person clicks to finish his shopping cart, the database will update that column with the selected products he wants to buy.
I believe it will be more efficient if the system generates the new receiving address and add it to the database along with the other data only when a new order is created. This will minimize interaction with the database.
Besides BitPay, do you have any other scripts in mind?
You can use a self-hosted payment processor such as Btcpay and run your own server or use a third party service like Coinpayments (some members do not recommend using it).