예제 #1
0
        public void SaleWithInvoiceNumber()
        {
            var card = new HpsGiftCard()
            {
                Value = "5022440000000000098"
            };

            _device.OnMessageSent += (message) =>
            {
                Assert.IsNotNull(message);
                Assert.IsTrue(message.StartsWith("[STX]T06[FS]1.35[FS]01[FS]800[FS]5022440000000000098[FS]4[US]1234[FS][FS][ETX]"));
            };

            var details = new HpsTransactionDetails {
                InvoiceNumber = "1234"
            };

            var response = _device.GiftSale(4, 8m)
                           .WithCard(card)
                           .WithDetails(details)
                           .Execute();

            Assert.IsNotNull(response);
            Assert.AreEqual("0", response.ResponseCode);
        }
예제 #2
0
        /// <summary>
        /// An <b>AddValue</b> transaction is used to add an amount to the value of an active gift card.
        /// </summary>
        /// <param name="amount">The amount (in dollars).</param>
        /// <param name="currency">Transaction currency.</param>
        /// <param name="giftCard">The gift card information.</param>
        /// <returns>The <see cref="HpsGiftCardAddValue"/>.</returns>
        public HpsGiftCardResponse AddValue(decimal amount, string currency, HpsGiftCard giftCard)
        {
            HpsInputValidation.CheckAmount(amount);
            HpsInputValidation.CheckCurrency(currency);

            /* Build the transaction request. */
            var transaction = new PosRequestVer10Transaction
            {
                Item = new PosGiftCardAddValueReqType
                {
                    Block1 = new GiftCardAddValueReqBlock1Type
                    {
                        Amt      = amount,
                        CardData = new GiftCardDataType
                        {
                            Item            = giftCard.Value,
                            ItemElementName = giftCard.ValueType,
                            EncryptionData  = (giftCard.EncryptionData == null) ? null : new EncryptionDataType
                            {
                                EncryptedTrackNumber = giftCard.EncryptionData.EncryptedTrackNumber,
                                KSN     = giftCard.EncryptionData.Ksn,
                                KTB     = giftCard.EncryptionData.Ktb,
                                Version = giftCard.EncryptionData.Version
                            }
                        }
                    }
                },
                ItemElementName = ItemChoiceType1.GiftCardAddValue
            };

            /* Submit the transaction. */
            return(SubmitAddValue(transaction));
        }
예제 #3
0
 public CreditChargeBuilder WithRewards(string cardNumber)
 {
     this.rewards = new HpsGiftCard {
         Value     = cardNumber,
         ValueType = ItemChoiceType.CardNbr
     };
     return(this);
 }
        internal GiftCardDataType HydrateGiftCardData(HpsGiftCard card, string elementName = "CardData")
        {
            GiftCardDataType cardElement = new GiftCardDataType {
                Item            = card.Value,
                ItemElementName = card.ValueType,
                EncryptionData  = HydrateEncryptionData(card.EncryptionData),
                PIN             = card.Pin
            };

            return(cardElement);
        }
