public void SaveSubscription(SubscriptionRecord s)
 {
     service.SaveSubscription(s);
     var store = GetSubsciptionsStore(s.Tenant, s.SourceId, s.ActionId);
     lock (store)
     {
         store.SaveSubscription(s);
     }
 }
示例#2
0
 private void CompareSubscriptions(SubscriptionRecord sb1, SubscriptionRecord sb2)
 {
     Assert.AreEqual(sb1.Tenant, sb2.Tenant);
     Assert.AreEqual(sb1.ActionId, sb2.ActionId);
     Assert.AreEqual(sb1.SourceId, sb2.SourceId);
     Assert.AreEqual(sb1.RecipientId, sb2.RecipientId);
     Assert.AreEqual(sb1.ObjectId, sb1.ObjectId);
     Assert.AreEqual(sb1.Subscribed, sb2.Subscribed);
 }
        public void UpdateSuscription(SubscriptionRecord subscriptionRecord)
        {
            if (subscriptionRecord == null)
            {
                throw new ArgumentNullException(nameof(subscriptionRecord));
            }

            _subscritionRepository.Update(subscriptionRecord);
        }
示例#4
0
        public void SaveSubscription(SubscriptionRecord s)
        {
            service.SaveSubscription(s);
            var store = GetSubsciptionsStore(s.Tenant, s.SourceId, s.ActionId);

            lock (store)
            {
                store.SaveSubscription(s);
            }
        }
示例#5
0
                public override bool Equals(object obj)
                {
                    SubscriptionRecord rec = obj as SubscriptionRecord;

                    if (rec == null)
                    {
                        return(false);
                    }

                    return(rec.regex == regex);
                }
        public void SaveSubscription(SubscriptionRecord s)
        {
            if (s == null) throw new ArgumentNullException("s");

            var i = Insert("core_subscription", s.Tenant)
                .InColumnValue("source", s.SourceId)
                .InColumnValue("action", s.ActionId)
                .InColumnValue("recipient", s.RecipientId)
                .InColumnValue("object", s.ObjectId ?? string.Empty)
                .InColumnValue("unsubscribed", !s.Subscribed);

            ExecNonQuery(i);
        }
        public void SaveSubscription(SubscriptionRecord s)
        {
            var old = GetSubscription(s.RecipientId, s.ObjectId);

            if (old != null)
            {
                old.Subscribed = s.Subscribed;
            }
            else
            {
                records.Add(s);
                BuildSubscriptionsIndex(records);
            }
        }
示例#8
0
 public static SubscriptionModel ToPushSubscription(SubscriptionRecord record)
 {
     return(new SubscriptionModel
     {
         CustomerId = record.CustomerId,
         Endpoint = record.Endpoint,
         ExpirationTime = record.ExpirationTime,
         Keys = new SubscriptionKeys
         {
             P256dh = record.P256DHKey,
             Auth = record.AuthKey
         }
     });
 }
示例#9
0
        public async Task AddSubscription(Guid userId, Guid subscribedToUserId)
        {
            using (var context = new InstaContext())
            {
                var subscriber = new SubscriptionRecord
                {
                    SubscribedToUserId = subscribedToUserId,
                    SubscriberUserId   = userId
                };
                context.SubscriptionRecords.Add(subscriber);

                await context.SaveChangesAsync();
            }
        }
        public void SaveSubscription(SubscriptionRecord s)
        {
            if (s == null)
            {
                throw new ArgumentNullException("s");
            }

            var i = Insert("core_subscription", s.Tenant)
                    .InColumnValue("source", s.SourceId)
                    .InColumnValue("action", s.ActionId)
                    .InColumnValue("recipient", s.RecipientId)
                    .InColumnValue("object", s.ObjectId ?? string.Empty)
                    .InColumnValue("unsubscribed", !s.Subscribed);

            ExecNonQuery(i);
        }
示例#11
0
文件: LCM.cs 项目: obiben/lcm
        /// <summary>
        /// Subscribe to all channels whose name matches the regular
        /// expression. Note that to subscribe to all channels, you must
        /// specify ".*", not "*".
        /// </summary>
        /// <param name="regex">regular expression determining the channels to subscribe</param>
        /// <param name="sub">subscribing object providing callback</param>
        public void Subscribe(string regex, LCMSubscriber sub)
        {
            if (this.closed)
            {
                throw new SystemException();
            }

            SubscriptionRecord srec = new SubscriptionRecord();

            srec.regex = regex;
            srec.pat   = new Regex(regex);
            srec.lcsub = sub;

            lock (this)
            {
                foreach (Provider p in providers)
                {
                    p.Subscribe(regex);
                }
            }

            lock (subscriptions)
            {
                if (!subscriptions.Exists(s => s.regex == srec.regex && s.lcsub == srec.lcsub))
                {
                    subscriptions.Add(srec);
                    List <SubscriptionRecord> subs;

                    Console.WriteLine("Subscribing: {0}", srec);

                    foreach (string channel in subscriptionsMap.Keys)
                    {
                        if (srec.pat.IsMatch(channel))
                        {
                            if (subscriptionsMap.TryGetValue(channel, out subs))
                            {
                                subs.Add(srec);
                            }
                        }
                    }
                }
            }
        }
示例#12
0
        public void SaveSubscription(SubscriptionRecord s)
        {
            if (s == null)
            {
                throw new ArgumentNullException("s");
            }

            var subs = new Subscription
            {
                Action       = s.ActionId,
                Object       = s.ObjectId ?? string.Empty,
                Recipient    = s.RecipientId,
                Source       = s.SourceId,
                Unsubscribed = !s.Subscribed,
                Tenant       = s.Tenant
            };

            UserDbContext.AddOrUpdate(r => r.Subscriptions, subs);
            UserDbContext.SaveChanges();
        }
 /// <summary>
 /// Maps the specified SubscriptionRecord to a SubscriptionDto instance
 /// </summary>
 /// <param name="record">SubscriptionRecord to map</param>
 /// <returns>SubscriptionDto instance</returns>
 public static SubscriptionDto MapSubscription(SubscriptionRecord record)
 {
     return(new SubscriptionDto
     {
         Id = record.Id,
         SubscriberName = record.SubscriberName,
         PrimaryEmail = record.PrimaryEmail,
         PrimaryPhone = record.PrimaryPhone,
         AddrCountry = record.AddrCountry,
         AddrZip = record.AddrZip,
         AddrTown = record.AddrTown,
         AddrLine1 = record.AddrLine1,
         AddrLine2 = record.AddrLine2,
         AddrState = record.AddrState,
         TaxId = record.TaxId,
         BankAccountNo = record.BankAccountNo,
         CreatedUtc = record.CreatedUtc,
         LastModifiedUtc = record.LastModifiedUtc
     });
 }
示例#14
0
        private IEnumerable <SubscriptionRecord> GetSubscriptions(ISqlInstruction q, int tenant)
        {
            var subs = ExecList(q)
                       .ConvertAll(r =>
            {
                var result = new SubscriptionRecord
                {
                    Tenant      = Convert.ToInt32(r[0]),
                    SourceId    = (string)r[1],
                    ActionId    = (string)r[2],
                    RecipientId = (string)r[3],
                    Subscribed  = !Convert.ToBoolean(r[5]),
                };
                if (!string.Empty.Equals(r[4]))
                {
                    result.ObjectId = (string)r[4];
                }
                return(result);
            });

            var result = subs.ToList();
            var common = new Dictionary <string, SubscriptionRecord>();

            foreach (var s in subs)
            {
                var key = s.SourceId + s.ActionId + s.RecipientId + s.ObjectId;
                if (s.Tenant == Tenant.DEFAULT_TENANT)
                {
                    s.Tenant = tenant;
                    common.Add(key, s);
                }
                else
                {
                    if (common.TryGetValue(key, out var r))
                    {
                        result.Remove(r);
                    }
                }
            }
            return(result);
        }
 public void SaveSubscription(SubscriptionRecord s)
 {
     var old = GetSubscription(s.RecipientId, s.ObjectId);
     if (old != null)
     {
         old.Subscribed = s.Subscribed;
     }
     else
     {
         records.Add(s);
         BuildSubscriptionsIndex(records);
     }
 }
