示例#1
0
        public Transaction ProcessAuthorization(AuthorizationBuilder builder)
        {
            var request = new TransitRequest(MapTransactionType(builder))
                          .Set("developerID", DeveloperId)
                          .Set("deviceID", DeviceId)
                          .Set("transactionKey", TransactionKey)
                          .Set("transactionAmount", builder.Amount.ToCurrencyString());

            request.Set("cardDataSource", MapCardDataSource(builder));
            if (builder.PaymentMethod is ICardData card)
            {
                request.Set("cardNumber", card.Number)
                .Set("expirationDate", card.ShortExpiry)
                .Set("cvv2", card.Cvn)
                .Set("cardPresentDetail", card.CardPresent ? "CARD_PRESENT" : "CARD_NOT_PRESENT")
                .Set("cardholderPresentDetail", card.CardPresent ? "CARDHOLDER_PRESENT" : "CARDHOLDER_NOT_PRESENT_ELECTRONIC_COMMERCE")
                .Set("cardDataInputMode", card.CardPresent ? "KEY_ENTERED_INPUT" : "PAN_ENTRY_ELECTRONIC_COMMERCE_INCLUDING_REMOTE_CHIP")
                .Set("cardholderAuthenticationMethod", "UNKNOWN");
            }
            else if (builder.PaymentMethod is ITrackData track)
            {
                request.Set(track.TrackNumber.Equals(TrackNumber.TrackTwo) ? "track2Data" : "track1Data", track.TrackData);
                request.Set("cardPresentDetail", "CARD_PRESENT")
                .Set("cardholderPresentDetail", "CARDHOLDER_PRESENT")
                .Set("cardDataInputMode", "MAGNETIC_STRIPE_READER_INPUT")
                .Set("cardholderAuthenticationMethod", "UNKNOWN");

                if (builder.HasEmvFallbackData)
                {
                    request.Set("emvFallbackCondition", EnumConverter.GetMapping(Target.Transit, builder.EmvFallbackCondition))
                    .Set("lastChipRead", EnumConverter.GetMapping(Target.Transit, builder.EmvLastChipRead))
                    .Set("paymentAppVersion", builder.PaymentApplicationVersion ?? "unspecified");
                }
            }

            // PIN Debit
            if (builder.PaymentMethod is IPinProtected pinProtected)
            {
                request.Set("pin", pinProtected.PinBlock.Substring(0, 16))
                .Set("pinKsn", pinProtected.PinBlock.Substring(16));
            }

            // Acceptor Config
            request.Set("terminalCapability", EnumConverter.GetMapping(Target.Transit, AcceptorConfig.CardDataInputCapability))
            .Set("terminalCardCaptureCapability", AcceptorConfig.CardCaptureCapability ? "CARD_CAPTURE_CAPABILITY" : "NO_CAPABILITY")
            .Set("terminalOperatingEnvironment", EnumConverter.GetMapping(Target.Transit, AcceptorConfig.OperatingEnvironment))
            .Set("cardholderAuthenticationEntity", EnumConverter.GetMapping(Target.Transit, AcceptorConfig.CardHolderAuthenticationEntity))
            .Set("cardDataOutputCapability", EnumConverter.GetMapping(Target.Transit, AcceptorConfig.CardDataOutputCapability))
            .Set("terminalAuthenticationCapability", EnumConverter.GetMapping(Target.Transit, AcceptorConfig.CardHolderAuthenticationCapability))
            .Set("terminalOutputCapability", EnumConverter.GetMapping(Target.Transit, AcceptorConfig.TerminalOutputCapability))
            .Set("maxPinLength", EnumConverter.GetMapping(Target.Transit, AcceptorConfig.PinCaptureCapability));

            string response = DoTransaction(request.BuildRequest(builder));

            return(MapResponse(builder, response));
        }
示例#2
0
        public Transaction ManageTransaction(ManagementBuilder builder)
        {
            var request = new TransitRequest(MapTransactionType(builder))
                          .Set("developerID", DeveloperId)
                          .Set("deviceID", DeviceId)
                          .Set("transactionKey", TransactionKey)
                          .Set("transactionAmount", builder.Amount.ToCurrencyString())
                          .Set("tip", builder.Gratuity.ToCurrencyString())
                          .Set("transactionID", builder.TransactionId)
                          .Set("isPartialShipment", builder.MultiCapture ? "Y" : null);

            string response = DoTransaction(request.BuildRequest(builder));

            return(MapResponse(builder, response));
        }