To answer the easy question first... you don't really need to disable the weight. Just set it to 0 and make sure the box is not checked that says "Product and its derivatives are shippable." If you do these, you won't see the shipping panes in checkout.
Regarding payment methods by country, this will be harder to achieve. As you've found out, there's no way to handle this in core. If you were to write a custom module to do it, you'd have two options:
- Make it like a regular payment method and just put in its description that it is only valid for people in the EU. Then you can use hook_form_alter() to run some code when the checkout review form is being loaded (see my free order contrib for an example). It's easy to check the country then, since you'll have an order object to work with. If they selected the payment method when they shouldn't have, give them an error message and send them back to the checkout form.
- Add some custom JS that hides the payment method option by default but adds an onchange function to the country select boxes. When someone chooses a country in the EU, use JS to show that selection. You'll still want to combine this with checking the country in PHP like I described above to make sure no one cheats.


Joined: 08/07/2007