diff --git a/Example/Tests/HpsJsonDocTests.m b/Example/Tests/HpsJsonDocTests.m index 89b8ae70..28b1eed9 100644 --- a/Example/Tests/HpsJsonDocTests.m +++ b/Example/Tests/HpsJsonDocTests.m @@ -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 diff --git a/Pod/Classes/Terminals/UPA/Models/HpaUpaResponse.m b/Pod/Classes/Terminals/UPA/Models/HpaUpaResponse.m index 1d2d6570..cc2e5da4 100644 --- a/Pod/Classes/Terminals/UPA/Models/HpaUpaResponse.m +++ b/Pod/Classes/Terminals/UPA/Models/HpaUpaResponse.m @@ -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]; @@ -153,7 +153,7 @@ -(id)initWithJSONDoc:(JsonDoc*)response self.applicationCryptogramTypeS = [HpsTerminalEnums applicationCryptogramTypeToString:self.applicationCryptogramType]; } } - + return self; } diff --git a/Pod/Classes/Terminals/Utility/JsonDoc.h b/Pod/Classes/Terminals/Utility/JsonDoc.h index e418ec4d..bd07fea0 100644 --- a/Pod/Classes/Terminals/Utility/JsonDoc.h +++ b/Pod/Classes/Terminals/Utility/JsonDoc.h @@ -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 diff --git a/Pod/Classes/Terminals/Utility/JsonDoc.m b/Pod/Classes/Terminals/Utility/JsonDoc.m index 0cec75e5..e84b1697 100644 --- a/Pod/Classes/Terminals/Utility/JsonDoc.m +++ b/Pod/Classes/Terminals/Utility/JsonDoc.m @@ -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:@"/"]; } @@ -67,7 +67,7 @@ - (instancetype) get:(NSString*)key if ([self has:key]) { return [[JsonDoc alloc] initWithDictionary:[_dict objectForKey:key]]; } - + return nil; } @@ -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];