/usr/local/CPAN/Business-OnlinePayment-PPIPayMover/Business/OnlinePayment/PPIPayMover/TransactionResponse.pm
use strict;
package Business::OnlinePayment::PPIPayMover::TransactionResponse;
use Business::OnlinePayment::PPIPayMover::constants;
1;
sub new {
my $class = shift;
my @param = @_;
my $paramNo = @param;
my $self = {};
bless $self, $class;
$self->{strError} = "";
$self->{iRetVal} = undef;
$self->{iResponseCode} = undef;
$self->{strResponseCode} = undef;
$self->{strResponseCodeText} = undef;
$self->{strTimeStamp} = undef;
$self->{bRetryRecommended} = undef;
# constructor for only one or two string arguement
if ($paramNo == 1 || $paramNo == 2) {
my $InString = shift;
my $prefix = "";
if($paramNo == 2){
$prefix = shift;
}
if ($$InString eq "") {
$self->{strError} .= "Empty response string";
$self->{iRetVal} = 0;
return $self;
}
my @tmp;
@tmp = split(/\n/, $$InString);
my $name;
my $value;
foreach (@tmp) {
# Anything after the first = is part
# of the value (including other ='s)
($name, $value) = split(/=/, $_, 2);
if (index($name, "<") == 0) {
$self->{strError} .= "Server not available";
$self->{iRetVal} = 0;
$self->{iResponseCode} = TRANSACTION_SERVER_ERROR;
$self->{strResponseCode} = "".$self->{iResponseCode};
$self->{strResponseCodeText} = "The Transaction Server is currently not available";
return $self;
}
if ($name eq $prefix."response_code") {
if($value."" eq "0" || $value."" eq "") {
$self->{strError} .= "Invalid response code";
$self->{iRetVal} = 0;
return $self;
}
else {
$self->{strResponseCode} = $value;
$self->{iResponseCode} = 1 * $value;
}
}
elsif ($name eq $prefix."response_code_text"){
$self->{strResponseCodeText} = $value;
}
elsif ($name eq $prefix."time_stamp") {
$self->{strTimeStamp} = $value;
}
elsif ($name eq $prefix."retry_recommended") {
if ($value eq "true") {
$self->{bRetryRecommended} = 1;
}
elsif ($value eq "false") {
$self->{bRetryRecommended} = 0;
}
else {
$self->{strError} .= "invalid retry flag";
return $self;
}
}
else {
$self->{strError} .= "Invalid data name: ";
}
}
}
# constructor for 4 arguements. More arguements are ignored
# (1) ResponseCode(integer), (2) ResponseCodeText(string), (3) TimeStamp(string),
# (4) RetryRecommended(bool: 1 or 0 in the form of integer)
elsif ($paramNo >= 4) {
my ($iResponseCode, $strResponseCodeText, $strTimeStamp, $bRetryRecommended) = @param[0..3];
if (!defined($iResponseCode) || $iResponseCode < 1 || !defined($strResponseCodeText) ||
!defined($strTimeStamp) || !defined($bRetryRecommended)) {
$self->{strError} .= "Wrong parameter";
return $self;
}
$self->{iResponseCode} = $iResponseCode;
$self->{strResponseCode} = "".$iResponseCode;
$self->{strResponseCodeText} = $strResponseCodeText;
$self->{strTimeStamp} = $strTimeStamp;
$self->{bRetryRecommended} = $bRetryRecommended;
}
else {
$self->{strError} .= "Parameter number is only $paramNo and more are needed";
return $self;
}
return $self;
}
sub GetError {
my $self = shift;
$self->{strError};
}
sub GetResponseCode {
my $self = shift;
$self->{iResponseCode};
}
sub GetResponseCodeStrVal {
my $self = shift;
$self->{strResponseCode};
}
sub GetResponseCodeText{
my $self = shift;
$self->{strResponseCodeText};
}
sub GetTimeStamp {
my $self = shift;
$self->{strTimeStamp};
}
sub GetRetryRecommended {
my $self = shift;
$self->{bRetryRecommended};
}
sub WriteResponse {
my $self = shift;
my $outString = shift;
$self->{strResponseCodeText} =~ tr/\n/ /;
$self->{strTimeStamp} =~ tr/\n/ /;
$$outString .= "response_code=";
$$outString .= $self->{strResponseCode};
$$outString .= "\n";
$$outString .= "response_code_text=";
$$outString .= $self->{strResponseCodeText};
$$outString .= "\n";
$$outString .= "time_stamp=";
$$outString .= $self->{strTimeStamp};
$$outString .= "\n";
if ($self->{bRetryRecommended}) {
$$outString .= "retry_recommended=true\n";
}
else {
$$outString .= "retry_recommended=false\n";
}
return CCR_NO_ERROR;
}