예제 #5
0
        /// <summary>
        /// A <b>Alias</b> transaction is used to manage an account number alias, such as a phone number,
        /// for a stored value account. The transaction can be used to Add an alias to an existing account,
        /// Delete an alias from an existing account or Create a new stored value account and add an alias
        /// to the new account.
        /// </summary>
        /// <param name="action">Type of Alias action requested.</param>
        /// <param name="giftCard">The gift card information (leave null for CREATE action).</param>
        /// <param name="alias">Alternate identifier used to reference a stored value account.</param>
        /// <returns>The <see cref="HpsGiftCardAlias"/>.</returns>
        public HpsGiftCardAlias Alias(HpsGiftCardAliasAction action, HpsGiftCard giftCard, string alias)
        {
            var gatewayAction = GiftCardAliasReqBlock1TypeAction.ADD;

            switch (action)
            {
            case HpsGiftCardAliasAction.Create: gatewayAction = GiftCardAliasReqBlock1TypeAction.CREATE; break;

            case HpsGiftCardAliasAction.Delete: gatewayAction = GiftCardAliasReqBlock1TypeAction.DELETE; break;
            }

            /* Build the transaction request. */
            var transaction = new PosRequestVer10Transaction
            {
                Item = new PosGiftCardAliasReqType
                {
                    Block1 = new GiftCardAliasReqBlock1Type
                    {
                        Action   = gatewayAction,
                        Alias    = alias,
                        CardData = HydrateGiftCardData(giftCard)
                    }
                },
                ItemElementName = ItemChoiceType1.GiftCardAlias
            };

            /* Submit the transaction. */
            var rsp = DoTransaction(transaction).Ver10;

            HpsGatewayResponseValidation.CheckResponse(rsp, ItemChoiceType2.GiftCardAlias);

            var aliasRsp = (PosGiftCardAliasRspType)rsp.Transaction.Item;

            HpsIssuerResponseValidation.CheckResponse(rsp.Header.GatewayTxnId,
                                                      aliasRsp.RspCode.ToString(CultureInfo.InvariantCulture), aliasRsp.RspText, HpsCardType.Gift);

            /* Start to fill out a new transaction response (HpsGiftCardAddValue). */
            var response = new HpsGiftCardAlias
            {
                Header        = HydrateTransactionHeader(rsp.Header),
                TransactionId = rsp.Header.GatewayTxnId,
                GiftCard      = new HpsGiftCard
                {
                    Value = aliasRsp.CardData.CardNbr
                },
                ResponseCode = aliasRsp.RspCode.ToString(CultureInfo.InvariantCulture),
                ResponseText = aliasRsp.RspText
            };

            return(response);
        }
예제 #6
0
 private static GiftCardDataType HydrateGiftCardData(HpsGiftCard giftCard)
 {
     return(new GiftCardDataType
     {
         Item = giftCard.Value,
         ItemElementName = giftCard.ValueType,
         EncryptionData = (giftCard.EncryptionData == null) ? null : new EncryptionDataType
         {
             EncryptedTrackNumber = giftCard.EncryptionData.EncryptedTrackNumber,
             KSN = giftCard.EncryptionData.Ksn,
             KTB = giftCard.EncryptionData.Ktb,
             Version = giftCard.EncryptionData.Version
         }
     });
 }
예제 #7
0
        public void SaleManual()
        {
            var card = new HpsGiftCard()
            {
                Value = "5022440000000000098"
            };

            _device.OnMessageSent += (message) =>
            {
                Assert.IsNotNull(message);
                Assert.IsTrue(message.StartsWith("[STX]T06[FS]1.35[FS]01[FS]1000[FS]5022440000000000098[FS]2[FS][FS][ETX]"));
            };

            var response = _device.GiftSale(2, 10m)
                           .WithCard(card)
                           .Execute();

            Assert.IsNotNull(response);
            Assert.AreEqual("0", response.ResponseCode);
        }
예제 #8
0
        /// <summary>
        /// A <b>Balance</b> transaction is used to check the balance of a gift card.
        /// </summary>
        /// <param name="giftCard">The gift card information.</param>
        /// <returns>The <see cref="HpsGiftCardBalance"/>.</returns>
        public HpsGiftCardResponse GetBalance(HpsGiftCard giftCard)
        {
            /* Build the transaction request. */
            var transaction = new PosRequestVer10Transaction
            {
                Item = new PosGiftCardBalanceReqType
                {
                    Block1 = new GiftCardBalanceReqBlock1Type
                    {
                        CardData = HydrateGiftCardData(giftCard)
                    }
                },
                ItemElementName = ItemChoiceType1.GiftCardBalance
            };

            /* Submit the transaction. */
            var rsp = DoTransaction(transaction).Ver10;

            HpsGatewayResponseValidation.CheckResponse(rsp, ItemChoiceType2.GiftCardBalance);

            var balanceRsp = (PosGiftCardBalanceRspType)rsp.Transaction.Item;

            HpsIssuerResponseValidation.CheckResponse(rsp.Header.GatewayTxnId,
                                                      balanceRsp.RspCode.ToString(CultureInfo.InvariantCulture), balanceRsp.RspText, HpsCardType.Gift);

            /* Start to fill out a new transaction response (HpsGiftCardAddValue). */
            var response = new HpsGiftCardResponse
            {
                Header              = HydrateTransactionHeader(rsp.Header),
                TransactionId       = rsp.Header.GatewayTxnId,
                AuthorizationCode   = balanceRsp.AuthCode,
                BalanceAmount       = balanceRsp.BalanceAmt,
                PointsBalanceAmount = balanceRsp.PointsBalanceAmt,
                Rewards             = balanceRsp.Rewards,
                Notes        = balanceRsp.Notes,
                ResponseCode = balanceRsp.RspCode.ToString(CultureInfo.InvariantCulture),
                ResponseText = balanceRsp.RspText
            };

            return(response);
        }
예제 #9
0
        public void BalanceLoyaltyManual()
        {
            var card = new HpsGiftCard()
            {
                Value = "5022440000000000098"
            };

            _device.OnMessageSent += (message) =>
            {
                Assert.IsNotNull(message);
                Assert.IsTrue(message.StartsWith("[STX]T08[FS]1.35[FS]23[FS][FS]5022440000000000098[FS]18[FS][FS][ETX]"));
            };

            var response = _device.GiftBalance(18)
                           .WithCard(card)
                           .WithCurrency(currencyType.POINTS)
                           .Execute();

            Assert.IsNotNull(response);
            Assert.AreEqual("0", response.ResponseCode);
        }
예제 #10
0
        public void VoidManual()
        {
            var card = new HpsGiftCard()
            {
                Value = "5022440000000000098"
            };
            var saleResponse = _device.GiftSale(13).WithAmount(10m).WithCard(card).Execute();

            _device.OnMessageSent += (message) =>
            {
                Assert.IsNotNull(message);
                Assert.IsTrue(message.StartsWith("[STX]T06[FS]1.35[FS]16[FS][FS][FS]13[FS][FS]HREF=" + saleResponse.TransactionId + "[ETX]"));
            };

            var voidResponse = _device.GiftVoid(13)
                               .WithTransactionId(saleResponse.TransactionId)
                               .Execute();

            Assert.IsNotNull(voidResponse);
            Assert.AreEqual("0", voidResponse.ResponseCode);
        }
예제 #11
0
        /// <summary>
        /// A <b>Reverse</b> transaction is used to cancel a previously approved Sale, Activate, or AddValue
        /// from the current open batch. If successful, the gift card balance is restored to the amount prior
        /// to the transaction being reversed.
        /// </summary>
        /// <param name="giftCard">The gift card information.</param>
        /// <param name="amount">Amount of the transaction to be reversed.</param>
        /// <param name="currency">Identifies the currency of a financial transaction ("usd" or "points")</param>
        /// <returns>The <see cref="HpsGiftCardReward"/>.</returns>
        public HpsGiftCardResponse Reverse(HpsGiftCard giftCard, decimal amount, string currency = "usd")
        {
            HpsInputValidation.CheckAmount(amount);
            HpsInputValidation.CheckCurrency(currency);

            /* Build the transaction request. */
            var transaction = new PosRequestVer10Transaction
            {
                Item = new PosGiftCardReversalReqType
                {
                    Block1 = new GiftCardReversalReqBlock1Type
                    {
                        Amt      = amount,
                        CardData = HydrateGiftCardData(giftCard)
                    }
                },
                ItemElementName = ItemChoiceType1.GiftCardReversal
            };

            /* Submit the transaction. */
            return(SubmitReversal(transaction));
        }
