How it's possible?
It's important to have unique wallet addresses in order to verify the purchase of the goods
Hierarchically Deterministic (HD) wallet cloud directly generate wallet addresses, from xpub (extented public address). You could use
bitcoinjs-lib with nodejs to derive public addresses.
Example -
var xpub=process.argv[2];
var addr_index=process.argv[3];
var hdnode = new bitcoin.HDNode.fromBase58(xpub);
var child = hdnode.derive(addr_index);
console.log(child.getAddress('bitcoin').toString());
Then at an offline computer, derive corresponding private keys to spend from the customer wallets.
Example
For PHP use bitcoin-lib-php
https://github.com/Bit-Wasp/bitcoin-lib-php
You could also use a trusted third party, for BIP32 / HD key derivation for your customer's individual wallets
like Mycelium Gear, it requires only xpub and index for address creation.