示例#16
0
        public void CachedSubscriptionMethod()
        {
            var sb1 = new SubscriptionRecord {
                Tenant = 2024, ActionId = "actionId1", SourceId = "sourceId1", ObjectId = "objectId1", RecipientId = "recipientId1", Subscribed = false
            };

            service.SaveSubscription(sb1);

            var sb2 = new SubscriptionRecord {
                Tenant = 2024, ActionId = "actionId2", SourceId = "sourceId2", ObjectId = "objectId2", RecipientId = "recipientId2", Subscribed = false
            };

            service.SaveSubscription(sb2);

            var sb3 = new SubscriptionRecord {
                Tenant = 2024, ActionId = "actionId2", SourceId = "sourceId2", ObjectId = "objectId3", RecipientId = "recipientId3", Subscribed = false
            };

            service.SaveSubscription(sb3);

            var sb4 = new SubscriptionRecord {
                Tenant = 2024, ActionId = "actionId2", SourceId = "sourceId2", ObjectId = "", RecipientId = "recipientId4", Subscribed = false
            };

            service.SaveSubscription(sb4);

            var subscriptions = service.GetSubscriptions(2024, "sourceId1", "actionId1", "recipientId1", "objectId1");

            Assert.AreEqual(subscriptions.Count(), 1);

            subscriptions = service.GetSubscriptions(2024, "sourceId1", "actionId1", null, "objectId1");
            Assert.AreEqual(subscriptions.Count(), 1);

            subscriptions = service.GetSubscriptions(2024, "sourceId1", "actionId1", null, null);
            Assert.AreEqual(subscriptions.Count(), 0);

            subscriptions = service.GetSubscriptions(2024, "sourceId2", "actionId2");
            Assert.AreEqual(subscriptions.Count(), 3);

            var subscription = service.GetSubscription(2024, "sourceId2", "actionId2", "recipientId3", "objectId3");

            CompareSubscriptions(sb3, subscription);

            var sb5 = new SubscriptionRecord {
                Tenant = 2024, ActionId = "actionId3", SourceId = "sourceId3", ObjectId = "objectId5", RecipientId = "recipientId5", Subscribed = false
            };

            subscription = service.GetSubscription(2024, "sourceId3", "actionId3", "recipientId5", "objectId5");
            Assert.IsNull(subscription);

            service.SaveSubscription(sb5);

            subscription = service.GetSubscription(2024, "sourceId3", "actionId3", "recipientId5", "objectId5");
            CompareSubscriptions(sb5, subscription);

            service.RemoveSubscriptions(2024, "sourceId2", "actionId2");

            subscriptions = service.GetSubscriptions(2024, "sourceId2", "actionId2");
            Assert.AreEqual(0, subscriptions.Count());

            service.RemoveSubscriptions(2024, "sourceId3", "actionId3", "objectId5");
            service.RemoveSubscriptions(2024, "sourceId1", "actionId1", "objectId1");

            subscription = service.GetSubscription(2024, "sourceId3", "actionId3", "recipientId5", "objectId5");
            Assert.IsNull(subscription);

            subscription = service.GetSubscription(2024, "sourceId1", "actionId1", "recipientId1", "objectId1");
            Assert.IsNull(subscription);

            var sm1 = new SubscriptionMethod {
                Tenant = 2024, ActionId = "actionId11", SourceId = "sourceId11", RecipientId = "recipientId11", Methods = new string[] { "1", "2" }
            };

            service.SetSubscriptionMethod(sm1);

            var sm2 = new SubscriptionMethod {
                Tenant = 2024, ActionId = "actionId22", SourceId = "sourceId22", RecipientId = "recipientId22", Methods = new string[] { "3", "4" }
            };

            service.SetSubscriptionMethod(sm2);

            var methods = service.GetSubscriptionMethods(2024, "sourceId11", "actionId11", "recipientId11");

            Assert.AreEqual(methods.Count(), 1);
            CompareSubscriptionMethods(methods.ElementAt(0), sm1);

            methods = service.GetSubscriptionMethods(2024, "sourceId22", "actionId22", "recipientId22");
            Assert.AreEqual(methods.Count(), 1);
            CompareSubscriptionMethods(methods.ElementAt(0), sm2);

            sm2.Methods = null;

            service.SetSubscriptionMethod(sm2);

            methods = service.GetSubscriptionMethods(2024, "sourceId22", "actionId22", "recipientId11");
            Assert.AreEqual(0, methods.Count());

            sm1.Methods = null;

            service.SetSubscriptionMethod(sm1);

            methods = service.GetSubscriptionMethods(2024, "sourceId22", "actionId22", "recipientId22");
            Assert.AreEqual(0, methods.Count());
        }
