/// <summary> /// Sends reading command using ABECS in case of a magnetic stripe card. /// Unexpected behavior if amount is too large (over quadrillion). /// </summary> /// <param name="pinpadCommunication"></param> /// <param name="pan">Primary Account Number printed on the card.</param> /// <param name="amount">Transaction amount.</param> /// <returns>ABECS GPN command response.</returns> private GpnResponse SendGpn(IPinpadCommunication pinpadCommunication, string pan, decimal amount) { GpnRequest request = new GpnRequest(); // Assembling GPN command. request.GPN_METHOD.Value = new CryptographyMethod(KeyManagementMode.DerivedUniqueKeyPerTransaction, CryptographyMode.TripleDataEncryptionStandard); request.GPN_KEYIDX.Value = (int)StoneIndexCode.EncryptionKey; request.GPN_WKENC.Value = new HexadecimalData(""); request.GPN_PAN.Value = pan; // Assembling GPN mandatory entries to GPN command. GpnPinEntryRequest pinEntry = new GpnPinEntryRequest(); pinEntry.GPN_MIN.Value = PinReader.PASSWORD_MINIMUM_LENGTH; pinEntry.GPN_MAX.Value = PinReader.PASSWORD_MAXIMUM_LENGTH; pinEntry.GPN_MSG.Value.Padding = DisplayPaddingType.Left; pinEntry.GPN_MSG.Value.FirstLine = this.GetAmountLabel(amount); pinEntry.GPN_MSG.Value.SecondLine = PASSWORD_LABEL; // Adds the entry to list of entries supported by a GPN command. request.GPN_ENTRIES.Value.Add(pinEntry); GpnResponse response = pinpadCommunication.SendRequestAndReceiveResponse <GpnResponse>(request); return(response); }
// Used internally /// <summary> /// Sends reading command using ABECS when card have a chip. /// </summary> /// <param name="pinpadCommunication">Pinpad communication, through which the communication with the pinpad is made.</param> /// <param name="amount">Transaction amount.</param> /// <returns>ABECS GOC command response.</returns> private GocResponse SendGoc(IPinpadCommunication pinpadCommunication, decimal amount) { GocRequest request = new GocRequest(); request.GOC_AMOUNT.Value = Convert.ToInt64(amount * 100); request.GOC_CASHBACK.Value = 0; request.GOC_EXCLIST.Value = false; request.GOC_CONNECT.Value = true; request.GOC_METHOD.Value = new CryptographyMethod(KeyManagementMode.DerivedUniqueKeyPerTransaction, CryptographyMode.TripleDataEncryptionStandard); request.GOC_KEYIDX.Value = (int)StoneIndexCode.EncryptionKey; request.GOC_WKENC.Value = new HexadecimalData("00000000000000000000000000000000"); request.GOC_RISKMAN.Value = false; request.GOC_FLRLIMIT.Value = new HexadecimalData("00000000"); request.GOC_TPBRS.Value = 0; request.GOC_TVBRS.Value = new HexadecimalData("00000000"); request.GOC_MTPBRS.Value = 0; request.GOC_TAGS1.Value = new HexadecimalData(EmvTag.GetEmvTagsRequired()); request.GOC_TAGS2.Value = new HexadecimalData(string.Empty); GocResponse response = pinpadCommunication.SendRequestAndReceiveResponse <GocResponse>(request); return(response); }