Пример #1
0
        /// <summary>
        /// Saves the transactions.
        /// </summary>
        /// <param name="transactions">The transactions.</param>
        /// <param name="marketPlaceId">The market place identifier.</param>
        /// <param name="historyId">The history identifier.</param>
        /// <exception cref="System.InvalidOperationException">could not save transactions</exception>
        private void SaveTransactions(IList <PayPal3dPartyTransactionItem> transactions, int marketPlaceId, int historyId)
        {
            if (transactions.Any())
            {
                return;
            }

            PayPalTransaction transaction = new PayPalTransaction {
                Created = DateTime.UtcNow,
                CustomerMarketPlaceId = marketPlaceId,
                CustomerMarketPlaceUpdatingHistoryRecordId = historyId
            };

            int transactionId = (int)PayPalQueries.SaveTransaction(transaction);

            if (transactionId < 1)
            {
                throw new InvalidOperationException("could not save paypal transactionItem");
            }

            var res = PayPalQueries.SaveTransactionItems(transactions.Select(t => CreateSingleTransaction(t, transactionId)));

            if (!res.HasValue || !res.Value)
            {
                throw new InvalidOperationException("could not save transactionItem items");
            }
        }
Пример #2
0
        /// <summary>
        /// Handles the specified command. (Sent from REST endpoint)
        /// </summary>
        /// <param name="command">The command.</param>
        public async void Handle(PayPalRegisterCustomerCommand command)
        {
            var getAccessTokenCommand = new PayPalGetAccessToken3dPartyCommand {
                RequestToken     = command.RequestToken,
                VerificationCode = command.VerificationToken,
            };

            //get access token
            var accessTokenResponse = await GetAccessTokenSendReceive.SendAsync(ThirdPartyServiceConfig.Address, getAccessTokenCommand);

            var getPersonalDataCommand = new PayPalGetCustomerPersonalData3dPartyCommand {
                TokenSecret = accessTokenResponse.TokenSecret,
                Token       = accessTokenResponse.Token
            };

            //get account info
            var personalDataResponse = await GetCustomerPersonalDataSendReceive.SendAsync(ThirdPartyServiceConfig.Address, getPersonalDataCommand);

            InfoAccumulator info = new InfoAccumulator();

            //validates market place
            if (!MarketPlaceQueries.IsMarketPlaceInWhiteList(PayPalInternalId, personalDataResponse.UserPersonalInfo.EMail))
            {
                if (MarketPlaceQueries.IsMarketPlaceExists(PayPalInternalId, personalDataResponse.UserPersonalInfo.EMail))
                {
                    string msg = string.Format("the market place with already exists");
                    info.AddError(msg);
                    SendReply(info, command);
                    return;
                }
            }

            int marketPlaceId = MarketPlaceQueries.GetMarketPlaceIdFromTypeId(PayPalInternalId)
                                .GetValue();

            CustomerMarketPlace marketPlace = new CustomerMarketPlace {
                CustomerId    = int.Parse(EncryptionUtils.SafeDecrypt(command.CustomerId)),
                DisplayName   = personalDataResponse.UserPersonalInfo.EMail,
                MarketPlaceId = marketPlaceId,
                SecurityData  = SerializationUtils.SerializeToBinaryXml(new PayPalSecurityInfo {
                    TokenSecret      = accessTokenResponse.TokenSecret,
                    AccessToken      = accessTokenResponse.Token,
                    VerificationCode = command.RequestToken,
                    RequestToken     = command.RequestToken,
                    UserId           = personalDataResponse.UserPersonalInfo.EMail
                })
            };

            int marketPlaceTableId = (int)MarketPlaceQueries.UpsertMarketPlace(marketPlace, PayPalInternalId);

            personalDataResponse.UserPersonalInfo.CustomerMarketPlaceId = marketPlaceId;

            var updateHistory = new CustomerMarketPlaceUpdateHistory {
                CustomerMarketPlaceId = marketPlaceTableId,
                UpdatingStart         = DateTime.UtcNow
            };

            int marketPlaceHistoryId = (int)MarketPlaceQueries.UpsertMarketPlaceUpdatingHistory(updateHistory);

            PayPalQueries.SavePersonalInfo(personalDataResponse.UserPersonalInfo);

            DateTime startDate;
            var      lastTransactionTime = PayPalQueries.GetLastTransactionDate(marketPlaceTableId);

            if (!lastTransactionTime.HasValue)
            {
                startDate = DateTime.UtcNow.AddMonths(-Config.TransactionSearchMonthsBack);
            }
            else
            {
                startDate = (DateTime)lastTransactionTime;
            }

            var getTransactionsCommand = new PayPalGetTransations3dPartyCommand {
                AccessToken       = accessTokenResponse.Token,
                AccessTokenSecret = accessTokenResponse.TokenSecret,
                UtcDateFrom       = startDate,
                UtcDateTo         = DateTime.UtcNow
            };

            var response = await GetTransactionsSendReceive.SendAsync(ThirdPartyServiceConfig.Address, getTransactionsCommand);

            SaveTransactions(response.Transactions, marketPlaceTableId, marketPlaceHistoryId);

            updateHistory = new CustomerMarketPlaceUpdateHistory
            {
                CustomerMarketPlaceId = marketPlaceTableId,
                UpdatingEnd           = DateTime.UtcNow
            };

            marketPlaceHistoryId = (int)MarketPlaceQueries.UpsertMarketPlaceUpdatingHistory(updateHistory);
            if (marketPlaceTableId < 1)
            {
                throw new InvalidOperationException("could not save market place history update");
            }
        }