Esempio n. 1
0
 internal void SetSecure3dProvider(Secure3dVersion version, ISecure3dProvider provider)
 {
     if (_secure3dProviders.ContainsKey(version))
     {
         _secure3dProviders[version] = provider;
     }
     else
     {
         _secure3dProviders.Add(version, provider);
     }
 }
Esempio n. 2
0
        public ThreeDSecure Execute(Secure3dVersion version, string configName = "default")
        {
            Validations.Validate(this);

            // setup return object
            ThreeDSecure rvalue = ThreeDSecure;

            if (rvalue == null)
            {
                rvalue         = new ThreeDSecure();
                rvalue.Version = version;
            }

            // working version
            if (rvalue.Version != null)
            {
                version = rvalue.Version.Value;
            }

            // get the provider
            ISecure3dProvider provider = ServicesContainer.Instance.GetSecure3d(configName, version);

            if (provider != null)
            {
                bool canDowngrade = false;
                if (provider.Version.Equals(Secure3dVersion.Two) && version.Equals(Secure3dVersion.Any))
                {
                    try {
                        var oneProvider = ServicesContainer.Instance.GetSecure3d(configName, Secure3dVersion.One);
                        canDowngrade = (oneProvider != null);
                    }
                    catch (ConfigurationException) { /* NOT CONFIGURED */ }
                }

                /* process the request, capture any exceptions which might have been thrown */
                Transaction response = null;
                try {
                    response = provider.ProcessSecure3d(this);
                    if (response == null && canDowngrade)
                    {
                        return(Execute(Secure3dVersion.One, configName));
                    }
                }
                catch (GatewayException exc) {
                    // check for not enrolled
                    if ("110".Equals(exc.ResponseCode) && provider.Version.Equals(Secure3dVersion.One))
                    {
                        return(rvalue);
                    }
                    // check if we can downgrade
                    else if (canDowngrade && TransactionType.Equals(TransactionType.VerifyEnrolled))
                    {
                        return(Execute(Secure3dVersion.One, configName));
                    }
                    // throw exception
                    else
                    {
                        throw exc;
                    }
                }

                // check the response
                if (response != null)
                {
                    switch (TransactionType)
                    {
                    case TransactionType.VerifyEnrolled: {
                        if (response.ThreeDSecure != null)
                        {
                            rvalue = response.ThreeDSecure;
                            if (new List <string>()
                                {
                                    "True", "Y"
                                }.Contains(rvalue.Enrolled))
                            {
                                rvalue.Amount   = Amount;
                                rvalue.Currency = Currency;
                                rvalue.OrderId  = response.OrderId;
                                rvalue.Version  = provider.Version;
                            }
                            else if (canDowngrade)
                            {
                                return(Execute(Secure3dVersion.One, configName));
                            }
                        }
                        else if (canDowngrade)
                        {
                            return(Execute(Secure3dVersion.One, configName));
                        }
                    }
                    break;

                    case TransactionType.InitiateAuthentication:
                    case TransactionType.VerifySignature: {
                        rvalue.Merge(response.ThreeDSecure);
                    }
                    break;
                    }
                }
            }

            return(rvalue);
        }