Esempio n. 1
0
        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);
        }
Esempio n. 6
0
 public static RequestsCounterData GetTransactionData(PayPalRequestInfo reqInfo, Func <List <PayPalTransactionItem>, bool> action)
 {
     return(new PayPalServicePaymentsProHelper().GetTransactionData(reqInfo, action));
 }