
com.global.api.network.entities.nts.NtsAuthSaleCreditRequest Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of globalpayments-sdk Show documentation
Show all versions of globalpayments-sdk Show documentation
API for processing payments through Global Payments
The newest version!
package com.global.api.network.entities.nts;
import com.global.api.builders.TransactionBuilder;
import com.global.api.entities.EncryptionData;
import com.global.api.entities.enums.*;
import com.global.api.entities.exceptions.BatchFullException;
import com.global.api.network.abstractions.IBatchProvider;
import com.global.api.network.entities.NtsObjectParam;
import com.global.api.network.enums.NTSCardTypes;
import com.global.api.network.enums.OperatingEnvironment;
import com.global.api.paymentMethods.*;
import com.global.api.utils.MessageWriter;
import com.global.api.utils.NtsUtils;
import com.global.api.utils.StringUtils;
import lombok.Getter;
import lombok.Setter;
public class NtsAuthSaleCreditRequest implements INtsRequestMessage {
StringBuilder maskedRequest = new StringBuilder("");
@Getter @Setter
String accNo;
@Getter @Setter
String expDate;
@Getter @Setter
String trackData;
EncryptionData encryptionData = null;
private static final String GROUP_SEPARATOR = "\u001D" ;
private static final String EMPTY_STRING = " ";
private static final String WEX_FALLBACK="FALLBACK";
private static final String FALLBACK_99="\\99\\FALLBACK2";
@Override
public MessageWriter setNtsRequestMessage(NtsObjectParam ntsObjectParam) throws BatchFullException {
TransactionBuilder builder = ntsObjectParam.getNtsBuilder();
MessageWriter request = ntsObjectParam.getNtsRequest();
NTSCardTypes cardType = ntsObjectParam.getNtsCardType();
String userData = ntsObjectParam.getNtsUserData();
IBatchProvider batchProvider = ntsObjectParam.getNtsBatchProvider();
OperatingEnvironment operatingEnvironment = ntsObjectParam.getNtsAcceptorConfig().getOperatingEnvironment();
IPaymentMethod paymentMethod = builder.getPaymentMethod();
if (paymentMethod instanceof TransactionReference) {
paymentMethod = ((TransactionReference) builder.getPaymentMethod()).getOriginalPaymentMethod();
}
TransactionType transactionType = builder.getTransactionType();
boolean isExtendedUserData = false;
// Entry Method
if (paymentMethod instanceof ITrackData) {
ITrackData trackData = (ITrackData) builder.getPaymentMethod();
NTSEntryMethod entryMethod = NtsUtils.isAttendedOrUnattendedEntryMethod(trackData.getEntryMethod(), trackData.getTrackNumber(), operatingEnvironment);
request.addRange(entryMethod.getValue(), 1);
NtsUtils.log("Entry Method", entryMethod);
} else if (paymentMethod instanceof ICardData) {
EntryMethod method = NtsUtils.isEcommerceEntryMethod(builder);
if (method != null) {
NTSEntryMethod entryMethod = NtsUtils.isAttendedOrUnattendedEntryMethod(method, TrackNumber.Unknown, operatingEnvironment);
if (entryMethod != null){
request.addRange(entryMethod.getValue(), 1);
NtsUtils.log("Entry Method", entryMethod);
}
} else {
request.addRange(NTSEntryMethod.ManualAttended.getValue(), 1);
NtsUtils.log("Entry Method", NTSEntryMethod.ManualAttended);
}
} else if (paymentMethod instanceof GiftCard){
GiftCard card = (GiftCard) paymentMethod;
NTSEntryMethod entryMethod = NtsUtils.isAttendedOrUnattendedEntryMethod(card.getEntryMethod(), card.getTrackNumber(), operatingEnvironment);
request.addRange(entryMethod.getValue(), 1);
NtsUtils.log("Entry Method", entryMethod);
}
// Card Type
NtsUtils.log("CardType : ", cardType);
request.addRange(cardType.getValue(), 2);
// Account No & Expiration Date
if (paymentMethod instanceof ICardData) {
ICardData cardData = (ICardData) paymentMethod;
if(cardData instanceof IEncryptable && ((IEncryptable) paymentMethod).getEncryptionData() != null) {
encryptionData = ((IEncryptable) cardData).getEncryptionData();
}
String tokenizationData = cardData.getTokenizationData();
if(encryptionData != null ){
request.addRange(StringUtils.padRight(EMPTY_STRING, 19, ' '), 19);
request.addRange(StringUtils.padRight(cardData.getShortExpiry(),4,' '),4);
} else if ( tokenizationData != null) {
request.addRange(StringUtils.padRight(EMPTY_STRING, 19, ' '), 19);
request.addRange(StringUtils.padRight(EMPTY_STRING,4,' '),4);
} else {
String accNumber = cardData.getNumber();
request.addRange(StringUtils.padRight(accNumber, 19, ' '), 19);
NtsUtils.log("Account No", StringUtils.maskAccountNumber(accNumber));
this.setAccNo(accNumber);
StringUtils.setAccNo(accNumber);
request.addRange(cardData.getShortExpiry(), 4);
NtsUtils.log("Expiration Date", StringUtils.padRight("",4,'*'));
this.setExpDate(cardData.getShortExpiry());
StringUtils.setExpDate(cardData.getShortExpiry());
}
} else if (paymentMethod instanceof ITrackData) {
ITrackData trackData = (ITrackData) paymentMethod;
NTSEntryMethod entryMethod = NtsUtils.isAttendedOrUnattendedEntryMethod(trackData.getEntryMethod(), trackData.getTrackNumber(), operatingEnvironment);
if (NtsUtils.isNoTrackEntryMethods(entryMethod)) {
if (trackData instanceof IEncryptable && ((IEncryptable) paymentMethod).getEncryptionData() != null) {
encryptionData = ((IEncryptable) trackData).getEncryptionData();
}
if (encryptionData != null) {
String expiryDate = NtsUtils.prepareExpDateWithoutTrack(trackData.getExpiry());
request.addRange(StringUtils.padRight(EMPTY_STRING, 19, ' '), 19);
request.addRange(StringUtils.padRight( expiryDate, 4, ' '),4);
}
else {
String accNumber = trackData.getPan();
request.addRange(StringUtils.padRight(accNumber, 19, ' '), 19);
NtsUtils.log("Account No", StringUtils.maskAccountNumber(accNumber));
this.setAccNo(accNumber);
StringUtils.setAccNo(accNumber);
String expiryDate = NtsUtils.prepareExpDateWithoutTrack(trackData.getExpiry());
request.addRange(expiryDate, 4);
NtsUtils.log("Expiration Date", StringUtils.padRight("", 4, '*'));
this.setExpDate(expiryDate);
StringUtils.setExpDate(expiryDate);
}
}
}else if (paymentMethod instanceof GiftCard) {
GiftCard gift = (GiftCard) paymentMethod;
String tokenizationData = gift.getTokenizationData();
if (gift instanceof IEncryptable && ((IEncryptable) paymentMethod).getEncryptionData() != null) {
encryptionData = ((IEncryptable) gift).getEncryptionData();
}
if (encryptionData != null && gift.getTrackNumber()==null) {
request.addRange(StringUtils.padRight(EMPTY_STRING, 19, ' '), 19);
request.addRange(gift.getExpiry(), 4);
} else if(tokenizationData!= null && gift.getTrackNumber() == null){
request.addRange(StringUtils.padRight(EMPTY_STRING, 19, ' '), 19);
request.addRange(StringUtils.padRight(EMPTY_STRING,4,' '),4);
} else if (StringUtils.isNullOrEmpty(gift.getTrackData()) && encryptionData==null && tokenizationData == null) {
request.addRange(StringUtils.padRight(gift.getNumber(), 19, ' '), 19);
NtsUtils.log("Account No", StringUtils.maskAccountNumber(gift.getNumber()));
this.setAccNo(gift.getNumber());
StringUtils.setAccNo(gift.getNumber());
request.addRange(gift.getExpiry(), 4);
NtsUtils.log("Expiration Date", StringUtils.padRight("", 4,'*'));
this.setExpDate(gift.getExpiry());
StringUtils.setExpDate(gift.getExpiry());
}
}
// Amount
NtsUtils.log("Transaction Amount 1", StringUtils.toNumeric(builder.getAmount(), 6));
request.addRange(StringUtils.toNumeric(builder.getAmount(), 6), 6);
// Track 1 or Track 2 & Expanded User Data
if (paymentMethod instanceof ITrackData) {
ITrackData trackData = (ITrackData) builder.getPaymentMethod();
NTSEntryMethod entryMethod = NtsUtils.isAttendedOrUnattendedEntryMethod(trackData.getEntryMethod(), trackData.getTrackNumber(), operatingEnvironment);
if (!NtsUtils.isNoTrackEntryMethods(entryMethod)) {
if (trackData instanceof IEncryptable && ((IEncryptable) trackData).getEncryptionData() != null) {
encryptionData = ((IEncryptable) trackData).getEncryptionData();
}
if(encryptionData != null){
if (trackData.getTrackNumber().equals(TrackNumber.TrackOne)) {
// DE 45: Track 1 Data - LLVAR ans.. 76
request.addRange(StringUtils.padRight(EMPTY_STRING, 79, ' '), 79);
} else if (trackData.getTrackNumber().equals(TrackNumber.TrackTwo)) {
// DE 35: Track 2 Data - LLVAR ns.. 37
request.addRange(StringUtils.padRight(EMPTY_STRING, 40, ' '), 40);
}
}else{
if (trackData.getTrackNumber().equals(TrackNumber.TrackOne)) {
request.addRange(StringUtils.padRight(trackData.getValue(), 79, ' '), 79);
} else {
request.addRange(StringUtils.padRight(trackData.getValue(), 40, ' '), 40);
}
NtsUtils.log("Track 1 or Track 2 & Expanded User Data", StringUtils.maskTrackData(trackData.getValue(),trackData));
this.setTrackData(trackData.getValue());
StringUtils.setAccNo(trackData.getPan());
StringUtils.setExpDate(trackData.getExpiry());
StringUtils.setTrackData(trackData.getValue());
}
}
} else if (paymentMethod instanceof GiftCard) {
GiftCard gift = (GiftCard) paymentMethod;
if (gift instanceof IEncryptable && ((IEncryptable) gift).getEncryptionData() != null) {
encryptionData = ((IEncryptable) gift).getEncryptionData();
}
if(encryptionData != null && gift.getTrackNumber()!=null){
if (gift.getTrackNumber().equals(TrackNumber.TrackOne)) {
request.addRange(StringUtils.padRight(EMPTY_STRING, 79, ' '), 79);
} else {
request.addRange(StringUtils.padRight(EMPTY_STRING, 40, ' '), 40);
}
} else {
if (!StringUtils.isNullOrEmpty(gift.getTrackData())) {
if (gift.getTrackNumber().equals(TrackNumber.TrackOne)) {
request.addRange(StringUtils.padRight(gift.getValue(), 79, ' '), 79);
} else {
request.addRange(StringUtils.padRight(gift.getValue(), 40, ' '), 40);
}
NtsUtils.log("Gift card data: ", StringUtils.maskTrackData(gift.getValue()));
this.setTrackData(gift.getValue());
StringUtils.setAccNo(gift.getPan());
StringUtils.setExpDate(gift.getExpiry());
StringUtils.setTrackData(gift.getValue());
}
}
}
// Service code
if (paymentMethod instanceof CreditCardData) {
if (!StringUtils.isNullOrEmpty(builder.getServiceCode())) {
request.addRange(builder.getServiceCode(), 3);
NtsUtils.log("Service code", builder.getServiceCode());
} else {
request.addRange("000", 3);
NtsUtils.log("Service code", "000");
}
} else if (paymentMethod instanceof CreditTrackData) {
ITrackData trackData = (ITrackData) builder.getPaymentMethod();
NTSEntryMethod entryMethod = NtsUtils.isAttendedOrUnattendedEntryMethod(trackData.getEntryMethod(), trackData.getTrackNumber(), operatingEnvironment);
if (NtsUtils.isUserDataExpansionEntryMethod(entryMethod)) {
request.addRange("000", 3);
NtsUtils.log("Service code", "000");
}
}
// Authorization Response Code // Batch Number & Sequence Number
if (transactionType.equals(TransactionType.Sale)
&& !paymentMethod.getPaymentMethodType().equals(PaymentMethodType.Gift)) {
// Authorization Response Code
request.addRange(String.format("%2s", " "), 2);
int batchNumber = builder.getBatchNumber();
if (batchNumber == 0 && batchProvider != null) {
batchNumber = batchProvider.getBatchNumber();
}
// Batch Number
request.addRange(batchNumber, 2);
NtsUtils.log("Batch Number", String.valueOf(batchNumber));
int sequenceNumber = 0;
if (!builder.getTransactionType().equals(TransactionType.BatchClose)) {
sequenceNumber = builder.getSequenceNumber();
if (sequenceNumber == 0 && batchProvider != null) {
sequenceNumber = batchProvider.getSequenceNumber();
}
}
// Sequence Number
request.addRange(StringUtils.padLeft(sequenceNumber, 3, '0'), 3);
NtsUtils.log("Sequence Number", String.valueOf(sequenceNumber));
}
// Expanded User Data
if (paymentMethod instanceof ITrackData) {
ITrackData trackData = (ITrackData) builder.getPaymentMethod();
NTSEntryMethod entryMethod = NtsUtils.isAttendedOrUnattendedEntryMethod(trackData.getEntryMethod(), trackData.getTrackNumber(), operatingEnvironment);
if ((!StringUtils.isNullOrEmpty(builder.getTagData()) && (!builder.getTagData().contains(FALLBACK_99)&& (!builder.getTagData().contains(WEX_FALLBACK))))
|| NtsUtils.isUserDataExpansionEntryMethod(entryMethod)) {
request.addRange("E", 1);
isExtendedUserData = true;
}
}
else if (paymentMethod instanceof ICardData) {
EntryMethod method = NtsUtils.isEcommerceEntryMethod(builder);
if (method != null) {
NTSEntryMethod entryMethod = NtsUtils.isAttendedOrUnattendedEntryMethod(method, TrackNumber.Unknown, operatingEnvironment);
if (NtsUtils.isUserDataExpansionEntryMethod(entryMethod) && !cardType.equals(NTSCardTypes.WexFleet)) {
request.addRange("E", 1);
NtsUtils.log("Expanded User Data","E");
isExtendedUserData = true;
}
}
}
// UserDataLength & UserData
if (isExtendedUserData) {
NtsUtils.log("USER DATA LENGTH", StringUtils.padLeft(userData.length(), 4, '0'));
request.addRange(StringUtils.padLeft(userData.length(), 4, '0'), 4);
} else {
NtsUtils.log("USER DATA LENGTH", StringUtils.padLeft(userData.length(), 3, '0'));
request.addRange(userData.length(), 3);
}
NtsUtils.log("USER DATA", userData);
request.addRange(StringUtils.padRight(userData, userData.length(), ' '), userData.length());
if(ntsObjectParam.getEncryptedData() != null) {
request.addRange(GROUP_SEPARATOR,1);
request.addRange( ntsObjectParam.getEncryptedData(), 336);
NtsUtils.log("3DE Tag DATA", ntsObjectParam.getEncryptedData());
} else if(ntsObjectParam.getTokenData() != null){
request.addRange(GROUP_SEPARATOR,1);
request.addRange(ntsObjectParam.getTokenData(),216);
NtsUtils.log("Token Tag DATA", ntsObjectParam.getTokenData());
}
maskedRequest.append(request.getMessageRequest());
if (this.getTrackData() != null) {
int startIndex = maskedRequest.indexOf(this.getTrackData());
int stopIndex = startIndex + this.getTrackData().length();
maskedRequest.replace(startIndex, stopIndex, StringUtils.maskTrackData(this.getTrackData()));
}
if (this.getAccNo() != null) {
int startIndex1 = maskedRequest.indexOf(this.getAccNo());
int stopIndex1 = startIndex1 + this.getAccNo().length();
maskedRequest.replace(startIndex1, stopIndex1, StringUtils.maskAccountNumber(this.getAccNo()));
}
if (this.getExpDate() != null) {
int startIndex2 = maskedRequest.indexOf(this.getExpDate());
int stopIndex2 = startIndex2 + this.getExpDate().length();
maskedRequest.replace(startIndex2, stopIndex2, "****");
}
StringUtils.setMaskRequest(maskedRequest);
return request;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy