X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=Paymentech.pm;h=9eec93503c27007e5499606d1c6d812611d4317e;hb=1667d469317704ae542a9b1f6fdc8e498e0eff59;hp=19277ccbb069960cb6f2fc334a61f8cbe74aa9d4;hpb=39c50bd135813d015fc2c0a3e6d3e9b57f3d7a96;p=Business-BatchPayment-Paymentech.git diff --git a/Paymentech.pm b/Paymentech.pm index 19277cc..9eec935 100644 --- a/Paymentech.pm +++ b/Paymentech.pm @@ -65,6 +65,8 @@ use Moose; 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', @@ -108,6 +110,7 @@ sub format_request { OUTPUT => \$output, DATA_MODE => 1, DATA_INDENT => 2, + ENCODING => 'utf-8', ); $self->format_header($batch, $xml); my $count = 1; @@ -127,6 +130,7 @@ sub format_header { 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); @@ -167,11 +171,11 @@ sub format_item { } 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 ) : () @@ -285,6 +289,20 @@ sub parse_item { $item; } +# 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); +} + + package Business::BatchPayment::Paymentech::Transport; use File::Temp qw( tempdir );