PageRenderTime 31ms CodeModel.GetById 35ms RepoModel.GetById 1ms app.codeStats 1ms

/MTData.WebAPI/Controllers/Bad/TransactionRequestController.cs

https://bitbucket.org/stuarthealey/canada
C# | 7067 lines | 5030 code | 1082 blank | 955 comment | 885 complexity | f03191693f6236c5927ffc6e1bdd840f MD5 | raw file

Large files files are truncated, but you can click here to view the full file

  1. using System;
  2. using System.Configuration;
  3. using System.Collections.ObjectModel;
  4. using System.Collections.Generic;
  5. using System.Xml.Linq;
  6. using System.Globalization;
  7. using System.IO;
  8. using System.Reflection;
  9. using System.Text;
  10. using System.Linq;
  11. using System.Xml.Linq;
  12. using System.Threading;
  13. using System.Web.Http;
  14. using System.Xml;
  15. using System.Xml.Serialization;
  16. using MTD.Core.DataTransferObjects;
  17. using MTD.Core.Service.Interface;
  18. using MTData.WebAPI.Models;
  19. using MTData.WebAPI.Resources;
  20. using Ninject;
  21. using System.Net;
  22. using MTData.Utility;
  23. using MTData.WebAPI.schema;
  24. using System.Web.Configuration;
  25. using MTData.WebAPI.Common;
  26. using MTData.WebAPI.CanadaCert;
  27. using MTData.WebAPI.CanadaCommon;
  28. using MTData.WebAPI.schema;
  29. namespace MTData.WebAPI.Controllers
  30. {
  31. public class TransactionRequestController : BaseController
  32. {
  33. #region Load Constructor
  34. private static int _count = 0;
  35. private const string Ecommerce = "Ecommerce";
  36. private const string Retail = "Retail";
  37. private const string Credit = "Credit";
  38. private const string Debit = "Debit";
  39. private const string TokenOnly = "TokenOnly";
  40. private const string TAKey = "TAKey";
  41. private const string Void = "Void";
  42. private const string Timeout = "Timeout";
  43. private const string Completion = "Completion";
  44. private const string Refund = "Refund";
  45. private const string Authorization = "Authorization";
  46. private const string Visa = "Visa";
  47. private const string Amex = "Amex";
  48. private const string Diners = "Diners";
  49. private const string MasterCard = "MasterCard";
  50. private const string Discover = "Discover";
  51. private const string Sale = "Sale";
  52. private const string EMV2KEY = "EMV2KEY";
  53. private const string FileCRCValue = "3E30";
  54. private const string FileSizeValue = "15593";
  55. private const string ReqFBMaxSizeValue = "999";
  56. private const string CAPKUpdate = "CAPKUpdate";
  57. private const string CAPKDownload = "CAPKDownload";
  58. private const string BookerAppPayment = "BookerAppPayment";
  59. protected string IndustryType;
  60. protected string PaymentType;
  61. private string unreachableUrlResponse;
  62. private int retryCount;
  63. protected string TransactionType;
  64. private static ITerminalService _terminalService;
  65. private StringBuilder _logMessage;
  66. readonly ILogger _logger = new Logger();
  67. public TransactionRequestController([Named("TerminalService")] ITerminalService terminalService, StringBuilder logMessage)
  68. : base(terminalService, logMessage)
  69. {
  70. _terminalService = terminalService;
  71. _logMessage = logMessage;
  72. }
  73. private readonly GMFMessageVariants _gmfMsgVar = new GMFMessageVariants();
  74. private readonly CreditRequestDetails _creditReq = new CreditRequestDetails(); // Credit request for Ecomm/retail transaction
  75. private readonly PinlessDebitRequestDetails _pinlessDebit = new PinlessDebitRequestDetails(); // Debit request for Ecomm transaction
  76. private readonly DebitRequestDetails _debitReq = new DebitRequestDetails(); // Debit request for Retail transaction
  77. private readonly AdminRequestDetails _adminReq = new AdminRequestDetails();
  78. private readonly VoidTOReversalRequestDetails _revDetails = new VoidTOReversalRequestDetails(); // Void TO Reversal Request
  79. private readonly TARequestDetails _taRequest = new TARequestDetails();
  80. private readonly MessageProcessor _objMessageProcessor = new MessageProcessor();
  81. public static readonly string StrAppPath = Assembly.GetCallingAssembly().Location;
  82. #endregion
  83. /// <summary>
  84. /// Purpose : Finding credit and debit card request of Retail and ecommerce domain for First Data. Transaction Implemented Authorization, Completion, Sale, Refund, Void.
  85. /// Function Name : CreateTransactionRequest
  86. /// Created By : Salil Gupta
  87. /// Created On : 03/10/2015
  88. /// Modificatios Made : Madhuri Tanwar
  89. /// Modidified On : 07/27/2015
  90. /// </summary>
  91. /// <param name="transactionRequest"></param>
  92. /// <returns></returns>
  93. public IHttpActionResult CreateTransactionRequest(TransactionRequest transactionRequest)
  94. {
  95. try
  96. {
  97. _logMessage.Append("Controller Name:-" + GetType().Name + "; Method Name :- " +
  98. MethodBase.GetCurrentMethod().Name + ";");
  99. _logMessage.Append(String.Format(CultureInfo.InvariantCulture,
  100. " Date:-" + DateTime.Now.ToShortDateString() + "; Time:- " + DateTime.Now.ToShortTimeString()));
  101. string industryType = transactionRequest.IndustryType;
  102. string paymentType = transactionRequest.PaymentType.ToString();
  103. string transactionType = (transactionRequest.TransactionType == Void || transactionRequest.TransactionType == Timeout)
  104. ? Void
  105. : transactionRequest.TransType.ToString();
  106. switch (industryType)
  107. {
  108. #region Ecommerce
  109. case Ecommerce:
  110. if (paymentType == Credit)
  111. {
  112. switch (transactionType)
  113. {
  114. case Void:
  115. VoidTOReversalRequestDetails creditRequestVoid = ReversalRequest(transactionRequest);
  116. return Ok(creditRequestVoid);
  117. default:
  118. CreditRequestDetails creditRequest = CreateEcommerceRequest(transactionRequest);
  119. return Ok(creditRequest);
  120. }
  121. }
  122. if (paymentType == Debit)
  123. {
  124. PinlessDebitRequestDetails debitSale = CreatePinlessDebitRequest(transactionRequest);
  125. return Ok(debitSale);
  126. }
  127. break;
  128. #endregion
  129. #region Retail
  130. case Retail:
  131. var entryMode = (PaymentEntryMode)Enum.Parse(typeof(PaymentEntryMode), transactionRequest.EntryMode, true);
  132. var txnType = (PaymentTransactionType)Enum.Parse(typeof(PaymentTransactionType), transactionType, true);
  133. switch (entryMode)
  134. {
  135. #region Swiped
  136. case PaymentEntryMode.Swiped:
  137. if (paymentType == PaymentCardType.Credit.ToString())
  138. {
  139. switch (txnType)
  140. {
  141. case PaymentTransactionType.Void:
  142. VoidTOReversalRequestDetails creditRequestVerification =
  143. ReversalRequestMsr(transactionRequest);
  144. return Ok(creditRequestVerification);
  145. default:
  146. CreditRequestDetails creditRequest = CreateRetailRequest(transactionRequest);
  147. return Ok(creditRequest);
  148. }
  149. }
  150. else if (paymentType == PaymentCardType.Debit.ToString())
  151. {
  152. DebitRequestDetails debitCard = CreatePinDebitRequest(transactionRequest);
  153. return Ok(debitCard);
  154. }
  155. break;
  156. #endregion
  157. #region FSwiped
  158. case PaymentEntryMode.FSwiped:
  159. if (paymentType == PaymentCardType.Credit.ToString())
  160. {
  161. switch (txnType)
  162. {
  163. case PaymentTransactionType.Void:
  164. VoidTOReversalRequestDetails creditRequestVerification = ReversalRequestEmv(transactionRequest);
  165. return Ok(creditRequestVerification);
  166. default: //Full EMV Transaction
  167. CreditRequestDetails creditRequest = CreateFallbackMsrRequest(transactionRequest);
  168. return Ok(creditRequest);
  169. }
  170. }
  171. else if (paymentType == PaymentCardType.Debit.ToString())
  172. {
  173. DebitRequestDetails debitCard = CreateFallbackMsrDebitRequest(transactionRequest);
  174. return Ok(debitCard);
  175. }
  176. break;
  177. #endregion
  178. #region EmvContact
  179. case PaymentEntryMode.EmvContact:
  180. if (paymentType == PaymentCardType.Credit.ToString())
  181. {
  182. switch (txnType)
  183. {
  184. case PaymentTransactionType.Void:
  185. VoidTOReversalRequestDetails creditRequestVerification = ReversalRequestEmv(transactionRequest);
  186. return Ok(creditRequestVerification);
  187. default: //Full EMV Transaction
  188. CreditRequestDetails creditRequest = CreateEmvContactRequest(transactionRequest);
  189. return Ok(creditRequest);
  190. }
  191. }
  192. else if (paymentType == PaymentCardType.Debit.ToString())
  193. {
  194. DebitRequestDetails debitCard = CreateEmvContactPinDebitRequest(transactionRequest);
  195. return Ok(debitCard);
  196. }
  197. break;
  198. #endregion
  199. #region EmvContactless
  200. case PaymentEntryMode.EmvContactless:
  201. if (paymentType == PaymentCardType.Credit.ToString())
  202. {
  203. switch (txnType)
  204. {
  205. case PaymentTransactionType.Void:
  206. VoidTOReversalRequestDetails creditRequestVerification = ReversalRequestEmvContactless(transactionRequest);
  207. return Ok(creditRequestVerification);
  208. default: //Full EMV Transaction
  209. CreditRequestDetails creditRequest = CreateEmvContactlessRequest(transactionRequest);
  210. return Ok(creditRequest);
  211. }
  212. }
  213. else if (paymentType == PaymentCardType.Debit.ToString())
  214. {
  215. switch (txnType)
  216. {
  217. case PaymentTransactionType.Void:
  218. VoidTOReversalRequestDetails DebitRequestVerification = ReversalRequestDebitEmvContactless(transactionRequest);
  219. return Ok(DebitRequestVerification);
  220. default: //Full EMV Transaction
  221. DebitRequestDetails debitCard = CreateEmvContactlessPinDebitRequest(transactionRequest);
  222. return Ok(debitCard);
  223. }
  224. }
  225. break;
  226. #endregion
  227. #region MSRContactless
  228. case PaymentEntryMode.MSRContactless:
  229. if (paymentType == PaymentCardType.Credit.ToString())
  230. {
  231. switch (txnType)
  232. {
  233. case PaymentTransactionType.Void:
  234. VoidTOReversalRequestDetails creditRequestVerification = ReversalRequestMsrContactless(transactionRequest);
  235. return Ok(creditRequestVerification);
  236. default:
  237. CreditRequestDetails creditRequest = CreateMSRContactlessRequest(transactionRequest);
  238. return Ok(creditRequest);
  239. }
  240. }
  241. else if (paymentType == PaymentCardType.Debit.ToString())
  242. {
  243. switch (txnType)
  244. {
  245. case PaymentTransactionType.Void:
  246. VoidTOReversalRequestDetails DebitRequestVerification = ReversalRequestDebitMsrContactless(transactionRequest);
  247. return Ok(DebitRequestVerification);
  248. default: //Full EMV Transaction
  249. DebitRequestDetails debitCard = CreateCOntactlessMSRPinDebitRequest(transactionRequest);
  250. return Ok(debitCard);
  251. }
  252. }
  253. break;
  254. #endregion
  255. }
  256. break;
  257. #endregion
  258. #region Token
  259. case TokenOnly:
  260. TARequestDetails creditTaRequest = TaRequest(transactionRequest);
  261. return Ok(creditTaRequest);
  262. break;
  263. case TAKey:
  264. TARequestDetails creditTaKeyRequest = TaKeyRequest(transactionRequest);
  265. return Ok(creditTaKeyRequest);
  266. break;
  267. #endregion
  268. #region CAPK
  269. case CAPKUpdate:
  270. AdminRequestDetails updateAdminRequestDetails = CreateEmvContactUpdateCapkRequest(transactionRequest);
  271. return Ok(updateAdminRequestDetails);
  272. break;
  273. case CAPKDownload:
  274. AdminRequestDetails downloadAdminRequestDetails = CreateEmvContactDownloadCapkRequest(transactionRequest);
  275. return Ok(downloadAdminRequestDetails);
  276. break;
  277. #endregion
  278. #region bookerApp
  279. case BookerAppPayment:
  280. CreditRequestDetails bookerAppCreditRequest = BookerAppRequest(transactionRequest);
  281. return Ok(bookerAppCreditRequest);
  282. break;
  283. #endregion
  284. }
  285. }
  286. catch (Exception ex)
  287. {
  288. _logger.LogInfoFatel(_logMessage.ToString(), ex);
  289. }
  290. return Ok();
  291. }
  292. /// <summary>
  293. /// Purpose : Creating credit card request
  294. /// Function Name : CreateRequest
  295. /// Created By : Salil Gupta
  296. /// Created On : 03/16/2015
  297. /// Modificatios Made : ****************************
  298. /// Modidified On : 04/017/2015 "MM/DD/YYYY"
  299. /// </summary>
  300. /// <param name="transactionRequest"></param>
  301. /// <returns></returns>
  302. private CreditRequestDetails CreateEcommerceRequest(TransactionRequest transactionRequest)
  303. {
  304. try
  305. {
  306. if (!transactionRequest.IsNull())
  307. {
  308. _logMessage.Append("Controller Name:-" + GetType().Name + "; Method Name :- " +
  309. MethodBase.GetCurrentMethod().Name + ";");
  310. _logMessage.Append(String.Format(CultureInfo.InvariantCulture,
  311. " Date:-" + DateTime.Now.ToShortDateString() + "; Time:- " + DateTime.Now.ToShortTimeString()));
  312. MTDTransactionDto mtdTransaction = new MTDTransactionDto();
  313. if (!string.IsNullOrEmpty(transactionRequest.RapidConnectAuthId))
  314. {
  315. mtdTransaction = _terminalService.Completion(
  316. transactionRequest.RapidConnectAuthId,
  317. transactionRequest.SerialNumber, transactionRequest.MtdMerchantId);
  318. if (mtdTransaction.IsNull())
  319. return null;
  320. }
  321. #region Common Group
  322. CommonGrp cmnGrp = new CommonGrp();
  323. /* The payment type of the transaction. */
  324. PymtTypeType typePayment = transactionRequest.PaymentType;
  325. cmnGrp.PymtType = typePayment;
  326. cmnGrp.PymtTypeSpecified = true;
  327. /* merchant category code. */
  328. cmnGrp.MerchCatCode = transactionRequest.MCCode;
  329. /* The type of transaction being performed. */
  330. cmnGrp.TxnType = transactionRequest.TransType;
  331. cmnGrp.TxnTypeSpecified = true;
  332. /* The local date and time in which the transaction was performed. */
  333. cmnGrp.LocalDateTime = transactionRequest.LocalDateTime;//DateTime.Now.ToString("yyyyMMddHHmmss");
  334. /* The transmission date and time of the transaction (in GMT/UCT). */
  335. cmnGrp.TrnmsnDateTime = transactionRequest.TrnmsnDateTime;//DateTime.UtcNow.ToString("yyyyMMddHHmmss");
  336. /* A number assigned by the merchant to uniquely reference the transaction.
  337. * This number must be unique within a day per Merchant ID per Terminal ID. */
  338. cmnGrp.STAN = GetSystemTraceNumber(transactionRequest.MtdMerchantId, transactionRequest.TerminalId);
  339. if (string.Equals(cmnGrp.TxnType.ToString(), Completion, StringComparison.OrdinalIgnoreCase))
  340. {
  341. cmnGrp.RefNum = mtdTransaction.TransRefNo;
  342. cmnGrp.OrderNum = mtdTransaction.TransOrderNo;
  343. }
  344. else
  345. {
  346. cmnGrp.RefNum = GetReferenceNumber(transactionRequest.MtdMerchantId, transactionRequest.TerminalId);
  347. cmnGrp.OrderNum = cmnGrp.RefNum;
  348. }
  349. /* An ID assigned by First Data, for the Third Party Processor or
  350. * Software Vendor that generated the transaction. */
  351. cmnGrp.TPPID = transactionRequest.TppId;
  352. /* A unique ID assigned to a terminal. */
  353. cmnGrp.TermID = transactionRequest.TerminalId;
  354. /* A unique ID assigned by First Data, to identify the Merchant. */
  355. cmnGrp.MerchID = transactionRequest.FdMerchantId;
  356. cmnGrp.GroupID = transactionRequest.GroupId;
  357. //Group ID value will be assigned by First Data.
  358. //get terminal id from transaction request
  359. cmnGrp.POSEntryMode = PaymentAPIResources.EcomPosEntryMode;
  360. cmnGrp.POSCondCode = POSCondCodeType.Item59;
  361. cmnGrp.POSCondCodeSpecified = true;
  362. cmnGrp.TermCatCode = TermCatCodeType.Item00;
  363. cmnGrp.TermCatCodeSpecified = true;
  364. cmnGrp.TermEntryCapablt = TermEntryCapabltType.Item10;
  365. cmnGrp.TermEntryCapabltSpecified = true;
  366. cmnGrp.TermLocInd = TermLocIndType.Item1;
  367. cmnGrp.TermLocIndSpecified = true;
  368. cmnGrp.CardCaptCap = CardCaptCapType.Item0;
  369. cmnGrp.CardCaptCapSpecified = true;
  370. EcommGrp ecomgrp = new EcommGrp();
  371. ecomgrp.EcommTxnInd = EcommTxnIndType.Item03;
  372. ecomgrp.EcommTxnIndSpecified = true;
  373. if (!string.Equals(cmnGrp.TxnType.ToString(), Authorization, StringComparison.CurrentCultureIgnoreCase))
  374. ecomgrp.EcommURL = PaymentAPIResources.EcomUrl;
  375. _creditReq.EcommGrp = ecomgrp;
  376. /* The amount of the transaction. This may be an authorization amount,
  377. * adjustment amount or a reversal based on the type of transaction.
  378. * It is inclusive of all additional amounts.
  379. * It is submitted in the currency represented by the Transaction Currency field.
  380. * The field is overwritten in the response for a partial authorization. */
  381. double num = Convert.ToDouble(transactionRequest.TransactionAmount);
  382. string amt = num.ToString("0.00").Replace(".", string.Empty);
  383. cmnGrp.TxnAmt = Convert.ToString(amt);
  384. cmnGrp.TxnAmt = cmnGrp.TxnAmt.PadLeft(12, '0');
  385. cmnGrp.TxnCrncy = PaymentAPIResources.Cur_USA;
  386. /* An indicator that describes the location of the terminal. */
  387. /* Indicates Group ID. */
  388. _creditReq.CommonGrp = cmnGrp;
  389. #endregion
  390. CardGrp cardGrp = new CardGrp();
  391. #region Transarmor group
  392. if (string.Equals(cmnGrp.TxnType.ToString(), Authorization, StringComparison.CurrentCultureIgnoreCase) || string.Equals(cmnGrp.TxnType.ToString(), Sale, StringComparison.CurrentCultureIgnoreCase))
  393. {
  394. cardGrp.AcctNum = transactionRequest.CardNumber;
  395. cardGrp.CardExpiryDate = transactionRequest.ExpiryDate;
  396. cardGrp.CardType = transactionRequest.CardType;
  397. cardGrp.CardTypeSpecified = true;
  398. cardGrp.CCVInd = CCVIndType.Prvded;
  399. cardGrp.CCVIndSpecified = true;
  400. cardGrp.CCVData = transactionRequest.CardCvv;
  401. _creditReq.CardGrp = cardGrp;
  402. TAGrp taGrp = new TAGrp();
  403. taGrp.SctyLvl = SctyLvlType.Tknizatn;
  404. taGrp.SctyLvlSpecified = true;
  405. taGrp.TknType = transactionRequest.TokenType;
  406. _creditReq.TAGrp = taGrp;
  407. }
  408. if (string.Equals(cmnGrp.TxnType.ToString(), Completion, StringComparison.CurrentCultureIgnoreCase))
  409. {
  410. if (mtdTransaction != null)
  411. {
  412. XmlDocument xmlDoc = new XmlDocument();
  413. xmlDoc.LoadXml(mtdTransaction.ResponseXml);
  414. string xmlString = CommonFunctions.GetXmlAsString(xmlDoc);
  415. var response = CommonFunctions.GetMCResponse(xmlString);
  416. xmlDoc.LoadXml(response);
  417. var aVSResultCode = xmlDoc.SelectSingleNode("CreditResponse/CardGrp/AVSResultCode");
  418. var cCVResultCode = xmlDoc.SelectSingleNode("CreditResponse/CardGrp/CCVResultCode");
  419. cardGrp.CardType = transactionRequest.CardType;
  420. cardGrp.CardTypeSpecified = true;
  421. if (aVSResultCode != null)
  422. {
  423. cardGrp.AVSResultCode = (AVSResultCodeType)Enum.Parse(typeof(AVSResultCodeType), aVSResultCode.InnerText);
  424. cardGrp.AVSResultCodeSpecified = true;
  425. }
  426. if (cCVResultCode != null)
  427. {
  428. cardGrp.CCVResultCode = (CCVResultCodeType)Enum.Parse(typeof(CCVResultCodeType), cCVResultCode.InnerText);
  429. cardGrp.CCVResultCodeSpecified = true;
  430. }
  431. }
  432. _creditReq.CardGrp = cardGrp;
  433. TAGrp taGrp = new TAGrp();
  434. taGrp.SctyLvl = SctyLvlType.Tknizatn;
  435. taGrp.SctyLvlSpecified = true;
  436. taGrp.Tkn = mtdTransaction.CardToken.Decrypt();
  437. taGrp.TknType = transactionRequest.TokenType;
  438. _creditReq.TAGrp = taGrp;
  439. }
  440. if (string.Equals(cmnGrp.TxnType.ToString(), Refund, StringComparison.CurrentCultureIgnoreCase))
  441. {
  442. cardGrp.CardType = transactionRequest.CardType;
  443. cardGrp.CardTypeSpecified = true;
  444. _creditReq.CardGrp = cardGrp;
  445. TAGrp taGrp = new TAGrp();
  446. taGrp.SctyLvl = SctyLvlType.Tknizatn;
  447. taGrp.SctyLvlSpecified = true;
  448. taGrp.Tkn = mtdTransaction.CardToken.Decrypt();
  449. taGrp.TknType = transactionRequest.TokenType;
  450. _creditReq.TAGrp = taGrp;
  451. }
  452. #endregion
  453. if (!string.Equals(cmnGrp.TxnType.ToString(), Completion, StringComparison.OrdinalIgnoreCase) && !string.Equals(cmnGrp.TxnType.ToString(), Refund, StringComparison.OrdinalIgnoreCase))
  454. {
  455. #region Additional Amount Group
  456. AddtlAmtGrp addAmtGrp = new AddtlAmtGrp();
  457. addAmtGrp.PartAuthrztnApprvlCapablt = PartAuthrztnApprvlCapabltType.Item1;
  458. addAmtGrp.PartAuthrztnApprvlCapabltSpecified = true;
  459. AddtlAmtGrp[] addAmtGrpArr = new AddtlAmtGrp[1];
  460. addAmtGrpArr[0] = addAmtGrp;
  461. _creditReq.AddtlAmtGrp = addAmtGrpArr;
  462. #endregion
  463. }
  464. #region Visa Group
  465. if (string.Equals(cardGrp.CardType.ToString(), Visa, StringComparison.OrdinalIgnoreCase) && !string.Equals(cmnGrp.TxnType.ToString(), Refund, StringComparison.OrdinalIgnoreCase))
  466. {
  467. VisaGrp visaGrp = new VisaGrp();
  468. visaGrp.VisaBID = PaymentAPIResources.VisaBID;
  469. visaGrp.VisaAUAR = PaymentAPIResources.VisaAUAR;
  470. if (!string.Equals(cmnGrp.TxnType.ToString(), Completion, StringComparison.OrdinalIgnoreCase))
  471. {
  472. visaGrp.ACI = ACIType.Y;
  473. visaGrp.ACISpecified = true;
  474. visaGrp.TaxAmtCapablt = TaxAmtCapabltType.Item1;
  475. visaGrp.TaxAmtCapabltSpecified = true;
  476. }
  477. else
  478. {
  479. visaGrp.ACI = ACIType.T;
  480. visaGrp.ACISpecified = true;
  481. }
  482. _creditReq.Item = visaGrp;
  483. }
  484. if (((string.Equals(cardGrp.CardType.ToString(), MasterCard, StringComparison.OrdinalIgnoreCase)) && (string.Equals(cmnGrp.TxnType.ToString(), "completion", StringComparison.OrdinalIgnoreCase))))
  485. {
  486. MCGrp mcGrp = new MCGrp();
  487. XmlDocument xmlDoc = new XmlDocument();
  488. xmlDoc.LoadXml(mtdTransaction.ResponseXml);
  489. string xmlString = CommonFunctions.GetXmlAsString(xmlDoc);
  490. var response = CommonFunctions.GetMCResponse(xmlString);
  491. xmlDoc.LoadXml(response);
  492. var banknetData = xmlDoc.SelectSingleNode("CreditResponse/MCGrp/BanknetData");
  493. if (banknetData != null) { mcGrp.BanknetData = banknetData.InnerText; }
  494. _creditReq.Item = mcGrp;
  495. }
  496. #endregion
  497. #region AmexGrp Group
  498. if (string.Equals(cardGrp.CardType.ToString(), Amex, StringComparison.OrdinalIgnoreCase) && string.Equals(cmnGrp.TxnType.ToString(), Completion, StringComparison.OrdinalIgnoreCase))
  499. {
  500. AmexGrp amexgrp = new AmexGrp();
  501. if (mtdTransaction != null)
  502. {
  503. amexgrp.AmExTranID = mtdTransaction.GatewayTxnId;
  504. XmlDocument xmlDoc = new XmlDocument();
  505. xmlDoc.LoadXml(mtdTransaction.ResponseXml);
  506. string xmlString = CommonFunctions.GetXmlAsString(xmlDoc);
  507. var response = CommonFunctions.GetMCResponse(xmlString);
  508. xmlDoc.LoadXml(response);
  509. var amExPOSData = xmlDoc.SelectSingleNode("CreditResponse/AmexGrp/AmExPOSData");
  510. if (amExPOSData != null)
  511. { amexgrp.AmExPOSData = amExPOSData.InnerText; }
  512. }
  513. _creditReq.Item = amexgrp;
  514. }
  515. #endregion
  516. #region Discover Group
  517. if ((string.Equals(cardGrp.CardType.ToString(), Diners, StringComparison.OrdinalIgnoreCase) || string.Equals(cardGrp.CardType.ToString(), Discover, StringComparison.OrdinalIgnoreCase) || string.Equals(cardGrp.CardType.ToString(), "JCB", StringComparison.OrdinalIgnoreCase)) && string.Equals(cmnGrp.TxnType.ToString(), "completion", StringComparison.OrdinalIgnoreCase))
  518. {
  519. DSGrp dsGrp = new DSGrp();
  520. if (mtdTransaction != null)
  521. {
  522. XmlDocument xmlDoc = new XmlDocument();
  523. xmlDoc.LoadXml(mtdTransaction.ResponseXml);
  524. string xmlString = CommonFunctions.GetXmlAsString(xmlDoc);
  525. var response = CommonFunctions.GetMCResponse(xmlString);
  526. xmlDoc.LoadXml(response);
  527. var discProcCode = xmlDoc.SelectSingleNode("CreditResponse/DSGrp/DiscProcCode");
  528. if (discProcCode != null)
  529. {
  530. dsGrp.DiscProcCode = discProcCode.InnerText;
  531. }
  532. var discPOSEntry = xmlDoc.SelectSingleNode("CreditResponse/DSGrp/DiscPOSEntry");
  533. if (discPOSEntry != null)
  534. {
  535. dsGrp.DiscPOSEntry = discPOSEntry.InnerText;
  536. }
  537. var discRespCode = xmlDoc.SelectSingleNode("CreditResponse/DSGrp/DiscRespCode");
  538. if (discRespCode != null)
  539. {
  540. dsGrp.DiscRespCode = discRespCode.InnerText;
  541. }
  542. var discPOSData = xmlDoc.SelectSingleNode("CreditResponse/DSGrp/DiscPOSData");
  543. if (discPOSData != null)
  544. {
  545. dsGrp.DiscPOSData = discPOSData.InnerText;
  546. }
  547. var discTransQualifier = xmlDoc.SelectSingleNode("CreditResponse/DSGrp/DiscTransQualifier");
  548. if (discTransQualifier != null)
  549. {
  550. dsGrp.DiscTransQualifier = discTransQualifier.InnerText;
  551. }
  552. var discNRID = xmlDoc.SelectSingleNode("CreditResponse/DSGrp/DiscNRID");
  553. if (discNRID != null)
  554. {
  555. dsGrp.DiscNRID = discNRID.InnerText;
  556. }
  557. dsGrp.DiscNRID = mtdTransaction.GatewayTxnId;
  558. }
  559. _creditReq.Item = dsGrp;
  560. }
  561. #endregion
  562. #region Customer info Group
  563. if (!string.IsNullOrEmpty(transactionRequest.StreetAddress) || !string.IsNullOrEmpty(transactionRequest.ZipCode))
  564. {
  565. if (!string.Equals(cmnGrp.TxnType.ToString(), Refund, StringComparison.OrdinalIgnoreCase) && !string.Equals(cmnGrp.TxnType.ToString(), Completion, StringComparison.OrdinalIgnoreCase))
  566. {
  567. CustInfoGrp custinfo = new CustInfoGrp();
  568. if (!string.IsNullOrEmpty(transactionRequest.StreetAddress))
  569. {
  570. custinfo.AVSBillingAddr = transactionRequest.StreetAddress;
  571. }
  572. if (!string.IsNullOrEmpty(transactionRequest.ZipCode))
  573. {
  574. custinfo.AVSBillingPostalCode = transactionRequest.ZipCode;
  575. }
  576. _creditReq.CustInfoGrp = custinfo;
  577. }
  578. }
  579. #endregion
  580. #region addAm Group
  581. if (string.Equals(cmnGrp.TxnType.ToString(), Completion, StringComparison.OrdinalIgnoreCase))
  582. {
  583. AddtlAmtGrp addAmtGrp = new AddtlAmtGrp();
  584. if (mtdTransaction != null)
  585. {
  586. XmlDocument xmlDoc = new XmlDocument();
  587. xmlDoc.LoadXml(mtdTransaction.ResponseXml);
  588. string xmlString = CommonFunctions.GetXmlAsString(xmlDoc);
  589. var response = CommonFunctions.GetMCResponse(xmlString);
  590. xmlDoc.LoadXml(response);
  591. var originalamt = xmlDoc.SelectSingleNode("CreditResponse/CommonGrp/TxnAmt");
  592. if (originalamt != null)
  593. {
  594. var amountP = originalamt.InnerText;
  595. addAmtGrp.AddAmt = amountP.PadLeft(12, '0');
  596. }
  597. addAmtGrp.AddAmtCrncy = PaymentAPIResources.Cur_USA;
  598. addAmtGrp.AddAmtType = AddAmtTypeType.FirstAuthAmt;
  599. addAmtGrp.AddAmtTypeSpecified = true;
  600. AddtlAmtGrp addAmtGrp1 = new AddtlAmtGrp();
  601. var originalamt1 = xmlDoc.SelectSingleNode("CreditResponse/CommonGrp/TxnAmt");
  602. if (originalamt1 != null)
  603. {
  604. var amtP = originalamt1.InnerText;
  605. addAmtGrp1.AddAmt = amtP.PadLeft(12, '0');
  606. }
  607. addAmtGrp1.AddAmtCrncy = PaymentAPIResources.Cur_USA;
  608. addAmtGrp1.AddAmtType = AddAmtTypeType.TotalAuthAmt;
  609. addAmtGrp1.AddAmtTypeSpecified = true;
  610. AddtlAmtGrp[] addAmtGrpArr = new AddtlAmtGrp[2];
  611. addAmtGrpArr[0] = addAmtGrp;
  612. addAmtGrpArr[1] = addAmtGrp1;
  613. _creditReq.AddtlAmtGrp = addAmtGrpArr;
  614. }
  615. OrigAuthGrp orgAuthgrp = new OrigAuthGrp();
  616. if (mtdTransaction != null)
  617. {
  618. orgAuthgrp.OrigAuthID = mtdTransaction.AuthId;
  619. orgAuthgrp.OrigLocalDateTime = mtdTransaction.LocalDateTime;
  620. XmlDocument xmlDoc = new XmlDocument();
  621. xmlDoc.LoadXml(mtdTransaction.RequestXml);
  622. var trnmsnDateTime = xmlDoc.SelectSingleNode("TransactionRequest/TrnmsnDateTime");
  623. if (trnmsnDateTime != null)
  624. {
  625. orgAuthgrp.OrigTranDateTime = trnmsnDateTime.InnerText;
  626. }
  627. orgAuthgrp.OrigSTAN = Convert.ToString(mtdTransaction.Stan);
  628. orgAuthgrp.OrigRespCode = Convert.ToString(mtdTransaction.ResponseCode);
  629. }
  630. _creditReq.OrigAuthGrp = orgAuthgrp;
  631. }
  632. #endregion
  633. _gmfMsgVar.Item = _creditReq;
  634. transactionRequest.Stan = cmnGrp.STAN;
  635. transactionRequest.TransRefNo = cmnGrp.RefNum;
  636. transactionRequest.TransOrderNo = cmnGrp.OrderNum;
  637. return _creditReq;
  638. }
  639. }
  640. catch (Exception ex)
  641. {
  642. _logger.LogInfoFatel(_logMessage.ToString(), ex);
  643. }
  644. return null;
  645. }
  646. /// <summary>
  647. /// Purpose : Creating credit card request
  648. /// Function Name : CreateRequest
  649. /// Created By : Salil Gupta
  650. /// Created On : 03/16/2015
  651. /// Modificatios Made : Madhuri Tanwar
  652. /// Modidified On : 06/012/2015 "MM/DD/YYYY"
  653. /// </summary>
  654. /// <param name="transactionRequest"></param>
  655. /// <returns></returns>
  656. private CreditRequestDetails CreateRetailRequest(TransactionRequest transactionRequest)
  657. {
  658. try
  659. {
  660. if (!transactionRequest.IsNull())
  661. {
  662. _logMessage.Append("Controller Name:-" + GetType().Name + "; Method Name :- " +
  663. MethodBase.GetCurrentMethod().Name + ";");
  664. _logMessage.Append(String.Format(CultureInfo.InvariantCulture,
  665. " Date:-" + DateTime.Now.ToShortDateString() + "; Time:- " + DateTime.Now.ToShortTimeString()));
  666. MTDTransactionDto mtdTransaction = new MTDTransactionDto();
  667. if (!string.IsNullOrEmpty(transactionRequest.RapidConnectAuthId))
  668. {
  669. mtdTransaction = _terminalService.Completion(
  670. transactionRequest.RapidConnectAuthId,
  671. transactionRequest.SerialNumber, transactionRequest.MtdMerchantId);
  672. if (mtdTransaction.IsNull())
  673. return null;
  674. }
  675. #region Common Group
  676. CommonGrp cmnGrp = new CommonGrp();
  677. /* The payment type of the transaction. */
  678. PymtTypeType typePayment = transactionRequest.PaymentType;
  679. cmnGrp.PymtType = typePayment;
  680. cmnGrp.PymtTypeSpecified = true;
  681. /* merchant category code. */
  682. cmnGrp.MerchCatCode = transactionRequest.MCCode;
  683. /* The type of transaction being performed. */
  684. cmnGrp.TxnType = transactionRequest.TransType;
  685. cmnGrp.TxnTypeSpecified = true;
  686. /* The local date and time in which the transaction was performed. */
  687. cmnGrp.LocalDateTime = transactionRequest.LocalDateTime;//DateTime.Now.ToString("yyyyMMddHHmmss");
  688. /* The transmission date and time of the transaction (in GMT/UCT). */
  689. cmnGrp.TrnmsnDateTime = transactionRequest.TrnmsnDateTime;//DateTime.UtcNow.ToString("yyyyMMddHHmmss");
  690. /* A number assigned by the merchant to uniquely reference the transaction.
  691. * This number must be unique within a day per Merchant ID per Terminal ID. */
  692. cmnGrp.STAN = GetSystemTraceNumber(transactionRequest.MtdMerchantId, transactionRequest.TerminalId);
  693. /* A number assigned by the merchant to uniquely reference a set of transactions. */
  694. //cmnGrp.RefNum = GetReferenceNumber(transactionRequest.MerchantID, transactionRequest.TerminalID);//"480061115979";
  695. if (string.Equals(cmnGrp.TxnType.ToString(), Completion, StringComparison.OrdinalIgnoreCase))
  696. {
  697. cmnGrp.RefNum = mtdTransaction.TransRefNo;
  698. cmnGrp.OrderNum = mtdTransaction.TransOrderNo;
  699. }
  700. else
  701. {
  702. cmnGrp.RefNum = GetReferenceNumber(transactionRequest.MtdMerchantId, transactionRequest.TerminalId);
  703. cmnGrp.OrderNum = cmnGrp.RefNum;
  704. }
  705. /* An ID assigned by First Data, for the Third Party Processor or
  706. * Software Vendor that generated the transaction. */
  707. cmnGrp.TPPID = transactionRequest.TppId;
  708. /* A unique ID assigned to a terminal. */
  709. cmnGrp.TermID = transactionRequest.TerminalId;
  710. //get terminal id from transaction request
  711. /* A unique ID assigned by First Data, to identify the Merchant. */
  712. cmnGrp.MerchID = transactionRequest.FdMerchantId;
  713. cmnGrp.GroupID = transactionRequest.GroupId;
  714. //Group ID value will be assigned by First Data.
  715. //get terminal id from transaction request
  716. cmnGrp.POSEntryMode = PaymentAPIResources.RetailPosEntryMode;
  717. cmnGrp.POSCondCode = POSCondCodeType.Item00;
  718. cmnGrp.POSCondCodeSpecified = true;
  719. cmnGrp.TermCatCode = TermCatCodeType.Item01;
  720. cmnGrp.TermCatCodeSpecified = true;
  721. cmnGrp.TermEntryCapablt = TermEntryCapabltType.Item04;
  722. cmnGrp.TermEntryCapabltSpecified = true;
  723. cmnGrp.TermLocInd = TermLocIndType.Item0;
  724. cmnGrp.TermLocIndSpecified = true;
  725. cmnGrp.CardCaptCap = CardCaptCapType.Item1;
  726. cmnGrp.CardCaptCapSpecified = true;
  727. /* The amount of the transaction. This may be an authorization amount,
  728. * adjustment amount or a reversal amount based on the type of transaction.
  729. * It is inclusive of all additional amounts.
  730. * It is submitted in the currency represented by the Transaction Currency field.
  731. * The field is overwritten in the response for a partial authorization. */
  732. double num = Convert.ToDouble(transactionRequest.TransactionAmount);
  733. string amt = num.ToString("0.00").Replace(".", string.Empty);
  734. cmnGrp.TxnAmt = Convert.ToString(amt);
  735. cmnGrp.TxnAmt = cmnGrp.TxnAmt.PadLeft(12, '0');
  736. /* The numeric currency of the Transaction Amount. */
  737. cmnGrp.TxnCrncy = PaymentAPIResources.Cur_USA;
  738. _creditReq.CommonGrp = cmnGrp;
  739. #endregion
  740. #region Transarmor group
  741. CardGrp cardGrp = new CardGrp();
  742. if (string.Equals(cmnGrp.TxnType.ToString(), Authorization, StringComparison.CurrentCultureIgnoreCase) || string.Equals(cmnGrp.TxnType.ToString(), Sale, StringComparison.CurrentCultureIgnoreCase))
  743. {
  744. cardGrp.CardType = transactionRequest.CardType;
  745. cardGrp.CardTypeSpecified = true;
  746. _creditReq.CardGrp = cardGrp;
  747. TAGrp taGrp = new TAGrp();
  748. taGrp.SctyLvl = SctyLvlType.EncrptTknizatn;
  749. taGrp.SctyLvlSpecified = true;
  750. taGrp.EncrptType = EncrptTypeType.RSA;
  751. taGrp.EncrptTypeSpecified = true;
  752. taGrp.EncrptTrgt = EncrptTrgtType.Track2;
  753. taGrp.EncrptTrgtSpecified = true;
  754. taGrp.KeyID = transactionRequest.KeyId;
  755. taGrp.EncrptBlock = transactionRequest.Track3Data;
  756. taGrp.TknType = transactionRequest.TokenType;
  757. _creditReq.TAGrp = taGrp;
  758. }
  759. if (string.Equals(cmnGrp.TxnType.ToString(), Completion, StringComparison.CurrentCultureIgnoreCase) || string.Equals(cmnGrp.TxnType.ToString(), Refund, StringComparison.CurrentCultureIgnoreCase))
  760. {
  761. if (mtdTransaction != null) cardGrp.CardType = (CardTypeType)Enum.Parse(typeof(CardTypeType), mtdTransaction.CardType);
  762. transactionRequest.CardType = cardGrp.CardType;
  763. cardGrp.CardTypeSpecified = true;
  764. _creditReq.CardGrp = cardGrp;
  765. TAGrp taGrp = new TAGrp();
  766. taGrp.SctyLvl = SctyLvlType.EncrptTknizatn;
  767. taGrp.SctyLvlSpecified = true;
  768. taGrp.Tkn = mtdTransaction.CardToken.Decrypt();
  769. taGrp.TknType = transactionRequest.TokenType;
  770. _creditReq.TAGrp = taGrp;
  771. }
  772. #endregion
  773. if (!string.Equals(cmnGrp.TxnType.ToString(), Completion, StringComparison.OrdinalIgnoreCase) && !string.Equals(cmnGrp.TxnType.ToString(), Refund, StringComparison.OrdinalIgnoreCase))
  774. {
  775. #region Additional Amount Group
  776. AddtlAmtGrp addAmtGrp = new AddtlAmtGrp();
  777. addAmtGrp.PartAuthrztnApprvlCapablt = PartAuthrztnApprvlCapabltType.Item1;
  778. addAmtGrp.PartAuthrztnApprvlCapabltSpecified = true;
  779. AddtlAmtGrp[] addAmtGrpArr = new AddtlAmtGrp[1];
  780. addAmtGrpArr[0] = addAmtGrp;
  781. _creditReq.AddtlAmtGrp = addAmtGrpArr;
  782. #endregion
  783. }
  784. #region Visa Group
  785. if (string.Equals(cardGrp.CardType.ToString(), Visa, StringComparison.OrdinalIgnoreCase) && !string.Equals(cmnGrp.TxnType.ToString(), Refund, StringComparison.OrdinalIgnoreCase))
  786. {
  787. VisaGrp visaGrp = new VisaGrp();
  788. visaGrp.VisaBID = PaymentAPIResources.VisaBID;
  789. visaGrp.VisaAUAR = PaymentAPIResources.VisaAUAR;
  790. if (!string.Equals(cmnGrp.TxnType.ToString(), Completion, StringComparison.OrdinalIgnoreCase))
  791. {
  792. visaGrp.ACI = ACIType.Y;
  793. visaGrp.ACISpecified = true;
  794. visaGrp.TaxAmtCapablt = TaxAmtCapabltType.Item1;
  795. visaGrp.TaxAmtCapabltSpecified = true;
  796. }
  797. else
  798. if (mtdTransaction != null)
  799. {
  800. XmlDocument xmlDoc = new XmlDocument();
  801. xmlDoc.LoadXml(mtdTransaction.ResponseXml);
  802. string xmlString = CommonFunctions.GetXmlAsString(xmlDoc);
  803. var response = CommonFunctions.GetMCResponse(xmlString);
  804. xmlDoc.LoadXml(response);
  805. var aCI = xmlDoc.SelectSingleNode("CreditResponse/VisaGrp/ACI");
  806. if (aCI != null)
  807. {
  808. visaGrp.ACI = (ACIType)Enum.Parse(typeof(ACIType), aCI.InnerText);
  809. visaGrp.ACISpecified = true;
  810. }
  811. var cardLevelResult = xmlDoc.SelectSingleNode("CreditResponse/VisaGrp/CardLevelResult");
  812. if (cardLevelResult != null)
  813. {

Large files files are truncated, but you can click here to view the full file