예제 #1
0
        /// <summary>
        /// Конструктор, использующийся для инициализации WebMoneyAccessor ключом Keeper Classic
        /// </summary>
        public WebMoneyAccessor()
        {
            var wmAccountDictionary = WebMoneyUtil.Instance.GetWmAccountSettings();

            if (wmAccountDictionary == null)
            {
                Logger.Error("WebMoneyAccessor() - не удалось прочитать необходимые для инициализировать WebMoney параметры (wmId, purseNumber и др.)");
                return;
            }

            keeperKeyValue    = wmAccountDictionary["WmKeeperKeyValue"].ToString();
            targetPurseNumber = (ulong)wmAccountDictionary["WmTargetPurseNumber"];
            wmId = (WmId)(ulong)wmAccountDictionary["WmId"];
            var targetPurseType = WebMoneyUtil.StrToCurrency(wmAccountDictionary["WmPurseCurrency"].ToString());

            purse = new Purse
            {
                Number = targetPurseNumber,
                Type   = targetPurseType
            };

            var keeperKey = new KeeperKey(keeperKeyValue);

            initializer = new Initializer(wmId, keeperKey)
            {
                StartDate = new DateTime(1983, 1, 1).ToUniversalTime()
            };
            initializer.Apply();

            wmServerTimeDifference = (WmDateTime.ServerTime2UtcTime(DateTime.Now).Hour - DateTime.Now.ToUniversalTime().Hour);
        }
예제 #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);
                        }
                    }
                }
            }
        }