with 'Business::BatchPayment::Processor';
with 'Business::BatchPayment::TestMode';
+use Encode;
+
# could have some validation on all of these
has [ qw(merchantID terminalID bin industryType login password) ] => (
is => 'ro',
OUTPUT => \$output,
DATA_MODE => 1,
DATA_INDENT => 2,
+ ENCODING => 'utf-8',
);
$self->format_header($batch, $xml);
my $count = 1;
my ($self, $batch, $xml) = @_;
my $num_items = $batch->count;
+ $xml->xmlDecl();
$xml->startTag('transRequest', RequestCount => $num_items + 1);
$xml->startTag('batchFileID');
$xml->dataElement(userID => $self->login);
}
push @order, (
avsZip => $item->zip,
- avsAddress1 => substr($item->address, 0, 30),
- avsAddress2 => substr($item->address2, 0, 30),
- avsCity => substr($item->city, 0, 20),
- avsState => substr($item->state, 0, 2),
- avsName => substr($item->first_name. ' '. $item->last_name, 0, 30),
+ avsAddress1 => bytes_substr($item->address, 0, 30),
+ avsAddress2 => bytes_substr($item->address2, 0, 30),
+ avsCity => bytes_substr($item->city, 0, 20),
+ avsState => bytes_substr($item->state, 0, 2),
+ avsName => bytes_substr($item->first_name. ' '. $item->last_name, 0, 30),
( $paymentech_countries{ $item->country }
? ( avsCountryCode => $item->country )
: ()
}
}
+# internal use
+
+sub bytes_substr {
+ my ($string, $offset, $length, $repl) = @_;
+ my $bytes = substr(
+ Encode::encode('utf8', $string),
+ $offset,
+ $length,
+ Encode::encode('utf8', $repl)
+ );
+ return Encode::decode('utf8', $bytes, Encode::FB_QUIET);
+}
+
=head1 AUTHOR
Mark Wells, C<< <mark at freeside.biz> >>