Exemple #1
0
        public HpsCheckResponse BuildTransaction(checkActionType action, HpsCheck check, decimal?amount, long?clientTransactionId = null, bool checkVerify = false, bool achVerify = false)
        {
            if (amount.HasValue)
            {
                HpsInputValidation.CheckAmount(amount.Value);
            }

            if (check.SecCode == "CCD" && (check.CheckHolder == null || check.CheckHolder.CheckName == null))
            {
                throw new HpsInvalidRequestException(HpsExceptionCodes.MissingCheckName, "For SEC Code CCD the check name is required.", "CheckName");
            }

            var block1 = new CheckSaleReqBlock1Type {
                CheckAction            = action,
                SECCode                = check.SecCode,
                AccountInfo            = HydrateCheckData(check),
                AmtSpecified           = amount.HasValue,
                CheckTypeSpecified     = check.CheckType.HasValue,
                DataEntryModeSpecified = check.DataEntryMode.HasValue,
                VerifyInfo             = new VerifyInfoType {
                    ACHVerify            = achVerify ? booleanType.Y : booleanType.N,
                    ACHVerifySpecified   = true,
                    CheckVerify          = checkVerify ? booleanType.Y : booleanType.N,
                    CheckVerifySpecified = true
                }
            };

            if (block1.AmtSpecified)
            {
                block1.Amt = amount.Value;
            }

            if (block1.CheckTypeSpecified)
            {
                block1.CheckType = check.CheckType.Value;
            }
            if (block1.DataEntryModeSpecified)
            {
                block1.DataEntryMode = check.DataEntryMode.Value;
            }
            if (check.CheckHolder != null)
            {
                block1.ConsumerInfo = HydrateConsumerInfo(check.CheckHolder);
            }

            var transaction = new PosRequestVer10Transaction {
                Item = new PosCheckSaleReqType {
                    Block1 = block1
                },
                ItemElementName = ItemChoiceType1.CheckSale
            };

            return(SubmitTransaction(transaction, clientTransactionId));
        }
        public HpsCheckResponse BuildTransaction(checkActionType action, HpsCheck check, decimal? amount, long? clientTransactionId = null, bool checkVerify = false, bool achVerify = false) {
            if (amount.HasValue)
                HpsInputValidation.CheckAmount(amount.Value);

            if (check.SecCode == "CCD" && (check.CheckHolder == null || check.CheckHolder.CheckName == null))
                throw new HpsInvalidRequestException(HpsExceptionCodes.MissingCheckName, "For SEC Code CCD the check name is required.", "CheckName");

            var block1 = new CheckSaleReqBlock1Type {
                CheckAction = action,
                SECCode = check.SecCode,
                AccountInfo = HydrateCheckData(check),
                AmtSpecified = amount.HasValue,
                CheckTypeSpecified = check.CheckType.HasValue,
                DataEntryModeSpecified = check.DataEntryMode.HasValue,
                VerifyInfo = new VerifyInfoType {
                    ACHVerify = achVerify ? booleanType.Y : booleanType.N,
                    ACHVerifySpecified = true,
                    CheckVerify = checkVerify ? booleanType.Y : booleanType.N,
                    CheckVerifySpecified = true
                }
            };

            if (block1.AmtSpecified)
                block1.Amt = amount.Value;

            if (block1.CheckTypeSpecified)
                block1.CheckType = check.CheckType.Value;
            if (block1.DataEntryModeSpecified)
                block1.DataEntryMode = check.DataEntryMode.Value;
            if (check.CheckHolder != null)
                block1.ConsumerInfo = HydrateConsumerInfo(check.CheckHolder);

            var transaction = new PosRequestVer10Transaction {
                Item = new PosCheckSaleReqType {
                    Block1 = block1
                },
                ItemElementName = ItemChoiceType1.CheckSale
            };

            return SubmitTransaction(transaction, clientTransactionId);
        }
        /// <summary>
        /// A <b>Sale</b> transaction is used to process transactions using bank account information as the payment method.
        /// The transaction service can be used to perform a Sale or Return transaction by indicating the Check Action.
        /// <br></br><br></br>
        /// <b>NOTE:</b> The Portico Gateway supports both GETI and HPS Colonnade for processing check transactions. While
        /// the available services are the same regardless of the check processor, the services may have different behaviors.
        /// For example, GETI-processed Check Sale transactions support the ability to override a Check Sale transaction
        /// already presented as well as the ability to verify a check.
        /// </summary>
        /// <param name="action">Type of Check Action (Sale, Return, Override).</param>
        /// <param name="check">The Check information.</param>
        /// <param name="amount">The amount of the sale.</param>
        /// <returns>The <see cref="HpsCheckResponse"/>.</returns>
        public HpsCheckResponse Sale(checkActionType action, HpsCheck check, decimal amount)
        {
            HpsInputValidation.CheckAmount(amount);

            /* Build the transaction request. */
            var transaction = new PosRequestVer10Transaction
            {
                Item = new PosCheckSaleReqType
                {
                    Block1 = new CheckSaleReqBlock1Type
                    {
                        Amt         = amount,
                        AccountInfo = new AccountInfoType
                        {
                            AccountNumber = check.AccountNumber,
                            CheckNumber   = check.CheckNumber,
                            MICRData      = check.MicrNumber,
                            RoutingNumber = check.RoutingNumber
                        },
                        AmtSpecified = true,
                        CheckAction  = action,
                        SECCode      = check.SecCode,
                        VerifyInfo   = new VerifyInfoType
                        {
                            CheckVerify          = check.CheckVerify ? booleanType.Y : booleanType.N,
                            CheckVerifySpecified = true,
                            ACHVerify            = check.AchVerify ? booleanType.Y : booleanType.N,
                            ACHVerifySpecified   = true
                        }
                    }
                },
                ItemElementName = ItemChoiceType1.CheckSale
            };

            var block1 = ((PosCheckSaleReqType)transaction.Item).Block1;

            if (check.AccountType.HasValue)
            {
                block1.AccountInfo.AccountType          = check.AccountType.Value;
                block1.AccountInfo.AccountTypeSpecified = true;
            }
            else
            {
                block1.AccountInfo.AccountTypeSpecified = false;
            }

            if (check.CheckType.HasValue)
            {
                block1.CheckType          = check.CheckType.Value;
                block1.CheckTypeSpecified = true;
            }
            else
            {
                block1.CheckTypeSpecified = false;
            }

            if (check.DataEntryMode.HasValue)
            {
                block1.DataEntryMode          = check.DataEntryMode.Value;
                block1.DataEntryModeSpecified = true;
            }
            else
            {
                block1.DataEntryModeSpecified = false;
            }

            if (check.CheckHolder != null)
            {
                block1.ConsumerInfo = new ConsumerInfoType
                {
                    Address1     = check.CheckHolder.Address != null ? check.CheckHolder.Address.Address : null,
                    CheckName    = check.CheckHolder.CheckName,
                    City         = check.CheckHolder.Address != null ? check.CheckHolder.Address.City : null,
                    CourtesyCard = check.CheckHolder.CourtesyCard,
                    DLNumber     = check.CheckHolder.DlNumber,
                    DLState      = check.CheckHolder.DlState,
                    EmailAddress = check.CheckHolder.Email,
                    FirstName    = check.CheckHolder.FirstName,
                    LastName     = check.CheckHolder.LastName,
                    PhoneNumber  = check.CheckHolder.Phone,
                    State        = check.CheckHolder.Address != null ? check.CheckHolder.Address.State : null,
                    Zip          = check.CheckHolder.Address != null ? check.CheckHolder.Address.Zip : null,
                    IdentityInfo = new IdentityInfoType {
                        DOBYear = check.CheckHolder.DobYear != null?check.CheckHolder.DobYear.ToString() : null, SSNL4 = check.CheckHolder.Ssl4 != null ? check.CheckHolder.Ssl4 : null
                    }
                };
            }

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

            HpsGatewayResponseValidation.CheckResponse(rsp, ItemChoiceType2.CheckSale);

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

            if (saleRsp.RspCode != 0)
            {
                throw new HpsCheckException(rsp.Header.GatewayTxnId, GetResponseDetails(saleRsp.CheckRspInfo), saleRsp.RspCode, saleRsp.RspMessage);
            }

            /* Start to fill out a new transaction response (HpsCheckResponse). */
            var response = new HpsCheckResponse
            {
                Header            = HydrateTransactionHeader(rsp.Header),
                TransactionId     = rsp.Header.GatewayTxnId,
                AuthorizationCode = saleRsp.AuthCode,
                ResponseCode      = saleRsp.RspCode.ToString(CultureInfo.InvariantCulture),
                ResponseText      = saleRsp.RspMessage,
                Details           = GetResponseDetails(saleRsp.CheckRspInfo)
            };

            return(response);
        }
        /// <summary>
        /// A <b>Sale</b> transaction is used to process transactions using bank account information as the payment method.
        /// The transaction service can be used to perform a Sale or Return transaction by indicating the Check Action.
        /// <br></br><br></br>
        /// <b>NOTE:</b> The Portico Gateway supports both GETI and HPS Colonnade for processing check transactions. While
        /// the available services are the same regardless of the check processor, the services may have different behaviors.
        /// For example, GETI-processed Check Sale transactions support the ability to override a Check Sale transaction
        /// already presented as well as the ability to verify a check.
        /// </summary>
        /// <param name="action">Type of Check Action (Sale, Return, Override).</param>
        /// <param name="check">The Check information.</param>
        /// <param name="amount">The amount of the sale.</param>
        /// <returns>The <see cref="HpsCheckResponse"/>.</returns>
        public HpsCheckResponse Sale(checkActionType action, HpsCheck check, decimal amount)
        {
            HpsInputValidation.CheckAmount(amount);

            /* Build the transaction request. */
            var transaction = new PosRequestVer10Transaction
            {
                Item = new PosCheckSaleReqType
                {
                    Block1 = new CheckSaleReqBlock1Type
                    {
                        Amt = amount,
                        AccountInfo = new AccountInfoType
                        {
                            AccountNumber = check.AccountNumber,
                            CheckNumber = check.CheckNumber,
                            MICRData = check.MicrNumber,
                            RoutingNumber = check.RoutingNumber
                        },
                        AmtSpecified = true,
                        CheckAction = action,
                        SECCode = check.SecCode,
                        VerifyInfo = new VerifyInfoType
                        {
                            CheckVerify = check.CheckVerify ? booleanType.Y : booleanType.N,
                            CheckVerifySpecified = true,
                            ACHVerify =  check.AchVerify ? booleanType.Y : booleanType.N,
                            ACHVerifySpecified = true
                        }
                    }
                },
                ItemElementName = ItemChoiceType1.CheckSale
            };

            var block1 = ((PosCheckSaleReqType)transaction.Item).Block1;

            if (check.AccountType.HasValue)
            {
                block1.AccountInfo.AccountType = check.AccountType.Value;
                block1.AccountInfo.AccountTypeSpecified = true;
            }
            else
            {
                block1.AccountInfo.AccountTypeSpecified = false;
            }

            if (check.CheckType.HasValue)
            {
                block1.CheckType = check.CheckType.Value;
                block1.CheckTypeSpecified = true;
            }
            else
            {
                block1.CheckTypeSpecified = false;
            }

            if (check.DataEntryMode.HasValue)
            {
                block1.DataEntryMode = check.DataEntryMode.Value;
                block1.DataEntryModeSpecified = true;
            }
            else
            {
                block1.DataEntryModeSpecified = false;
            }

            if (check.CheckHolder != null)
            {
                block1.ConsumerInfo = new ConsumerInfoType
                {
                    Address1 = check.CheckHolder.Address != null ? check.CheckHolder.Address.Address : null,
                    CheckName = check.CheckHolder.CheckName,
                    City = check.CheckHolder.Address != null ? check.CheckHolder.Address.City : null,
                    CourtesyCard = check.CheckHolder.CourtesyCard,
                    DLNumber = check.CheckHolder.DlNumber,
                    DLState = check.CheckHolder.DlState,
                    EmailAddress = check.CheckHolder.Email,
                    FirstName = check.CheckHolder.FirstName,
                    LastName = check.CheckHolder.LastName,
                    PhoneNumber = check.CheckHolder.Phone,
                    State = check.CheckHolder.Address != null ? check.CheckHolder.Address.State : null,
                    Zip = check.CheckHolder.Address != null ? check.CheckHolder.Address.Zip : null,
                    IdentityInfo = new IdentityInfoType{ DOBYear = check.CheckHolder.DobYear != null ? check.CheckHolder.DobYear.ToString() : null, SSNL4 = check.CheckHolder.Ssl4 != null ? check.CheckHolder.Ssl4 : null}
                };
                
            }

            /* Submit the transaction. */
            var rsp = DoTransaction(transaction).Ver10;
            HpsGatewayResponseValidation.CheckResponse(rsp, ItemChoiceType2.CheckSale);

            var saleRsp = (PosCheckSaleRspType)rsp.Transaction.Item;
            if (saleRsp.RspCode != 0)
            {
                throw new HpsCheckException(rsp.Header.GatewayTxnId, GetResponseDetails(saleRsp.CheckRspInfo), saleRsp.RspCode, saleRsp.RspMessage);
            }

            /* Start to fill out a new transaction response (HpsCheckResponse). */
            var response = new HpsCheckResponse
            {
                Header = HydrateTransactionHeader(rsp.Header),
                TransactionId = rsp.Header.GatewayTxnId,
                AuthorizationCode = saleRsp.AuthCode,
                ResponseCode = saleRsp.RspCode.ToString(CultureInfo.InvariantCulture),
                ResponseText = saleRsp.RspMessage,
                Details = GetResponseDetails(saleRsp.CheckRspInfo)
            };

            return response;
        }