예제 #12
0
 public CreditChargeBuilder WithRewards(HpsGiftCard card)
 {
     this.rewards = card;
     return(this);
 }
예제 #13
0
 public GiftBalanceBuilder WithCard(HpsGiftCard value)
 {
     this.card = value;
     return(this);
 }
 public GiftCardReverseBuilder WithCard(HpsGiftCard value)
 {
     this.card = value;
     return(this);
 }
예제 #15
0
        /// <summary>
        /// A <b>Sale</b> transaction is used to record a sale against the gift card. If successful, the card
        /// amount is subtracted from the gift card amount.
        /// </summary>
        /// <param name="giftCard">The gift card information.</param>
        /// <param name="amount">The amount of purchase to be used in rewards calculation.</param>
        /// <param name="currency">Identifies the currency of a financial transaction ("usd" or "points")</param>
        /// <param name="gratuity">The portion of the purchase amount that is a gratuity</param>
        /// <param name="tax">The portion of the purchase amount that is tax</param>
        /// <returns>The <see cref="HpsGiftCardReward"/>.</returns>
        public HpsGiftCardSale Sale(HpsGiftCard giftCard, decimal amount, string currency = "usd",
                                    decimal?gratuity = null, decimal?tax = null)
        {
            currency = currency.ToLower();
            HpsInputValidation.CheckAmount(amount);

            /* Build the transaction request. */
            var transaction = new PosRequestVer10Transaction
            {
                Item = new PosGiftCardSaleReqType
                {
                    Block1 = new GiftCardSaleReqBlock1Type
                    {
                        Amt      = amount,
                        CardData = HydrateGiftCardData(giftCard)
                    }
                },
                ItemElementName = ItemChoiceType1.GiftCardSale
            };

            var block = ((PosGiftCardSaleReqType)transaction.Item).Block1;

            if (currency == "usd" || currency == "points")
            {
                block.Currency          = currency == "usd" ? currencyType.USD : currencyType.POINTS;
                block.CurrencySpecified = true;
            }

            if (gratuity != null)
            {
                block.GratuityAmtInfo          = gratuity.Value;
                block.GratuityAmtInfoSpecified = true;
            }

            if (tax != null)
            {
                block.TaxAmtInfo          = tax.Value;
                block.TaxAmtInfoSpecified = true;
            }

            /* Submit the transaction. */
            var rsp = DoTransaction(transaction).Ver10;

            HpsGatewayResponseValidation.CheckResponse(rsp, ItemChoiceType2.GiftCardSale);

            var saleRsp = (PosGiftCardSaleRspType)rsp.Transaction.Item;

            HpsIssuerResponseValidation.CheckResponse(rsp.Header.GatewayTxnId,
                                                      saleRsp.RspCode.ToString(CultureInfo.InvariantCulture), saleRsp.RspText, HpsCardType.Gift);

            /* Start to fill out a new transaction response. */
            var response = new HpsGiftCardSale
            {
                Header                = HydrateTransactionHeader(rsp.Header),
                TransactionId         = rsp.Header.GatewayTxnId,
                AuthorizationCode     = saleRsp.AuthCode,
                BalanceAmount         = saleRsp.BalanceAmt,
                SplitTenderCardAmount = saleRsp.SplitTenderCardAmt,
                SplitTenderBalanceDue = saleRsp.SplitTenderBalanceDueAmt,
                PointsBalanceAmount   = saleRsp.PointsBalanceAmt,
                ResponseCode          = saleRsp.RspCode.ToString(CultureInfo.InvariantCulture),
                ResponseText          = saleRsp.RspText
            };

            return(response);
        }
 public GiftCardActivateBuilder WithCard(HpsGiftCard value)
 {
     this.card = value;
     return(this);
 }
 public GiftCardReplaceBuilder WithOldCard(HpsGiftCard value)
 {
     this.oldCard = value;
     return(this);
 }