initial import
[Business-OnlinePayment-PPIPayMover.git] / lib / Business / OnlinePayment / PPIPayMover / TransactionResponse.pm
1 use strict;\r
2 package Business::OnlinePayment::PPIPayMover::TransactionResponse;\r
3 use Business::OnlinePayment::PPIPayMover::constants;\r
4 1;\r
5 \r
6 sub new {\r
7   my $class = shift;\r
8   my @param = @_;\r
9   my $paramNo = @param;\r
10   my $self = {};\r
11   bless $self, $class;\r
12   \r
13   $self->{strError} = "";\r
14   $self->{iRetVal} = undef;\r
15   $self->{iResponseCode} = undef;\r
16   $self->{strResponseCode} = undef;\r
17   $self->{strResponseCodeText} = undef;\r
18   $self->{strTimeStamp} = undef;\r
19   $self->{bRetryRecommended} = undef;\r
20   \r
21   \r
22 # constructor for only one or two string arguement\r
23   if ($paramNo == 1 || $paramNo == 2) {\r
24     my $InString = shift;\r
25     my $prefix = "";\r
26     \r
27     if($paramNo == 2){\r
28         $prefix = shift;\r
29     }\r
30     \r
31     if ($$InString eq "") {\r
32       $self->{strError} .=  "Empty response string";\r
33       $self->{iRetVal} = 0;\r
34       return $self;\r
35     }\r
36     my @tmp;\r
37     @tmp = split(/\n/, $$InString);\r
38         \r
39     my $name;\r
40     my $value;\r
41     foreach (@tmp) {\r
42     \r
43       # Anything after the first = is part\r
44       # of the value (including other ='s)\r
45       ($name, $value) = split(/=/, $_, 2);\r
46       \r
47       if (index($name, "<") == 0) {\r
48         $self->{strError} .= "Server not available";\r
49         $self->{iRetVal} = 0;\r
50         \r
51         $self->{iResponseCode} = TRANSACTION_SERVER_ERROR;\r
52         $self->{strResponseCode} = "".$self->{iResponseCode};\r
53         $self->{strResponseCodeText} = "The Transaction Server is currently not available";\r
54         return $self;\r
55       }\r
56 \r
57       if ($name eq $prefix."response_code") {\r
58         \r
59         if($value.""  eq "0" || $value."" eq "") {\r
60           $self->{strError} .= "Invalid response code";\r
61           $self->{iRetVal} = 0;\r
62           return $self;\r
63         }\r
64         else  {\r
65           $self->{strResponseCode} = $value;\r
66           $self->{iResponseCode} = 1 * $value;\r
67         }\r
68       }\r
69       elsif ($name eq $prefix."response_code_text"){\r
70         $self->{strResponseCodeText} = $value;\r
71       }\r
72       elsif ($name eq $prefix."time_stamp") {\r
73         $self->{strTimeStamp} = $value;\r
74       }\r
75       elsif ($name eq $prefix."retry_recommended") {\r
76         if ($value eq "true") {\r
77           $self->{bRetryRecommended} = 1;\r
78         }\r
79         elsif ($value eq "false") {\r
80           $self->{bRetryRecommended} = 0;\r
81         }\r
82         else {\r
83           $self->{strError} .= "invalid retry flag";\r
84           return $self;\r
85         }\r
86       }\r
87       else {\r
88         $self->{strError} .= "Invalid data name: ";\r
89       }\r
90     }\r
91   }\r
92   \r
93 # constructor for 4 arguements. More arguements are ignored\r
94 # (1) ResponseCode(integer), (2) ResponseCodeText(string), (3) TimeStamp(string),\r
95 # (4) RetryRecommended(bool: 1 or 0  in the form of integer)\r
96   \r
97   elsif ($paramNo >= 4) {\r
98     my ($iResponseCode, $strResponseCodeText, $strTimeStamp, $bRetryRecommended) = @param[0..3];\r
99     if (!defined($iResponseCode) || $iResponseCode < 1 || !defined($strResponseCodeText) ||\r
100       !defined($strTimeStamp) || !defined($bRetryRecommended)) {\r
101       $self->{strError} .= "Wrong parameter";\r
102       return $self;\r
103     }\r
104     $self->{iResponseCode} = $iResponseCode;\r
105     $self->{strResponseCode} = "".$iResponseCode;\r
106     $self->{strResponseCodeText} = $strResponseCodeText;\r
107     $self->{strTimeStamp} = $strTimeStamp;\r
108     $self->{bRetryRecommended} = $bRetryRecommended;\r
109   }\r
110   else {\r
111     $self->{strError} .= "Parameter number is only $paramNo and more are needed";\r
112     return $self;\r
113   }\r
114   return $self;\r
115 }\r
116 \r
117 \r
118 sub GetError {\r
119   my $self = shift;\r
120   $self->{strError};\r
121 }\r
122 sub GetResponseCode {\r
123   my $self = shift;\r
124   $self->{iResponseCode};\r
125 }\r
126 \r
127 sub GetResponseCodeStrVal {\r
128   my $self = shift;\r
129   $self->{strResponseCode};\r
130 }\r
131 \r
132 sub GetResponseCodeText{\r
133   my $self = shift;\r
134   $self->{strResponseCodeText};\r
135 }\r
136 \r
137 sub GetTimeStamp {\r
138   my $self = shift;\r
139   $self->{strTimeStamp};\r
140 }\r
141 \r
142 sub GetRetryRecommended {\r
143   my $self = shift;\r
144   $self->{bRetryRecommended};\r
145 }\r
146 \r
147 \r
148 sub WriteResponse {\r
149   my $self = shift;\r
150   my $outString = shift;\r
151   \r
152   $self->{strResponseCodeText} =~ tr/\n/ /;\r
153   $self->{strTimeStamp} =~ tr/\n/ /;\r
154   $$outString .= "response_code=";\r
155   $$outString .= $self->{strResponseCode};\r
156   $$outString .= "\n";\r
157   $$outString .= "response_code_text=";\r
158   $$outString .= $self->{strResponseCodeText};\r
159   $$outString .= "\n";\r
160   $$outString .= "time_stamp=";\r
161   $$outString .= $self->{strTimeStamp};\r
162   $$outString .= "\n";\r
163   \r
164   if ($self->{bRetryRecommended}) {\r
165     $$outString .= "retry_recommended=true\n";\r
166   }\r
167   else {\r
168     $$outString .= "retry_recommended=false\n";\r
169   }\r
170   return CCR_NO_ERROR;\r
171 }\r