コード例 #1
0
        public void GetActualTransactionTest()
        {
            var wmTransferCache = new WebMoneyTransferCache(100, MoqPaymentAccessor.MakeMoq().Object);

            var r1 = wmTransferCache.GetActualTransaction(); //Первое обращение на 3 месяца назад
            Assert.NotNull(r1);
            Assert.AreEqual(1, r1.Count);

            var r2 = wmTransferCache.GetActualTransaction(); // Второе обращение на 30 секунд назад
            Assert.NotNull(r2);
            Assert.AreEqual(0, r2.Count);

            MoqPaymentAccessor.AddNewTransfer(); //Поступил новый платёж за последние 30 секунд

            var r3 = wmTransferCache.GetActualTransaction(); // Второе обращение на 30 секунд назад
            Assert.NotNull(r3);
            Assert.AreEqual(1, r3.Count);

            wmTransferCache.LastRequestDate = dateTimeNow.AddMonths(-5); // Неадекватные дата и Id предыдущей транзакции зечисления - должен запросить за 3 месяца
            wmTransferCache.LastRequestTransferId = 5;
            var r4 = wmTransferCache.GetActualTransaction();
            Assert.NotNull(r4);
            Assert.AreEqual(2, r4.Count);

            // Неадекватные дата (она выправиться в логике "GetActualTransaction"), но адекватный Id предыдущего трансвера зачисления -
            // должен выбрать все транзакции ПОСЛЕ указанной (948396383). На данный момент будет выбрана только одна
            // т.к. всего транзакций на зачисление - две (первая указана - вторую вернёт).
            wmTransferCache.LastRequestDate = dateTimeNow.AddMonths(-5);
            wmTransferCache.LastRequestTransferId = 959076445;
            var r5 = wmTransferCache.GetActualTransaction();
            Assert.NotNull(r5);
            Assert.AreEqual(1, r5.Count);
            Assert.AreEqual(959076446, r5[0].Id);

            wmTransferCache.LastRequestDate = new DateTime(3000,1,1); // генерируем исключение
            var r6 = wmTransferCache.GetActualTransaction();
            Assert.IsNull(r6);

            wmTransferCache.LastRequestDate = new DateTime(2014, 1, 1, 0, 0, 0); // запрашиваем за дату в которой нет транзакций.
            var r7 = wmTransferCache.GetActualTransaction();
            Assert.NotNull(r7);
            Assert.AreEqual(0, r7.Count);
        }
コード例 #2
0
        /// <summary>
        /// запрос к серверам WebMoney
        /// </summary>
        private void RequestWalletLoop()
        {
            var currentIteration = 0;

            while (!isStopping)
            {
                Thread.Sleep(ThreadSleepMilliseconds);

                currentIteration++;
                if (currentIteration < wmTransferCache.countIterationToRequest)
                {
                    continue;
                }
                currentIteration = 0;

                var transfers = wmTransferCache.GetActualTransaction();

                if (transfers != null && transfers.Count > 0)
                {
                    foreach (var upTransfer in transfers)
                    {
                        Logger.Info(string.Format(
                                        "Поступил платёж с WebMoney, в размере {3} {5}. WmId плательщика {2}. Wm кошелёк плательщика {1}. № транзакции {0}." +
                                        "Дополнительные сведения: {4}",
                                        upTransfer.Id, upTransfer.SourcePurse, upTransfer.Partner, upTransfer.Amount, upTransfer.Description, WebMoneyUtil.CurrencyToStr(upTransfer.SourcePurse.Type)));


                        var commentString = upTransfer.Description.ToString().Trim();

                        if (!string.IsNullOrEmpty(commentString))
                        {
                            var wId = GetTradeSharpeWalletIdByLogin(commentString);
                            if (wId.HasValue &&
                                TradeSharpServer.Instance.proxy.DepositOnWallet(wId.Value, WebMoneyUtil.CurrencyToStr(upTransfer.TargetPurse.Type),
                                                                                upTransfer.Amount, DateTime.Now))
                            {
                                Logger.Info(string.Format("Кошелёк {0} пополнен через реквизиты комментария", upTransfer.SourcePurse));
                                continue;
                            }
                        }

                        #region Сериализация для передачи в параметре "strRequisites"
                        string strRequisites;
                        var    serializer = new XmlSerializer(upTransfer.GetType());
                        using (var writer = new StringWriter())
                        {
                            serializer.Serialize(writer, upTransfer);
                            strRequisites = writer.ToString();
                        }
                        #endregion

                        // то что пришло в комментарии, не удалось применить для опознавания кошелька T#
                        // Начинаем действовать исходя из реквизитов транзакции
                        var walletId = GetTradeSharpeWalletIdByPaySysRequisite(PaymentSystem.WebMoney, upTransfer.Partner.ToString(), upTransfer.SourcePurse.ToString());
                        if (walletId != null)
                        {
                            if (TradeSharpServer.Instance.proxy.DepositOnWallet(walletId.Value, WebMoneyUtil.CurrencyToStr(upTransfer.TargetPurse.Type), upTransfer.Amount, DateTime.Now))
                            {
                                Logger.Info(string.Format("T# кошелёк {0} пополнен через поиск по БД", walletId.Value));
                            }
                            else
                            {
                                Logger.Error(string.Format("T# кошелёк плательщика опознан как {0}, но провести платёж не удалось.", walletId.Value));

                                ReportOnFailPayment(WebMoneyUtil.CurrencyToStr(upTransfer.TargetPurse.Type), upTransfer.Amount,
                                                    DateTime.Now, PaymentSystem.WebMoney, strRequisites);
                            }
                        }
                        else
                        {
                            Logger.Info("Не удалось опознать кошелёк T# никакими способами");
                            ReportOnFailPayment(WebMoneyUtil.CurrencyToStr(upTransfer.TargetPurse.Type), upTransfer.Amount,
                                                DateTime.Now, PaymentSystem.WebMoney, strRequisites);
                        }
                    }
                }
            }
        }