Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions Example/Tests/HpsJsonDocTests.m
Original file line number Diff line number Diff line change
Expand Up @@ -46,4 +46,12 @@ - (void) test_ParseNested
XCTAssertTrue([value isEqualToString:@"value3"]);
}

- (void) test_GetValueAsString
{
JsonDoc* doc = [[JsonDoc alloc] initWithDictionary:@{@"number": 1234567890}];
XCTAssertTrue([doc has:@"number"]);
NSString* value = (NSString*)[doc getValueAsString:@"number"];
XCTAssertTrue([value isEqualToString:@"1234567890"]);
}

@end
136 changes: 68 additions & 68 deletions Pod/Classes/Terminals/UPA/Models/HpaUpaResponse.m
Original file line number Diff line number Diff line change
Expand Up @@ -24,124 +24,124 @@ -(id)init{
-(id)initWithJSONDoc:(JsonDoc*)response
{
self = [self init];
self.transactionType = (NSString*)[response getValue:@"response"];
self.transactionType = [response getValueAsString:@"response"];

JsonDoc* cmdData = [response get:@"data"];

if ([cmdData has:@"EcrId"]) {
self.ecrId = (NSString*)[cmdData getValue:@"EcrId"];
self.ecrId = [cmdData getValueAsString:@"EcrId"];
}

if ([cmdData has:@"requestId"]) {
self.requestId = (NSString*)[cmdData getValue:@"requestId"];
self.requestId = [cmdData getValueAsString:@"requestId"];
}


if ([cmdData has:@"cmdResult"]) {
JsonDoc* cmdResult = [cmdData get:@"cmdResult"];

if ([cmdData has:@"cmdResult"]) {
self.result = (NSString*)[cmdResult getValue:@"result"];
self.status = (NSString*)[cmdResult getValue:@"result"];
self.deviceResponseCode = (NSString*)[cmdResult getValue:@"errorCode"];
self.deviceResponseMessage = (NSString*)[cmdResult getValue:@"errorMessage"];
self.result = [cmdResult getValueAsString:@"result"];
self.status = [cmdResult getValueAsString:@"result"];
self.deviceResponseCode = [cmdResult getValueAsString:@"errorCode"];
self.deviceResponseMessage = [cmdResult getValueAsString:@"errorMessage"];
}
}

if (![cmdData has:@"data"]) {
return self;
}

JsonDoc* data = [cmdData get:@"data"];
self.multipleMessage = (NSString*)[data getValue:@"multipleMessage"];
self.deviceSerialNumber = (NSString*)[data getValue:@"deviceSerialNum"];
self.upaAppVersion = (NSString*)[data getValue:@"appVersion"];
self.upaOsVersion = (NSString*)[data getValue:@"OsVersion"];
self.upaEmvSdkVersion = (NSString*)[data getValue:@"EmvSdkVersion"];
self.upaContactlessSdkVersion = (NSString*)[data getValue:@"CTLSSdkVersion"];

self.multipleMessage = [data getValueAsString:@"multipleMessage"];
self.deviceSerialNumber = [data getValueAsString:@"deviceSerialNum"];
self.upaAppVersion = [data getValueAsString:@"appVersion"];
self.upaOsVersion = [data getValueAsString:@"OsVersion"];
self.upaEmvSdkVersion = [data getValueAsString:@"EmvSdkVersion"];
self.upaContactlessSdkVersion = [data getValueAsString:@"CTLSSdkVersion"];

if ([data has:@"host"]) {
JsonDoc* host = [data get:@"host"];
self.transactionId = (NSString*)[host getValue:@"responseId"];
self.transactionTime = (NSString*)[host getValue:@"respDateTime"];
self.gatewayRspMsg = (NSString*)[host getValue:@"gatewayResponseMessage"];
self.gatewayRspCode = (NSString*)[host getValue:@"gatewayRespCode"];
self.responseCode = (NSString*)[host getValue:@"responseCode"];
self.responseText = (NSString*)[host getValue:@"responseText"];
self.terminalRefNumber = (NSString*)[host getValue:@"tranNo"];
self.issuerRefNumber = (NSString*)[host getValue:@"referenceNumber"];
self.referenceNumber = (NSString*)[host getValue:@"referenceNumber"];
self.approvalCode = (NSString*)[host getValue:@"approvalCode"];
self.avsResultCode = (NSString*)[host getValue:@"AvsResultCode"];
self.avsResultText = (NSString*)[host getValue:@"AvsResultText"];
self.cvvResponseCode = (NSString*)[host getValue:@"CvvResultCode"];
self.cvvResponseText = (NSString*)[host getValue:@"CvvResultText"];
self.authorizedAmount = (NSString*)[host getValue:@"authorizedAmount"];
self.partialApproval = (NSString*)[host getValue:@"partialApproval"];
self.batchId = (NSString*)[host getValue:@"batchId"];
self.cardBrandTransactionId = (NSString*)[host getValue:@"cardBrandTransId"];

self.transactionId = [host getValueAsString:@"responseId"];
self.transactionTime = [host getValueAsString:@"respDateTime"];
self.gatewayRspMsg = [host getValueAsString:@"gatewayResponseMessage"];
self.gatewayRspCode = [host getValueAsString:@"gatewayRespCode"];
self.responseCode = [host getValueAsString:@"responseCode"];
self.responseText = [host getValueAsString:@"responseText"];
self.terminalRefNumber = [host getValueAsString:@"tranNo"];
self.issuerRefNumber = [host getValueAsString:@"referenceNumber"];
self.referenceNumber = [host getValueAsString:@"referenceNumber"];
self.approvalCode = [host getValueAsString:@"approvalCode"];
self.avsResultCode = [host getValueAsString:@"AvsResultCode"];
self.avsResultText = [host getValueAsString:@"AvsResultText"];
self.cvvResponseCode = [host getValueAsString:@"CvvResultCode"];
self.cvvResponseText = [host getValueAsString:@"CvvResultText"];
self.authorizedAmount = [host getValueAsString:@"authorizedAmount"];
self.partialApproval = [host getValueAsString:@"partialApproval"];
self.batchId = [host getValueAsString:@"batchId"];
self.cardBrandTransactionId = [host getValueAsString:@"cardBrandTransId"];

if ([host has:@"cashbackAmount"]) {
self.cashBackAmount = [NSDecimalNumber decimalNumberWithString:(NSString*)[host getValue:@"cashbackAmount"]];
self.cashBackAmount = [NSDecimalNumber decimalNumberWithString:[host getValueAsString:@"cashbackAmount"]];
}

if ([host has:@"totalAmount"]) {
self.transactionAmount = [NSDecimalNumber decimalNumberWithString:(NSString*)[host getValue:@"totalAmount"]];
self.transactionAmount = [NSDecimalNumber decimalNumberWithString:[host getValueAsString:@"totalAmount"]];
}

if ([host has:@"surcharge"]) {
self.merchantFee = [NSDecimalNumber decimalNumberWithString:(NSString*)[host getValue:@"surcharge"]];
self.merchantFee = [NSDecimalNumber decimalNumberWithString:[host getValueAsString:@"surcharge"]];
}

if ([host has:@"balanceDue"]) {
self.balanceAmount = [NSDecimalNumber decimalNumberWithString:(NSString*)[host getValue:@"balanceDue"]];
self.balanceDueAmount = (NSString*)[host getValue:@"balanceDue"];
self.balanceAmount = [NSDecimalNumber decimalNumberWithString:[host getValueAsString:@"balanceDue"]];
self.balanceDueAmount = [host getValueAsString:@"balanceDue"];
}

if ([host has:@"tipAmount"] || [host has:@"additionalTipAmount"]) {
NSDecimalNumber* tip = [NSDecimalNumber decimalNumberWithString:@"0.00"];

if ([host has:@"tipAmount"]) {
tip = [tip decimalNumberByAdding:[NSDecimalNumber decimalNumberWithString:(NSString*)[host getValue:@"tipAmount"]]];
tip = [tip decimalNumberByAdding:[NSDecimalNumber decimalNumberWithString:[host getValueAsString:@"tipAmount"]]];
}

if ([host has:@"additionalTipAmount"]) {
tip = [tip decimalNumberByAdding:[NSDecimalNumber decimalNumberWithString:(NSString*)[host getValue:@"additionalTipAmount"]]];
tip = [tip decimalNumberByAdding:[NSDecimalNumber decimalNumberWithString:[host getValueAsString:@"additionalTipAmount"]]];
}

self.tipAmount = tip;
}

if ([host has:@"tokenValue"]) {
self.tokenData = [[HpsTokenData alloc] init];
self.tokenData.tokenValue = (NSString*)[host getValue:@"tokenValue"];
self.tokenData.tokenValue = [host getValueAsString:@"tokenValue"];
}

}

if ([data has:@"payment"]) {
JsonDoc* payment = [data get:@"payment"];
self.cardType = (NSString*)[payment getValue:@"cardType"];
self.paymentType = (NSString*)[payment getValue:@"paymentType"];
self.entryMethod = (NSString*)[payment getValue:@"cardAcquisition"];
self.maskedCardNumber = (NSString*)[payment getValue:@"maskedPan"];
self.signatureLine = (NSString*)[payment getValue:@"signatureLine"];
self.pinVerified = (NSString*)[payment getValue:@"PinVerified"];
self.storeAndForward = (NSString*)[payment getValue:@"storeAndForward"];
self.invoiceNbr = (NSString*)[payment getValue:@"invoiceNbr"];
self.cardholderName = (NSString*)[payment getValue:@"cardHolderName"];
self.cardType = [payment getValueAsString:@"cardType"];
self.paymentType = [payment getValueAsString:@"paymentType"];
self.entryMethod = [payment getValueAsString:@"cardAcquisition"];
self.maskedCardNumber = [payment getValueAsString:@"maskedPan"];
self.signatureLine = [payment getValueAsString:@"signatureLine"];
self.pinVerified = [payment getValueAsString:@"PinVerified"];
self.storeAndForward = [payment getValueAsString:@"storeAndForward"];
self.invoiceNbr = [payment getValueAsString:@"invoiceNbr"];
self.cardholderName = [payment getValueAsString:@"cardHolderName"];
}

if ([data has:@"emv"]) {
JsonDoc* emv = [data get:@"emv"];
self.applicationName = (NSString*)[emv getValue:@"50"]; // convert from hex
self.applicationId = (NSString*)[emv getValue:@"9F06"];
self.applicationPrefferedName = (NSString*)[emv getValue:@"9F12"]; // convert from hex
self.applicationCrytptogram = (NSString*)[emv getValue:@"9F26"];
NSString* cryptotype = (NSString*)[emv getValue:@"9F27"];
self.applicationName = [emv getValueAsString:@"50"]; // convert from hex
self.applicationId = [emv getValueAsString:@"9F06"];
self.applicationPrefferedName = [emv getValueAsString:@"9F12"]; // convert from hex
self.applicationCrytptogram = [emv getValueAsString:@"9F26"];

NSString* cryptotype = [emv getValueAsString:@"9F27"];
if ([cryptotype isEqualToString:@"0"]) {
self.applicationCryptogramType = AAC;
self.applicationCryptogramTypeS = [HpsTerminalEnums applicationCryptogramTypeToString:self.applicationCryptogramType];
Expand All @@ -153,7 +153,7 @@ -(id)initWithJSONDoc:(JsonDoc*)response
self.applicationCryptogramTypeS = [HpsTerminalEnums applicationCryptogramTypeToString:self.applicationCryptogramType];
}
}

return self;
}

Expand Down
1 change: 1 addition & 0 deletions Pod/Classes/Terminals/Utility/JsonDoc.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
- (instancetype) get:(NSString*)key;
- (NSObject*) getValue:(NSString*)key;
- (BOOL) has:(NSString*)key;
- (NSString *) getValueAsString:(NSString *)key;
+ (instancetype) parse:(NSString*)json;

@end
Expand Down
13 changes: 11 additions & 2 deletions Pod/Classes/Terminals/Utility/JsonDoc.m
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ - (NSString*) toString
NSDictionary* finalizedDict = [self finalize];
NSError *e = nil;
NSData *data = [NSJSONSerialization dataWithJSONObject:finalizedDict options:kNilOptions error:&e];

NSString* str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
return [str stringByReplacingOccurrencesOfString:@"\\/" withString:@"/"];
}
Expand All @@ -67,7 +67,7 @@ - (instancetype) get:(NSString*)key
if ([self has:key]) {
return [[JsonDoc alloc] initWithDictionary:[_dict objectForKey:key]];
}

return nil;
}

Expand All @@ -81,6 +81,15 @@ - (BOOL) has:(NSString*)key
return [_dict valueForKey:key] != nil;
}

- (NSString *) getValueAsString:(NSString *)key{
NSObject* value = [self getValue:key];
if (value == nil) {
return nil;
}

return [NSString stringWithFormat:@"%@", value];
}

+ (instancetype) parse:(NSString*)json
{
NSData* data = [json dataUsingEncoding:NSUTF8StringEncoding];
Expand Down