/// <summary> /// Processes a transaction with the given data supplied by the JSON component. /// </summary> /// <param name="transactionData">A JSON object containing the parameters to be sent in the transaction</param> /// <returns>A string with the assembled response from Shift4 and the device.</returns> public async Task <string> processTransaction(Newtonsoft.Json.Linq.JToken transactionData) { string resultString = ""; // 1.5 Parse out JSON string[] transactionDetails = parseTransactionDetails(transactionData); // 2. Set the Payment/Management Request Settings setRequestType(transactionDetails[0].ToUpper(), transactionDetails[1].ToUpper()); if (transactionDetails[1].ToUpper() == "MANAGE") { // Do this flow for a management request // 3. Set the management Variables manage.VarName = transactionDetails[20]; manage.VarValue = transactionDetails[21]; // 4. Execute the request result = executeManagement(manage); // 5. Handle Response resultString = handleResponse(result); } else { // 3. Set the PayLink Settings setPayLinkSettings(transactionDetails[2], "3", transactionDetails[5], transactionDetails[6], transactionDetails[7], transactionDetails[4], transactionDetails[3], transactionDetails[8], transactionDetails[15], transactionDetails[16], transactionDetails[19] ); // 3.5 Set ExtData <XML/> setExtData(transactionDetails[12], transactionDetails[13], transactionDetails[9], transactionDetails[10], transactionDetails[11], transactionDetails[14]); // 4. Execute the Payment result = executeTransaction(request); // 5. Handle Response resultString = handleResponse(result); } return(resultString); }
/// <summary> /// 5. Handle Response /// </summary> /// <param name="result">The Transaction result</param> /// <returns>A string representation of the response object.</returns> private string handleResponse(POSLink.ProcessTransResult result) { string output = ""; if (result.Code == POSLink.ProcessTransResultCode.OK) { POSLink.PaymentResponse res = paxDevice.PaymentResponse; POSLink.ManageResponse mRes = paxDevice.ManageResponse; if (res != null && res.ResultCode != null) { output += "Approved Amount: " + res.ApprovedAmount + Environment.NewLine; output += "Auth Code: " + res.AuthCode + Environment.NewLine; output += "AVS Response: " + res.AvsResponse + Environment.NewLine; output += "Bogus Account Number: " + res.BogusAccountNum + Environment.NewLine; output += "Card Type: " + res.CardType + Environment.NewLine; output += "CVV Response: " + res.CvResponse + Environment.NewLine; output += "EXT Data: " + res.ExtData + Environment.NewLine; output += "Extra Balance: " + res.ExtraBalance + Environment.NewLine; output += "Invoice: " + res.HostCode + Environment.NewLine; // HostCode = Shift4 Invoice Number output += "Host Response: " + res.HostResponse + Environment.NewLine; output += "Message: " + res.Message + Environment.NewLine; output += "Raw Response: " + res.RawResponse + Environment.NewLine; output += "Reference Number: " + res.RefNum + Environment.NewLine; output += "Remaining Balance: " + res.RemainingBalance + Environment.NewLine; output += "Requested Amount: " + res.RequestedAmount + Environment.NewLine; output += "Result Code: " + res.ResultCode + Environment.NewLine; output += "Result Text: " + res.ResultTxt + Environment.NewLine; output += "Sig File Name: " + res.SigFileName + Environment.NewLine; output += "Time Stamp: " + res.Timestamp + Environment.NewLine; } if (mRes != null) { // Do something here to handle the management response. //output += "Approved Amount: 0.00" + Environment.NewLine; //output += "Auth Code: " + mRes.ResultTxt + Environment.NewLine; //output += "AVS Response: " + res.AvsResponse + Environment.NewLine; //output += "Bogus Account Number: " + res.BogusAccountNum + Environment.NewLine; //output += "Card Type: " + res.CardType + Environment.NewLine; //output += "CVV Response: " + res.CvResponse + Environment.NewLine; //output += "EXT Data: " + res.ExtData + Environment.NewLine; //output += "Extra Balance: " + res.ExtraBalance + Environment.NewLine; //output += "Invoice: " + res.HostCode + Environment.NewLine; // HostCode = Shift4 Invoice Number if (mRes.ResultTxt == "OK") { output += "Host Response: A" + Environment.NewLine; } //output += "Message: " + res.Message + Environment.NewLine; //output += "Raw Response: " + res.RawResponse + Environment.NewLine; //output += "Reference Number: " + res.RefNum + Environment.NewLine; //output += "Remaining Balance: " + res.RemainingBalance + Environment.NewLine; //output += "Requested Amount: " + res.RequestedAmount + Environment.NewLine; output += "Result Code: " + mRes.ResultCode + Environment.NewLine; output += "Result Text: " + mRes.ResultTxt + Environment.NewLine; //output += "Sig File Name: " + res.SigFileName + Environment.NewLine; //output += "Time Stamp: " + res.Timestamp + Environment.NewLine; } } else if (result.Code == POSLink.ProcessTransResultCode.ERROR) { Console.WriteLine("Ruh Roh! Something went wrong, the PAX device returned an error."); output += "Ruh Roh! Something went wrong, the PAX device returned an error."; } else if (result.Code == POSLink.ProcessTransResultCode.TimeOut) { Console.WriteLine("Timeout: I dunno Scoob, it looks like they ran out of ScoobySnacks before we could get here."); output += "Timeout: I dunno Scoob, it looks like they ran out of ScoobySnacks before we could get here."; } return(output); }