-
Notifications
You must be signed in to change notification settings - Fork 70
Expand file tree
/
Copy pathFraudProcessorResponse.php
More file actions
243 lines (227 loc) · 7.69 KB
/
Copy pathFraudProcessorResponse.php
File metadata and controls
243 lines (227 loc) · 7.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
<?php
/**
* The FraudProcessorResponse object.
*
* @package WooCommerce\PayPalCommerce\ApiClient\Entity
*/
declare(strict_types=1);
namespace WooCommerce\PayPalCommerce\ApiClient\Entity;
/**
* Class FraudProcessorResponse
*/
class FraudProcessorResponse {
/**
* The AVS response code.
*
* @var string
*/
protected string $avs_code;
/**
* The CVV response code.
*
* @var string
*/
protected string $cvv2_code;
/**
* The processor response code (e.g. 9500, 9100).
*
* @var string
*/
protected string $response_code;
/**
* FraudProcessorResponse constructor.
*
* @param string|null $avs_code The AVS response code.
* @param string|null $cvv2_code The CVV response code.
* @param string|null $response_code The processor response code.
*/
public function __construct( ?string $avs_code, ?string $cvv2_code, ?string $response_code = null ) {
$this->avs_code = (string) $avs_code;
$this->cvv2_code = (string) $cvv2_code;
$this->response_code = (string) $response_code;
}
/**
* Returns the AVS response code.
*
* @return string
*/
public function avs_code(): string {
return $this->avs_code;
}
/**
* Returns the CVV response code.
*
* @return string
*/
public function cvv_code(): string {
return $this->cvv2_code;
}
/**
* Returns the processor response code.
*
* @return string
*/
public function response_code(): string {
return $this->response_code;
}
/**
* Returns the object as array.
*
* @return array
*/
public function to_array(): array {
return array(
'avs_code' => $this->avs_code(),
'cvv2_code' => $this->cvv_code(),
'response_code' => $this->response_code(),
);
}
/**
* Retrieves the AVS (Address Verification System) code messages based on the AVS response code.
*
* Provides human-readable descriptions for various AVS response codes
* and returns the corresponding message for the given code.
*
* @return string The AVS response code message. If the code is not found, an error message is returned.
*/
public function get_avs_code_message(): string {
if ( ! $this->avs_code() ) {
return '';
}
$messages = array(
/* Visa, Mastercard, Discover, American Express */
'A' => 'A: Address - Address only (no ZIP code)',
'B' => 'B: International "A" - Address only (no ZIP code)',
'C' => 'C: International "N" - None. The transaction is declined.',
'D' => 'D: International "X" - Address and Postal Code',
'E' => 'E: Not allowed for MOTO (Internet/Phone) transactions - Not applicable. The transaction is declined.',
'F' => 'F: UK-specific "X" - Address and Postal Code',
'G' => 'G: Global Unavailable - Not applicable',
'I' => 'I: International Unavailable - Not applicable',
'M' => 'M: Address - Address and Postal Code',
'N' => 'N: No - None. The transaction is declined.',
'P' => 'P: Postal (International "Z") - Postal Code only (no Address)',
'R' => 'R: Retry - Not applicable',
'S' => 'S: Service not Supported - Not applicable',
'U' => 'U: Unavailable / Address not checked, or acquirer had no response. Service not available.',
'W' => 'W: Whole ZIP - Nine-digit ZIP code (no Address)',
'X' => 'X: Exact match - Address and nine-digit ZIP code)',
'Y' => 'Y: Yes - Address and five-digit ZIP',
'Z' => 'Z: ZIP - Five-digit ZIP code (no Address)',
/* Maestro */
'0' => '0: All the address information matched.',
'1' => '1: None of the address information matched. The transaction is declined.',
'2' => '2: Part of the address information matched.',
'3' => '3: The merchant did not provide AVS information. Not processed.',
'4' => '4: Address not checked, or acquirer had no response. Service not available.',
);
/**
* Psalm suppress
*
* @psalm-suppress PossiblyNullArrayOffset
* @psalm-suppress PossiblyNullArgument
*/
return $messages[ $this->avs_code() ] ?? sprintf( '%s: Error', $this->avs_code() );
}
/**
* Retrieves the CVV2 code message based on the CVV code provided.
*
* This method maps CVV response codes to their corresponding descriptive messages.
*
* @return string The descriptive message corresponding to the CVV2 code, or a formatted error message if the code is unrecognized.
*/
public function get_cvv2_code_message(): string {
if ( ! $this->cvv_code() ) {
return '';
}
$messages = array(
/* Visa, Mastercard, Discover, American Express */
'E' => 'E: Error - Unrecognized or Unknown response',
'I' => 'I: Invalid or Null',
'M' => 'M: Match or CSC',
'N' => 'N: No match',
'P' => 'P: Not processed',
'S' => 'S: Service not supported',
'U' => 'U: Unknown - Issuer is not certified',
'X' => 'X: No response / Service not available',
/* Maestro */
'0' => '0: Matched CVV2',
'1' => '1: No match',
'2' => '2: The merchant has not implemented CVV2 code handling',
'3' => '3: Merchant has indicated that CVV2 is not present on card',
'4' => '4: Service not available',
);
/**
* Psalm suppress
*
* @psalm-suppress PossiblyNullArrayOffset
* @psalm-suppress PossiblyNullArgument
*/
return $messages[ $this->cvv_code() ] ?? sprintf( '%s: Error', $this->cvv_code() );
}
/**
* Returns the human-readable description for the processor response code.
*
* @return string
*/
public function get_response_code_message(): string {
if ( ! $this->response_code() ) {
return '';
}
$messages = array(
'0000' => '0000: Approved',
'00N7' => '00N7: Decline CVV2 Failure',
'0100' => '0100: Refer to card issuer',
'0390' => '0390: No credit account',
'0500' => '0500: Do not honor',
'0580' => '0580: Transaction not permitted to cardholder',
'0800' => '0800: Bad response reversal amount',
'0880' => '0880: Cryptographic failure',
'0890' => '0890: Unavailable',
'0960' => '0960: System malfunction',
'1000' => '1000: Partial Approval',
'10BR' => '10BR: 3DS Authentication Failure',
'1300' => '1300: Invalid data format',
'1310' => '1310: Invalid amount',
'1312' => '1312: Invalid transaction card issuer acquirer',
'1317' => '1317: Invalid capture date',
'1320' => '1320: Invalid currency code',
'1330' => '1330: Invalid account',
'1335' => '1335: Invalid account type',
'1340' => '1340: Invalid terminal id',
'1350' => '1350: Invalid merchant/terminal city',
'1360' => '1360: Bad or malformed request',
'1370' => '1370: Issuer unavailable',
'1380' => '1380: Updates not allowed',
'1382' => '1382: Bad CVV2',
'1384' => '1384: Similar transaction recently submitted',
'1390' => '1390: Trace number error',
'1393' => '1393: Transaction amount range error',
'5100' => '5100: Generic Decline',
'5110' => '5110: CVV2 Failure',
'5120' => '5120: Insufficient funds',
'5130' => '5130: Invalid PIN',
'5140' => '5140: Card closed',
'5150' => '5150: Pick up card (fraud)',
'5160' => '5160: Unauthorized user',
'5170' => '5170: Card blocked',
'5180' => '5180: Declined by the issuer',
'5200' => '5200: Account closed',
'5400' => '5400: Expired card',
'5910' => '5910: Issuer not available, return to issuer',
'5920' => '5920: Issuer not available, return to issuer',
'5930' => '5930: Card not activated',
'6300' => '6300: Account blocked',
'9100' => '9100: Declined, Please Retry',
'9500' => '9500: Suspected Fraud',
'9510' => '9510: Security Violation',
'9520' => '9520: Lost or Stolen Card',
'9530' => '9530: Hold - Call issuer',
'9540' => '9540: Refused Card',
'9600' => '9600: Unacceptable PIN - Transaction Declined - Retry',
'PCNF' => 'PCNF: Purchase Confirmation Not Received',
'PCOM' => 'PCOM: Purchase Confirmation Received',
);
return $messages[ $this->response_code() ] ?? sprintf( '%s: Unknown response code', $this->response_code() );
}
}