I have a better solution for you, actually it is a solution I will use myself on my current code.
Use Armory :
.Create a Secure Offline Wallet
.Generate bitcoin addresses and export them, you can generate on demand.
.Use this list of generated addresses, either link them to orders or accounts.
If you ever need to spend the coins, you can use a Watch-Only btc version of that offline wallet to make offline transactions, and broadcast them, and sign them with the Offline Armory version.
you do not need to use any library or 3rd party API.
The only problem with that is my partner wants unique addresses for each user of my site (eg. a unique address per user). i'm not quite sure how to achieve that.