/// <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); }
/// <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); } } } } }