- Wait for a new block to be discovered and download it
- Iterate over all transactions in the block and leave only the transactions with the destination address matching one generated by you (this is not really slow since you're doing this locally and querying against the local database)
- Perform necessary additional verifications (like tx amount >= order amount) and mark the order as paid
You can greatly simplify the process by running your own Bitcoin Core node because Bitcoin Core software does all that automatically for you, with added bonuses like automatic address generation, specifying what level of confidence (number of confirmations) you need for the software to notify you of the new incoming transaction etc. It will also help with any withdrawals, calculating the total balance and combining the inputs from all the addresses to create an output transaction. Running the node in pruning mode (with -prune flag) will save you much space.