Address Verification Service
Address Verification Service (AVS) verifies cardholder address data with the issuing bank to minimize fraudulent transactions. AVS captures the billing address and ZIP code in the transaction then compares these with the cardholder’s ZIP code and billing address in the card issuer’s file.
Use AVS on manual keyed transactions to qualify for better interchange rates.
The AVS response enables the integrator to determine if transaction needs reversal.
Code Samples
CWS
Request
Property | Description |
---|---|
parameters JSONObject | required | All relevant parameters for AVS processing. |
avsFields JSONObject | optional | AVS Name Value Pairs Includes CARDHOLDER_ADDRESS (max length = 30 characters) and CARDHOLDER_ZIP (max length = 9 characters) |
cardEntryTypes string | required | Entry Method Valid value: MANUALLY_ENTERED |
Response
Property | Description |
---|---|
data JSONObject | Object holding various responses. |
avsResponse string | AVS Response Code Valid values: - A : Address matches - ZIP code does not match - B : Street address match - ZIP code does not match (international user) - C : Street address and postal code in wrong formats - D : Street address and postal code match (international user) - E : AVS error - F : Address does compare and 5-digit ZIP code does compare (UK only) - G : Service not supported by non-US issuer - I : Address information not verified by international user - M : Street address and postal code match (international user) - N : No match on address (street) or ZIP - O : No response sent - P : Postal codes match, street address not verified due to incompatible formats - R : Retry / System Unavailable / Timed Out - S : Service not supported by issuer - U : Address information is unavailable - W : 9-digit ZIP matches, address (street) does not match - X : Exact AVS match - Y : Address (street) and 5-digit ZIP match - Z : 5-digit ZIP matches, address (street) does not match |
cardEntryType string | Entry Mode Valid value: MANUALLY_ENTERED |
Example
Request
{
"method" : "startPaymentTransaction",
"requestId" : "1578283620",
"targetType" : "paymentGatewayConverge",
"version" : "1.0",
"parameters" : {
"paymentGatewayId" : "d5b9ea11-a9a7-4888-8458-2f609656579f",
"transactionType" : "SALE",
"tenderType" : "CARD",
.....
"avsFields" : {
"CARDHOLDER_ADDRESS" : "8985 Ridgeestone Ct",
"CARDHOLDER_ZIP" : "30076"
},
"cardEntryTypes" : [ "MANUALLY_ENTERED" ],
.....
}
}
Response
{
"requestId" : "1578283661",
"statusDetails" : "REQUEST_ACCEPTED",
"data" : {
"paymentGatewayCommand" : {
"completed" : true,
"eventQueue" : [ {
"timeStamp" : "1461595337785",
"statusDetails" : "CARD_READER_TRANSACTION_COMPLETED"
} ],
"chanId" : "31da7bbf-0d74-4244-b341-8911ac7cce71",
"paymentTransactionData" : {
"result" : "DECLINED",
"authCode" : null,
"resultMessage" : "DECLINED",
"date" : "Mon Apr 25 10:42:14 MST 2016",
"amountAuthorized" : {
"currencyCode" : "USD",
"value" : 6931
},
"avsResponse" : "Z",
"cardEntryType" : "MANUALLY_ENTERED",
...
Java
Request
private void setAVSFields(ECLTenderInterface cardTenderInterface,
GetCardTransactionPropertiesDialog cardTransactionPropertiesDialog)
{
String value;
if (null != (value = cardTransactionPropertiesDialog.useAVSAddress()))
cardTenderInterface.setAVSField(ECLAVSField.CARDHOLDER_ADDRESS, value);
if (null != (value = cardTransactionPropertiesDialog.useAVSZip()))
cardTenderInterface.setAVSField(ECLAVSField.CARDHOLDER_ZIP, value);
}
Response
@Override
public void transactionDidComplete(ECLTransactionInterface transaction, ECLTenderInterface tender, final ECLTransactionOutcome outcome)
{
if (outcome instanceof ECLCardTransactionOutcome)
{
ECLCardTransactionOutcome cardOutcome = (ECLCardTransactionOutcome)outcome;
if (cardOutcome.getAVSResponse() != null)
{
/* Do something with response. */
Objective-C
This is how you set the AVS feature.
// set AVS address or ZIP in card tender
[cardTender setAVSField:ECLAVS_CardholderAddress withValue:@"123 Main St"];
[cardTender setAVSField:ECLAVS_CardholderZip withValue:@"30312"];
// get AVS response
if (((ECLCardTransactionOutcome *)_theOutcome).avsResponse.length != 0) {
[NSString stringWithFormat:@"AVS response:%@\n", ((ECLCardTransactionOutcome *)_theOutcome).avsResponse];
}
C#
Request
PaymentArgs paymentArgs = new PaymentArgs();
...
/* Set AVS fields */
Dictionary<string, string> info = new Dictionary<string, string>();
info["CARDHOLDER_ADDRESS"] = tb_Address.Text;
info["CARDHOLDER_ZIP"] = tb_Zip.Text;
paymentArgs.avsFields = info;
Response
public void MyPaymentComplete(PaymentTransactionResults paymentResults)
{
PaymentTransactionData paymentData = paymentResults.PaymentTransactionData;
if (null != paymentData)
{
if (null != paymentData.avsResponse)
{
/* Do something with result */