示例#17
0
		/// <summary>
		/// Subscribe to all channels whose name matches the regular
		/// expression. Note that to subscribe to all channels, you must
		/// specify ".*", not "*".
		/// </summary>
		/// <param name="regex">regular expression determining the channels to subscribe</param>
		/// <param name="sub">subscribing object providing callback</param>
		public void Subscribe(string regex, LCMSubscriber sub)
		{
			if (this.closed)
			{
				throw new SystemException();
			}
			
			SubscriptionRecord srec = new SubscriptionRecord();
			srec.regex = regex;
			srec.pat = new Regex(regex);
			srec.lcsub = sub;
			
			lock (this)
			{
				foreach (Provider p in providers)
				{
					p.Subscribe(regex);
				}
			}
			
			lock (subscriptions)
			{
				subscriptions.Add(srec);
				List<SubscriptionRecord> subs;
				
				foreach (string channel in subscriptionsMap.Keys)
				{
					if (srec.pat.IsMatch(channel))
					{
						if (subscriptionsMap.TryGetValue(channel, out subs))
						{
							subs.Add(srec);
						}
					}
				}
			}
		}
示例#18
0
            public void Run()
            {
                // read messages until something bad happens.
                try
                {
                    while (running)
                    {
                        int type       = ins.ReadInt32();
                        int channellen = ins.ReadInt32();
                        if (channellen > 1000)
                        {
                            Console.WriteLine($"Message's channel size over 1000 bytes closing client {Address}");
                            break;
                        }
                        if (type == TCPProvider.MESSAGE_TYPE_PUBLISH)
                        {
                            byte[] channel = new byte[channellen];
                            ReadInput(ins.BaseStream, channel, 0, channel.Length);

                            int    datalen = ins.ReadInt32();
                            byte[] data    = new byte[datalen];
                            ReadInput(ins.BaseStream, data, 0, data.Length);

                            service.Relay(channel, data);

                            service.bytesCount += channellen + datalen + 8;
                        }
                        else if (type == TCPProvider.MESSAGE_TYPE_SUBSCRIBE)
                        {
                            byte[] channel = new byte[channellen];
                            ReadInput(ins.BaseStream, channel, 0, channel.Length);

                            lock (subscriptions)
                            {
                                string             s_channel = System.Text.Encoding.GetEncoding("US-ASCII").GetString(channel);
                                SubscriptionRecord s         =
                                    new SubscriptionRecord(
                                        s_channel
                                        );
                                Console.WriteLine("Subscribe: {0}", s_channel);
                                if (!subscriptions.Contains(s))
                                {
                                    Console.WriteLine("Adding subscription");
                                    subscriptions.Add(s);
                                }
                                else
                                {
                                    Console.WriteLine("Already subscribed");
                                }
                            }
                        }
                        else if (type == TCPProvider.MESSAGE_TYPE_UNSUBSCRIBE)
                        {
                            byte[] channel = new byte[channellen];
                            ReadInput(ins.BaseStream, channel, 0, channel.Length);

                            string re = System.Text.Encoding.GetEncoding("US-ASCII").GetString(channel);
                            lock (subscriptions)
                            {
                                for (int i = 0, n = subscriptions.Count; i < n; i++)
                                {
                                    if (subscriptions[i].pat.IsMatch(re))
                                    {
                                        subscriptions.RemoveAt(i);
                                        break;
                                    }
                                }
                            }
                        }
                    }
                }
                catch (IOException)
                {
                }
                catch (InvalidOperationException)
                {
                }
                catch (OverflowException e)
                {
                    Console.WriteLine(e.ToString());
                    Console.WriteLine(((IPEndPoint)sock.Client.RemoteEndPoint).Address.ToString());
                }


                // Something bad happened, close this connection.
                try
                {
                    sock.Close();
                }
                catch (IOException)
                {
                }

                lock (service.clients)
                {
                    service.clients.Remove(this);
                }
                sendQueue.CompleteAdding();
            }
 private void CompareSubscriptions(SubscriptionRecord sb1, SubscriptionRecord sb2)
 {
     Assert.AreEqual(sb1.Tenant, sb2.Tenant);
     Assert.AreEqual(sb1.ActionId, sb2.ActionId);
     Assert.AreEqual(sb1.SourceId, sb2.SourceId);
     Assert.AreEqual(sb1.RecipientId, sb2.RecipientId);
     Assert.AreEqual(sb1.ObjectId, sb1.ObjectId);
     Assert.AreEqual(sb1.Subscribed, sb2.Subscribed);
 }
 public void SaveSubscription(SubscriptionRecord s)
 {
     service.SaveSubscription(s);
     notifyRecord.Publish(s, CacheNotifyAction.InsertOrUpdate);
 }
        public void CachedSubscriptionMethod()
        {
            var sb1 = new SubscriptionRecord { Tenant = 2024, ActionId = "actionId1", SourceId = "sourceId1", ObjectId = "objectId1", RecipientId = "recipientId1", Subscribed = false };
            service.SaveSubscription(sb1);

            var sb2 = new SubscriptionRecord { Tenant = 2024, ActionId = "actionId2", SourceId = "sourceId2", ObjectId = "objectId2", RecipientId = "recipientId2", Subscribed = false };
            service.SaveSubscription(sb2);

            var sb3 = new SubscriptionRecord { Tenant = 2024, ActionId = "actionId2", SourceId = "sourceId2", ObjectId = "objectId3", RecipientId = "recipientId3", Subscribed = false };
            service.SaveSubscription(sb3);

            var sb4 = new SubscriptionRecord { Tenant = 2024, ActionId = "actionId2", SourceId = "sourceId2", ObjectId = "", RecipientId = "recipientId4", Subscribed = false };
            service.SaveSubscription(sb4);

            var subscriptions = service.GetSubscriptions(2024, "sourceId1", "actionId1", "recipientId1", "objectId1");
            Assert.AreEqual(subscriptions.Count(), 1);

            subscriptions = service.GetSubscriptions(2024, "sourceId1", "actionId1", null, "objectId1");
            Assert.AreEqual(subscriptions.Count(), 1);

            subscriptions = service.GetSubscriptions(2024, "sourceId1", "actionId1", null, null);
            Assert.AreEqual(subscriptions.Count(), 0);

            subscriptions = service.GetSubscriptions(2024, "sourceId2", "actionId2");
            Assert.AreEqual(subscriptions.Count(), 3);

            var subscription = service.GetSubscription(2024, "sourceId2", "actionId2", "recipientId3", "objectId3");
            CompareSubscriptions(sb3, subscription);

            var sb5 = new SubscriptionRecord { Tenant = 2024, ActionId = "actionId3", SourceId = "sourceId3", ObjectId = "objectId5", RecipientId = "recipientId5", Subscribed = false };

            subscription = service.GetSubscription(2024, "sourceId3", "actionId3", "recipientId5", "objectId5");
            Assert.IsNull(subscription);

            service.SaveSubscription(sb5);

            subscription = service.GetSubscription(2024, "sourceId3", "actionId3", "recipientId5", "objectId5");
            CompareSubscriptions(sb5, subscription);

            service.RemoveSubscriptions(2024, "sourceId2", "actionId2");

            subscriptions = service.GetSubscriptions(2024, "sourceId2", "actionId2");
            Assert.AreEqual(0, subscriptions.Count());

            service.RemoveSubscriptions(2024, "sourceId3", "actionId3", "objectId5");
            service.RemoveSubscriptions(2024, "sourceId1", "actionId1", "objectId1");

            subscription = service.GetSubscription(2024, "sourceId3", "actionId3", "recipientId5", "objectId5");
            Assert.IsNull(subscription);

            subscription = service.GetSubscription(2024, "sourceId1", "actionId1", "recipientId1", "objectId1");
            Assert.IsNull(subscription);

            var sm1 = new SubscriptionMethod { Tenant = 2024, ActionId = "actionId11", SourceId = "sourceId11", RecipientId = "recipientId11", Methods = new string[] { "1", "2" } };
            service.SetSubscriptionMethod(sm1);

            var sm2 = new SubscriptionMethod { Tenant = 2024, ActionId = "actionId22", SourceId = "sourceId22", RecipientId = "recipientId22", Methods = new string[] { "3", "4" } };
            service.SetSubscriptionMethod(sm2);

            var methods = service.GetSubscriptionMethods(2024, "sourceId11", "actionId11", "recipientId11");
            Assert.AreEqual(methods.Count(), 1);
            CompareSubscriptionMethods(methods.ElementAt(0), sm1);

            methods = service.GetSubscriptionMethods(2024, "sourceId22", "actionId22", "recipientId22");
            Assert.AreEqual(methods.Count(), 1);
            CompareSubscriptionMethods(methods.ElementAt(0), sm2);

            sm2.Methods = null;

            service.SetSubscriptionMethod(sm2);

            methods = service.GetSubscriptionMethods(2024, "sourceId22", "actionId22", "recipientId11");
            Assert.AreEqual(0, methods.Count());

            sm1.Methods = null;

            service.SetSubscriptionMethod(sm1);

            methods = service.GetSubscriptionMethods(2024, "sourceId22", "actionId22", "recipientId22");
            Assert.AreEqual(0, methods.Count());
        }
