コード例 #1
0
        protected override void ParseResponse(BinaryReader br)
        {
            base.ParseResponse(br);

            if (DeviceResponseCode == "000000")
            {
                HostResponse       = new HostResponse(br);
                TransactionType    = ((TerminalTransactionType)Int32.Parse(br.ReadToCode(ControlCodes.FS))).ToString().Replace("_", " ");
                AmountResponse     = new AmountResponse(br);
                AccountResponse    = new AccountResponse(br);
                TraceResponse      = new TraceResponse(br);
                AvsResponse        = new AvsResponse(br);
                CommercialResponse = new CommercialResponse(br);
                EcomResponse       = new EcomSubGroup(br);
                ExtDataResponse    = new ExtDataSubGroup(br);

                MapResponse();
            }
        }
コード例 #2
0
        internal override TerminalResponse ProcessTransaction(TerminalAuthBuilder builder)
        {
            // create sub groups
            var amounts = new AmountRequest();
            var account = new AccountRequest();
            var avs     = new AvsRequest();
            var trace   = new TraceRequest {
                ReferenceNumber = builder.ReferenceNumber.ToString()
            };
            var cashier    = new CashierSubGroup();
            var commercial = new CommercialRequest();
            var ecom       = new EcomSubGroup();
            var extData    = new ExtDataSubGroup();

            // amounts sub group
            amounts.TransactionAmount = "{0:c}".FormatWith(builder.Amount).ToNumeric();
            amounts.CashBackAmount    = "{0:c}".FormatWith(builder.CashBackAmount).ToNumeric();
            amounts.TipAmount         = "{0:c}".FormatWith(builder.Gratuity).ToNumeric();
            amounts.TaxAmount         = "{0:c}".FormatWith(builder.TaxAmount).ToNumeric();

            // account sub group
            if (builder.PaymentMethod != null)
            {
                if (builder.PaymentMethod is CreditCardData)
                {
                    var card = builder.PaymentMethod as CreditCardData;
                    if (string.IsNullOrEmpty(card.Token))
                    {
                        account.AccountNumber = card.Number;
                        account.EXPD          = "{0}{1}".FormatWith(card.ExpMonth, card.ExpYear);
                        if (builder.TransactionType != TransactionType.Verify && builder.TransactionType != TransactionType.Refund)
                        {
                            account.CvvCode = card.Cvn;
                        }
                    }
                    else
                    {
                        extData[EXT_DATA.TOKEN] = card.Token;
                    }
                }
                else if (builder.PaymentMethod is TransactionReference)
                {
                    var reference = builder.PaymentMethod as TransactionReference;
                    if (!string.IsNullOrEmpty(reference.AuthCode))
                    {
                        trace.AuthCode = reference.AuthCode;
                    }
                    if (!string.IsNullOrEmpty(reference.TransactionId))
                    {
                        extData[EXT_DATA.HOST_REFERENCE_NUMBER] = reference.TransactionId;
                    }
                }
                else if (builder.PaymentMethod is GiftCard)
                {
                    var card = builder.PaymentMethod as GiftCard;
                    account.AccountNumber = card.Number;
                }
                else if (builder.PaymentMethod is EBTCardData)
                {
                    var card = builder.PaymentMethod as EBTCardData;
                }
            }
            if (builder.AllowDuplicates)
            {
                account.DupOverrideFlag = "1";
            }

            // Avs Sub Group
            if (builder.Address != null)
            {
                avs.ZipCode = builder.Address.PostalCode;
                avs.Address = builder.Address.StreetAddress1;
            }

            // Trace Sub Group
            trace.InvoiceNumber = builder.InvoiceNumber;

            // Commercial Group
            commercial.CustomerCode = builder.CustomerCode;
            commercial.PoNumber     = builder.PoNumber;
            commercial.TaxExempt    = builder.TaxExempt;
            commercial.TaxExemptId  = builder.TaxExemptId;

            // Additional Info sub group
            if (builder.RequestMultiUseToken)
            {
                extData[EXT_DATA.TOKEN_REQUEST] = "1";
            }

            if (builder.SignatureCapture)
            {
                extData[EXT_DATA.SIGNATURE_CAPTURE] = "1";
            }

            string transType = MapTransactionType(builder.TransactionType, builder.RequestMultiUseToken);

            switch (builder.PaymentMethodType)
            {
            case PaymentMethodType.Credit:
                return(DoCredit(transType, amounts, account, trace, avs, cashier, commercial, ecom, extData));

            case PaymentMethodType.Debit:
                return(DoDebit(transType, amounts, account, trace, cashier, extData));

            case PaymentMethodType.Gift:
                var messageId = builder.Currency == CurrencyType.CURRENCY ? PAX_MSG_ID.T06_DO_GIFT : PAX_MSG_ID.T08_DO_LOYALTY;
                return(DoGift(messageId, transType, amounts, account, trace, cashier, extData));

            case PaymentMethodType.EBT:
                if (builder.Currency != null)
                {
                    account.EbtType = builder.Currency.ToString().Substring(0, 1);
                }
                return(DoEBT(transType, amounts, account, trace, cashier));

            default:
                throw new UnsupportedTransactionException();
            }
        }
コード例 #3
0
        internal CreditResponse DoCredit(string txnType, AmountRequest amounts, AccountRequest accounts, TraceRequest trace, AvsRequest avs, CashierSubGroup cashier, CommercialRequest commercial, EcomSubGroup ecom, ExtDataSubGroup extData)
        {
            var response = DoTransaction(PAX_MSG_ID.T00_DO_CREDIT, txnType, amounts, accounts, trace, avs, cashier, commercial, ecom, extData);

            return(new CreditResponse(response));
        }
コード例 #4
0
 internal IDeviceMessage BuildCredit(string txnType, AmountRequest amounts, AccountRequest accounts, TraceRequest trace, AvsRequest avs, CashierSubGroup cashier, CommercialRequest commercial, EcomSubGroup ecom, ExtDataSubGroup extData)
 {
     return(BuildRequest(PAX_MSG_ID.T00_DO_CREDIT, txnType, amounts, accounts, trace, avs, cashier, commercial, ecom, extData));
 }