I don't blame you. The interface is terrible and has gone away in MiniVend 4.
The best way to do this is to define a UserTag and use it as the subroutine
method. For example, in the flycat demo (or in the MiniVend 4 usertag/
directory) you will see a UserTag:
UserTag ups-query Order mode origin zip weight country
UserTag ups-query Routine <<EOR
sub {
my( $mode, $origin, $zip, $weight, $country) = @_;
BEGIN {
eval {
require Business::UPS;
import Business::UPS;
};
};
$country = uc $country;
$country = undef if $country eq 'US';
my ($shipping, $zone, $error) =
getUPS( $mode, $origin, $zip, $weight, $country);
if($error) {
$Vend::Session->{ship_message} .= " $mode: $error";
return 0;
}
return $shipping;
}
EOR
This is called via entries in shipping.asc:
GNDRES Ground Residential weight 0 150 f [ups-query
origin="[dv origin_zip]"
zip="[default zip 98366]"
country="[default country US]"
mode="GNDRES" weight="@@TOTAL@"
] [dv ups_adder]
NOTE: The above should be all on one line, or you need to escape the newline with a \.
This is very flexible, but you can make the call much less complex if you do the parameter checks and substitutions in your own routine (i.e. read the value of $::Values->{country} or $Values->{country} instead of passing a parameter).