summaryrefslogtreecommitdiff
path: root/lib/Business/OnlinePayment/PPIPayMover/TransactionResponse.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Business/OnlinePayment/PPIPayMover/TransactionResponse.pm')
-rw-r--r--lib/Business/OnlinePayment/PPIPayMover/TransactionResponse.pm171
1 files changed, 171 insertions, 0 deletions
diff --git a/lib/Business/OnlinePayment/PPIPayMover/TransactionResponse.pm b/lib/Business/OnlinePayment/PPIPayMover/TransactionResponse.pm
new file mode 100644
index 0000000..4056864
--- /dev/null
+++ b/lib/Business/OnlinePayment/PPIPayMover/TransactionResponse.pm
@@ -0,0 +1,171 @@
+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;
+}