As it turned out, payment methods would not really suit our needs.
The restriction should rather be based on a per-user-basis and not on zones.
Therefore, I created an own Joomla module that checks for the current currency and compares it with a custom user field:
<?php
// this script makes sure that each customer sees his currency only
// Niklaus Messerli, Sep 2012
//don't allow other scripts to grab and execute our file
defined('_JEXEC') or die('Direct Access to this location is not allowed.');
$myDatabase = JFactory::getDBO();
// get the allowed currency for the current user
// replace this with your own custom field ⬇ (should contain ISO 4217 currency code)
$userCurrency = hikashop_loadUser(1)->user_currency;
if(!empty($userCurrency)){
$query = "SELECT * FROM #__hikashop_currency WHERE `currency_code`='".$userCurrency."'";
$myDatabase->setQuery($query);
$result = $myDatabase->query();
$currencyRow = $myDatabase->loadObject();
// check if allowed currency and set currency are the same
if($currencyRow->currency_id != hikashop_getCurrency()){
// if not, set the currency accordingly
$myApp =& JFactory::getApplication();
$myApp->setUserState( HIKASHOP_COMPONENT.'.currency_id', $currencyRow->currency_id );
if(isset($_SERVER["REQUEST_URI"])){
$requestUri = $_SERVER["REQUEST_URI"];
}else{
$requestUri = $_SERVER['PHP_SELF'];
if (!empty($_SERVER['QUERY_STRING'])) $requestUri = rtrim($requestUri,'/').'?'.$_SERVER['QUERY_STRING'];
}
$redirectUrl = (hikashop_isSSL() ? 'https://' : 'http://').$_SERVER["HTTP_HOST"].$requestUri;
$myApp->redirect($redirectUrl);
echo 'Your login was successful. Please wait while you\'re being redirected...';
}
} // if no currency is defined, simply stay with default currency
?>
No bugs turned up so far...