If you are getting the "Your shopping cart is empty" error while checking out through PayPal then it could be for one of the following reasons:
1. The PHP Session on your server is not working correctly.
2. Your site URL and WordPress blog URL are not specified the same in the General settings of WordPress.
Now let's have a quick explanation of the two issues and how to identify them:
1. PHP Session Issue
If you are having a PHP session issue on your site then the plugin won't be able to keep the item information in the session variable (even if you see the items are being added). So anyone clicking on the payment button and checking out through PayPal will get the error as the shopping cart could not submit any item information to the gateway.
How to identify if you are having this issue?
a) Add a product to the shopping cart.
b) Check to make sure that the item appears in the cart.
c) Now, navigate away from this page and go to another post or page.
d) Navigate back to the page where you have the shopping cart displaying the items in your cart.
e) Can you still see the items in the shopping cart?
If you can't then it means the item information got lost which indicates that you may have a PHP session not working related issue. The shopping cart stores the item information in the PHP session so if your session is working correctly then the items shouldn't have disappeared.
How to Solve this issue?
Simply contacting your hosting provider should be good enough to get your PHP session issue fixed. Here is another post that might be of some help with this:
http://www.tipsandtricks-hq.com/forum/topic/php-session-not-working-correctly
You can easily point out this issue by navigating away from the page (after adding a product in the cart) and again coming back to the same page. If the item is still not in the cart means you have the PHP session issue. You need to contact you hosting provider to fix this.
2. Incorrect server setup
Say, you have specified the following in the "General Settings" of your WordPress dashboard:
Site URL: http://www.example.com
WordPress blog URL: http://example.com
Notice that one is missing the "www"? That's the problem. Both of them should use the same value. So you can either use "http://example.com" in both fields or use "http://www.example.com" in both fields (Just don't mix them).
The following URL will explain this in full details as to why this is an issue: