public void TestGetTransactions() { //int customerId = 1; var reqInfo = new PayPalRequestInfo { SecurityInfo = new PayPalSecurityData() { PermissionsGranted = new PayPalPermissionsGranted { RequestToken = "AAAAAAvoMRxkeqwRbNet", VerificationCode = "BUZDemaiLtrC-008xfzUug", AccessToken = "i0JEalB9y89Uq9VA.fjjsrdWnlPsVe8rwkIbPgvvP1clFnyEbHt29A", TokenSecret = "kw1bQNNMe0bJj-81OAVfFXJh9ZY", }, UserId = "*****@*****.**" }, StartDate = DateTime.Today.AddDays(-30), EndDate = DateTime.Today, ErrorRetryingInfo = new ErrorRetryingInfo(false), OpenTimeOutInMinutes = 1, SendTimeoutInMinutes = 1, DaysPerRequest = 30 }; PayPalServiceHelper.GetTransactionData(reqInfo, data => { Console.WriteLine("data {0}", data.Capacity); return(true); }); }
private UpdateActionResultInfo UpdateTransactionInfo(IDatabaseCustomerMarketPlace databaseCustomerMarketPlace, PayPalSecurityData securityInfo, MP_CustomerMarketplaceUpdatingHistory historyRecord) { var endDate = DateTime.UtcNow; var elapsedTimeInfo = new ElapsedTimeInfo(); DateTime?startDate = ElapsedTimeHelper.CalculateAndStoreElapsedTimeForCallInSeconds( elapsedTimeInfo, databaseCustomerMarketPlace.Id, ElapsedDataMemberType.RetrieveDataFromDatabase, () => Helper.GetLastPayPalTransactionDate(databaseCustomerMarketPlace) ); if (!startDate.HasValue) { startDate = endDate.AddMonths(-CurrentValues.Instance.PayPalTransactionSearchMonthsBack); } var errorRetryingInfo = new ErrorRetryingInfo((bool)CurrentValues.Instance.PayPalEnableRetrying, CurrentValues.Instance.PayPalMinorTimeoutInSeconds, CurrentValues.Instance.PayPalUseLastTimeOut); errorRetryingInfo.Info = new ErrorRetryingItemInfo[3]; errorRetryingInfo.Info[0] = new ErrorRetryingItemInfo(CurrentValues.Instance.PayPalIterationSettings1Index, CurrentValues.Instance.PayPalIterationSettings1CountRequestsExpectError, CurrentValues.Instance.PayPalIterationSettings1TimeOutAfterRetryingExpiredInMinutes); errorRetryingInfo.Info[1] = new ErrorRetryingItemInfo(CurrentValues.Instance.PayPalIterationSettings2Index, CurrentValues.Instance.PayPalIterationSettings2CountRequestsExpectError, CurrentValues.Instance.PayPalIterationSettings2TimeOutAfterRetryingExpiredInMinutes); errorRetryingInfo.Info[2] = new ErrorRetryingItemInfo(CurrentValues.Instance.PayPalIterationSettings3Index, CurrentValues.Instance.PayPalIterationSettings3CountRequestsExpectError, CurrentValues.Instance.PayPalIterationSettings3TimeOutAfterRetryingExpiredInMinutes); var reqInfo = new PayPalRequestInfo { SecurityInfo = securityInfo, StartDate = startDate.Value, EndDate = endDate, ErrorRetryingInfo = errorRetryingInfo, OpenTimeOutInMinutes = CurrentValues.Instance.PayPalOpenTimeoutInMinutes, SendTimeoutInMinutes = CurrentValues.Instance.PayPalSendTimeoutInMinutes, DaysPerRequest = CurrentValues.Instance.PayPalDaysPerRequest }; MP_PayPalTransaction mpTransaction = null; int numOfTransactions = 0; RequestsCounterData requestsCounter = ElapsedTimeHelper.CalculateAndStoreElapsedTimeForCallInSeconds( elapsedTimeInfo, databaseCustomerMarketPlace.Id, ElapsedDataMemberType.RetrieveDataFromExternalService, () => PayPalServiceHelper.GetTransactionData(reqInfo, data => { mpTransaction = Helper.SavePayPalTransactionInfo(databaseCustomerMarketPlace, data, historyRecord, mpTransaction); numOfTransactions += (data == null ? 0 : data.Count); return(true); }) ); return(new UpdateActionResultInfo { Name = UpdateActionResultType.TransactionItemsCount, Value = numOfTransactions, RequestsCounter = requestsCounter, ElapsedTime = elapsedTimeInfo }); }
public RequestsCounterData GetTransactionData(PayPalRequestInfo reqInfo, Func <List <PayPalTransactionItem>, bool> func) { DateTime startDate = reqInfo.StartDate; DateTime endDate = reqInfo.EndDate; var requestsCounter = new RequestsCounterData(); var ranges = GetDailyRanges(startDate, endDate, reqInfo.DaysPerRequest); int counter = 0; int daysFailedSoFar = 0; foreach (var range in ranges) { ++counter; var fromDate = range.Item1; var toDate = range.Item2; bool hasMoreItems; do { WriteLog(string.Format("Request Transactions {0} of {1} ({2}): [{3} - {4}]", counter, ranges.Count, reqInfo.SecurityInfo.UserId, fromDate, toDate)); TransactionSearchResponseType resp = GetTransactions(fromDate, toDate, reqInfo, requestsCounter, ref daysFailedSoFar); WriteLog(string.Format("Result Request Transactions {0} of {1} ({2}): [{3} - {4}]: {5}", counter, ranges.Count, reqInfo.SecurityInfo.UserId, fromDate, toDate, resp == null || resp.PaymentTransactions == null ? 0 : resp.PaymentTransactions.Length)); if (resp == null) { break; } List <PayPalTransactionItem> list; if (!TryParseData(resp, out list)) { break; } if (!func(list)) { break; } toDate = list.AsParallel().Min(x => x.Created); hasMoreItems = resp.Ack == AckCodeType.SuccessWithWarning && resp.Errors.Any(e => e.ErrorCode == "11002"); }while (hasMoreItems); } return(requestsCounter); }
private PayPalAPIInterfaceClient CreateService(PayPalRequestInfo reqInfo) { int openTimeOutInMinutes = reqInfo.OpenTimeOutInMinutes; int sendTimeout = reqInfo.SendTimeoutInMinutes; var binding = new BasicHttpBinding(BasicHttpSecurityMode.Transport); binding.MaxReceivedMessageSize = 2147483647; binding.MaxBufferSize = 2147483647; binding.OpenTimeout = new TimeSpan(0, openTimeOutInMinutes, 0); binding.ReceiveTimeout = new TimeSpan(0, 20, 0); binding.SendTimeout = new TimeSpan(0, sendTimeout, 0); var addr = new EndpointAddress(_ConnectionInfo.ServiceEndPoint); return(new PayPalAPIInterfaceClient(binding, addr)); }
private TransactionSearchResponseType GetTransactions(DateTime startDate, DateTime endDate, PayPalRequestInfo reqInfo, RequestsCounterData requestsCounter, ref int daysFailedSoFar) { var request = new TransactionSearchReq { TransactionSearchRequest = new TransactionSearchRequestType { Version = Version, StartDate = startDate.ToUniversalTime(), StatusSpecified = true, EndDate = endDate.ToUniversalTime(), EndDateSpecified = true, DetailLevel = new[] { DetailLevelCodeType.ReturnAll }, Status = PaymentTransactionStatusCodeType.Success } }; var userId = reqInfo.SecurityInfo.UserId; bool needToRetry = true; Exception lastEx = null; int counter = 0; while (needToRetry && counter <= CurrentValues.Instance.PayPalNumberOfRetries) { counter++; try { var cred = CreateCredentials(reqInfo.SecurityInfo); WriteLog(string.Format("PayPalService TransactionSearch Starting ({0})", userId)); var service = CreateService(reqInfo); TransactionSearchResponseType resp = service.TransactionSearch(ref cred, request); WriteLog(string.Format( "PayPalService TransactionSearch Request:\n{0}\nResponse:\n{1}", request.TransactionSearchRequest.ToLogStr(), resp.ToLogStr() )); requestsCounter.IncrementRequests("TransactionSearch"); if (resp.Ack == AckCodeType.Failure) { throw ServiceRequestExceptionFactory.Create(new PayPalServiceResponceExceptionWrapper(resp)); } WriteLog(string.Format("PayPalService TransactionSearch Ended ({0})", userId)); return(resp); } catch (Exception ex) { lastEx = ex; if (ex is IServiceRequestException) { var exFail = ex as IServiceRequestException; needToRetry = _CommonInternalErrors.Any(exFail.HasErrorWithCode); } WriteLoggerHelper.Write(string.Format("PayPalService TransactionSearch Error ({0}): need to retry: {2} \n {1} ", userId, ex.Message, needToRetry), WriteLogType.Error, null, ex); } } WriteLoggerHelper.Write(string.Format("Failed fetching pay pal data from {0} to {1}", request.TransactionSearchRequest.StartDate, request.TransactionSearchRequest.EndDate), WriteLogType.Info, null, lastEx); if (daysFailedSoFar == CurrentValues.Instance.PayPalMaxAllowedFailures) { WriteLoggerHelper.Write(string.Format("Max number of failures:{0} exceeded.", daysFailedSoFar), WriteLogType.Error, null, lastEx); throw lastEx ?? new Exception(); } daysFailedSoFar++; return(null); }
public static RequestsCounterData GetTransactionData(PayPalRequestInfo reqInfo, Func <List <PayPalTransactionItem>, bool> action) { return(new PayPalServicePaymentsProHelper().GetTransactionData(reqInfo, action)); }