Ejemplo n.º 1
0
        public void ProcessRequest(HttpContext context)
        {
            string merchantId = WebConfigurationManager.AppSettings["MerchantId"];

            var processor = new HostedPaymentProcessor(merchantId, new HttpContextWrapper(context));

            try
            {
                if (!processor.ValidateRequest())
                {
                    throw new InvalidOperationException("Request came from an invalid source");
                }

                var result = new ServerTransactionResult(context.Request.Form);

                processor.ValidateResult(result); // will throw if merchant ids do not match

                // at this point we can get order and work with the result
                if (result.Successful)
                {
                    // update our order to say payment sucessful
                }

                // now we need to let Cardsave know we've received the result
                context.Response.Write(
                    processor.CreateServerResponseString(TransactionStatus.Successful));
            }
            catch (Exception ex)
            {
                // let cardsave know there was a problem
                context.Response.Write(
                    processor.CreateServerResponseString(TransactionStatus.Exception, ex.Message));
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Performs basic validation of the transaction result (you should also implement your own e.g. check amounts against order)
        /// </summary>
        /// <param name="result">Transaction result</param>
        public void ValidateResult(ServerTransactionResult result, String MerchantId, String MerchantPassword, String PreSharedKey)
        {
            NameValueCollection nameValueCollection = new NameValueCollection();
            HashMethod          hashMethod          = HashMethod.SHA1;

            nameValueCollection.Add("PreSharedKey", PreSharedKey);
            nameValueCollection.Add("MerchantID", MerchantId);
            nameValueCollection.Add("Password", MerchantPassword);
            nameValueCollection.Add("StatusCode", Convert.ToInt32(result.StatusCode));
            nameValueCollection.Add("Message", result.Message);
            if (result.StatusCode == TransactionStatus.DuplicateTransaction)
            {
                nameValueCollection.Add("PreviousStatusCode", Convert.ToInt32(result.PreviousStatusCode));
            }
            else
            {
                nameValueCollection.Add("PreviousStatusCode", "");
            }
            nameValueCollection.Add("PreviousMessage", result.PreviousMessage);
            nameValueCollection.Add("CrossReference", result.CrossReference);
            nameValueCollection.Add("AddressNumericCheckResult", result.AddressNumericCheckResult);
            nameValueCollection.Add("PostCodeCheckResult", result.PostCodeCheckResult);
            nameValueCollection.Add("CV2CheckResult", result.CV2CheckResult);
            nameValueCollection.Add("ThreeDSecureAuthenticationCheckResult", result.ThreeDSecureAuthenticationCheckResult);
            nameValueCollection.Add("CardType", result.CardType);
            nameValueCollection.Add("CardClass", result.CardClass);
            nameValueCollection.Add("CardIssuer", result.CardIssuer);
            nameValueCollection.Add("CardIssuerCountryCode", result.CardIssuerCountryCode);
            nameValueCollection.Add("Amount", result.Amount);
            nameValueCollection.Add("CurrencyCode", Convert.ToString(result.CurrencyCode));
            nameValueCollection.Add("OrderID", result.OrderID);
            nameValueCollection.Add("TransactionType", result.TransactionType);
            nameValueCollection.Add("TransactionDateTime", Convert.ToString(result.TransactionDateTime));
            nameValueCollection.Add("OrderDescription", result.OrderDescription);
            nameValueCollection.Add("CustomerName", result.CustomerName);
            nameValueCollection.Add("Address1", result.Address1);
            nameValueCollection.Add("Address2", result.Address2);
            nameValueCollection.Add("Address3", result.Address3);
            nameValueCollection.Add("Address4", result.Address4);
            nameValueCollection.Add("City", result.City);
            nameValueCollection.Add("State", result.State);
            nameValueCollection.Add("PostCode", result.PostCode);
            nameValueCollection.Add("CountryCode", Convert.ToString(result.CountryCode));
            nameValueCollection.Add("EmailAddress", result.EmailAddress);
            nameValueCollection.Add("PhoneNumber", result.PhoneNumber);
            bool   flag        = false;
            string queryString = nameValueCollection.ToQueryString("&", false, flag);
            string str         = HashUtil.ComputeHashDigest(queryString, PreSharedKey, hashMethod);

            if (result.HashDigest != str)
            {
                throw new Exception("Hash Check Failed");
            }
        }