One low-tech solution that you might be able to implement is to make a field when checking out that says "Sending Address". The user could put in the address they intend to send the funds from, and this will allow you to receive all funds to a single address and still know who sent what.
The only problem with this is some wallets don't support selecting an output address. If you do this, you might put a warning, "Make sure that you are sending from the Sending Address you filled out in the checkout process or we won't be able to associate your payment with your order."