示例#22
0
        public AuthorizeModule(FreepayMockContext db)
        {
            Post["/secure/authorize.aspx"] = parameters =>
            {
                string acceptUrl      = Request.Form.AcceptURL;
                string declineUrl     = Request.Form.DeclineURL;
                int    subscription   = Request.Form.Subscription;
                int    merchantNumber = Request.Form.MerchantNumber;
                int    amount         = Request.Form.Amount;
                int    currency       = Request.Form.Currency;
                string orderNumber    = Request.Form.OrderNumber;
                string cardNumber     = Request.Form.CardNumber;
                string expireMonth    = Request.Form.ExpireMonth;
                string expireYear     = Request.Form.ExpireYear;
                string cvc            = Request.Form.cvc;

                var merchant = db.Merchants.FirstOrDefault(x => x.MerchantId == merchantNumber);

                if (merchant == null)
                {
                    // TODO Log this error
                    return(HttpStatusCode.InternalServerError);
                }

                var card = new CardRecord();
                card.CardNumber  = cardNumber;
                card.ExpireMonth = expireMonth;
                card.ExpireYear  = expireYear;
                card.CVC         = cvc;

                if (subscription == 1)
                {
                    SubscriptionRecord record = new SubscriptionRecord();
                    record.MerchantNumber = merchantNumber;
                    record.Currency       = currency;

                    // TODO Detect card
                    record.CardType    = "CARD";
                    record.Currency    = currency;
                    record.DateCreated = DateTime.Now;
                    record.Acquirer    = "NetsTeller";
                    record.ExpiryDate  = DateTime.Now.AddDays(30);
                    record.SourceIP    = Request.UserHostAddress;
                    record.OrderID     = orderNumber;

                    db.Subscriptions.Add(record);
                    db.SaveChanges();

                    card.SubscriptionId = record.SubscriptionId;

                    var transaction = new TransactionRecord();
                    transaction.Amount              = amount;
                    transaction.CurrencyAsInt       = currency;
                    transaction.DateEarliestCapture = DateTime.Now;
                    transaction.OrderId             = orderNumber;
                    transaction.AuthorizationAmount = amount;
                    transaction.CaptureAmount       = amount;
                    transaction.DateCreated         = DateTime.Now;
                    transaction.DateAuthorized      = DateTime.Now;
                    transaction.IsAwaitingApproval  = true;
                    transaction.MerchantId          = merchantNumber;
                    transaction.SubscriptionId      = record.SubscriptionId;
                    transaction.IsCaptured          = false;
                    transaction.IsDeleted           = false;
                    transaction.PANHash             = "";
                    transaction.SourceIp            = Request.UserHostAddress;

                    db.Transactions.Add(transaction);
                    db.SaveChanges();

                    card.TransactionId = transaction.TransactionId;
                    card.TransactionId = transaction.TransactionId;
                    db.Cards.Add(card);
                    db.SaveChanges();
                }
                else
                {
                    var transaction = new TransactionRecord();
                    transaction.Amount              = amount;
                    transaction.CurrencyAsInt       = currency;
                    transaction.DateEarliestCapture = DateTime.Now;
                    transaction.DateCreated         = DateTime.Now;;
                    transaction.OrderId             = orderNumber;
                    transaction.AuthorizationAmount = amount;
                    transaction.CaptureAmount       = amount;
                    transaction.DateAuthorized      = DateTime.Now;
                    transaction.IsAwaitingApproval  = true;
                    transaction.MerchantId          = merchantNumber;
                    transaction.IsCaptured          = false;
                    transaction.IsDeleted           = false;
                    transaction.PANHash             = "";
                    transaction.SourceIp            = Request.UserHostAddress;
                    db.Transactions.Add(transaction);
                    db.SaveChanges();

                    card.TransactionId = transaction.TransactionId;
                    db.Cards.Add(card);
                    db.SaveChanges();
                }

                if (subscription == 1 || (currency == 208 && amount >= 45000))
                {
                    var verifyUrl = $"/verified-by-visa?amount={amount}&currency={currency}&acceptUrl={acceptUrl}&declineUrl={declineUrl}";
                    return(Response.AsRedirect(verifyUrl));
                }
                else
                {
                    return(Response.AsRedirect(acceptUrl));
                }
            };
        }