Hi Simon,
Express Checkout (EC) is still very flexible. The easiest way to work with this solution is to look at where you ask for data. If you ask for data up front such as the zip code, you can still cache the cart and pass the data using the token as the identifier for the user.
So when you do SetExpressCheckout, you get a token back in the response, cache the cart to a database or session cache and send the user to PayPal. The buyer will do what they need to do at PayPal and come back to your site where you do a call for GetExpressCheckout. Again, you have the token to match the cart data to the user. You can then present all of the transaction data and give your buyer the option to use a gift certificate or change the address (and recalculate the shipping) or complete the payment.
Another method is to not ask for the shipping location up front but send PayPal buyers to PayPal and use the address they select from their PayPal account. On the GetExpressCheckout, you can calculate shipping based on the zip code or shipping address returned to you.
PayPal_Cory
Developer Technical Support
PayPal, an eBay Company
http://paypal.com/pdn
:: Any code samples provided are given expressly for demonstration purposes. ::
:: Use at your own risk ::