On a technical level, PayPal Express checkout works like this:
- customer clicks the EC button
- your store talks to PayPal to request a token for the entire set of following communications:
- that token is transmitted along with the redirect to have the customer login to paypal
- then when the customer returns to your store, your store uses that same token to ask for the customer's name and email etc
- then when the customer finally confirms the final payment amount on your store (after shipping, coupons, etc), that token is used to tell PayPal to charge the specified amount.
Without that token, none of this can occur.
So, if the token isn't being created because your store isn't able to talk to PayPal for either some coding reason (out of date code, or a bug in customized code), or some technical (SSL or server communications) reason, then the error you quoted will occur.
I don't at all mean to "pass the buck", but my head's been in the v1.5.5 code for quite awhile, and v154 before that, and ... etc. v151 was a long time ago. And PayPal has made a number of changes, and also the whole web industry has been making aggressive changes around SSL which PayPal has been adapting to.
So, I'm strongly inclined to ask you to test the same situation using a v155 site, while still being aware that v155 is currently beta code.
(Many of the changes in the v155 PayPal code were inspired from lat9's plugin: PayPal Express Checkout Using NVP 84.0 ... so there might be some value in exploring that to see if it helps bridge the gap of the older code you're using)