Пример #1
0
        private payoutItemDetails getPayoutItem(string payoutItemID, PayPalOAuthToken authToken, Guid logID)
        {
            Log(MessageType.Info, "getPayouts()", "Fetch payouts", relatedMessageID: logID);

            try
            {
                var request = new WebClient.RequestParams(this)
                {
                    Method      = HTTPRequestMethod.GET,
                    ContentType = ContentType.JSON,
                    Headers     = new Dictionary <string, string>
                    {
                        { HDR_AUTHORIZATION, authToken.AuthorizationHeader }
                    }
                };

                var response = WebClient.GetJson(URI_GetPayoutItem(payoutItemID), request);
                Log(MessageType.Trace, "getPayouts()", "Payouts", relatedMessageID: logID, parameters: response.ToJSON());
                Log(MessageType.Info, "getPayouts()", "Payotus fetched", relatedMessageID: logID);

                return(new payoutItemDetails(response));
            }
            catch (Exception ex)
            {
                var error = composeError(StringConsts.PAYPAL_PAYOUT_ITEM_FETCH_ERROR_MESSAGE.Args(ex.ToMessageWithType()), ex);
                Log(MessageType.Error, "getPayouts()", error.Message, relatedMessageID: logID);
                throw error;
            }
        }
Пример #2
0
        private bool doVoid(PayPalSession session, PayPalOAuthToken authToken, Transaction transaction, string description = null, object extraData = null)
        {
            var logID = Log(MessageType.Info, "doVoid()", "Void transaction");

            var payoutItemID = getPayoutItemID(transaction);

            if (payoutItemID.IsNullOrWhiteSpace())
            {
                if (doRefresh(session, authToken, transaction, extraData))
                {
                    session.StoreTransaction(transaction);
                    payoutItemID = getPayoutItemID(transaction);
                }
                else
                {
                    return(false);
                }
            }

            var payoutItem = cancelPayoutItem(payoutItemID, authToken, logID);

            if (payoutItem.TransactionStatus != payoutTransactionStatus.RETURNED)
            {
                return(false);
            }

            transaction.__Apply(Transaction.Operation.Void(TransactionStatus.Refunded, payoutItem.TimeProcessed.Value, payoutItem.Token, description, extraData: extraData));
            return(true);
        }
Пример #3
0
        private payoutBatch createPayouts(payout payout, PayPalOAuthToken authToken, Guid logID)
        {
            Log(MessageType.Info, "createPayouts()", "Create payouts", relatedMessageID: logID);

            try
            {
                var request = new WebClient.RequestParams(this)
                {
                    Method      = HTTPRequestMethod.POST,
                    ContentType = ContentType.JSON,
                    Headers     = new Dictionary <string, string>
                    {
                        { HDR_AUTHORIZATION, authToken.AuthorizationHeader }
                    },
                    QueryParameters = new Dictionary <string, string>
                    {
                        { PRM_SYNC_MODE, m_SyncMode.AsString() }
                    },
                    Body = payout.ToJSONDataMap().ToJSON(JSONWritingOptions.Compact)
                };

                var response = WebClient.GetJson(URI_CreatePayouts(), request);
                Log(MessageType.Trace, "createPayouts()", "Payouts", relatedMessageID: logID, parameters: response.ToJSON());
                Log(MessageType.Info, "createPayouts()", "Payouts created", relatedMessageID: logID);
                return(new payoutBatch(response));
            }
            catch (Exception ex)
            {
                var error = composeError(StringConsts.PAYPAL_PAYOUTS_CREATE_ERROR_MESSAGE.Args(ex.ToMessageWithType()), ex);
                Log(MessageType.Error, "createPayouts()", error.Message, relatedMessageID: logID);
                throw error;
            }
        }
Пример #4
0
        private void refreshOAuthToken(PayPalConnectionParameters connectParameters)
        {
            try
            {
                Log(MessageType.Info, "refreshOAuthToken()", StringConsts.PAYPAL_REFRESH_TOKEN_MESSAGE);

                var user = connectParameters.User;

                var request = new WebClient.RequestParams
                {
                    Caller      = this,
                    Uri         = new Uri(m_ApiUri + URI_GET_OAUTH_TOKEN),
                    Method      = HTTPRequestMethod.POST,
                    ContentType = ContentType.FORM_URL_ENCODED,
                    Headers     = new Dictionary <string, string>
                    {
                        { HDR_AUTHORIZATION, HDR_AUTHORIZATION_BASIC.Args(getBaseAuthString(user.Credentials)) }
                    },
                    BodyParameters = new Dictionary <string, string>
                    {
                        { PRM_GRANT_TYPE, PRM_CLIENT_CREDENTIALS }
                    }
                };

                var response = WebClient.GetJson(request);
                Log(MessageType.Info, "refreshOAuthToken()", response.ToJSON());

                var oauthToken = new PayPalOAuthToken(response, m_OAuthTokenExpirationMargin);
                var token      = new AuthenticationToken(PAYPAL_REALM, oauthToken);
                connectParameters.User = new User(user.Credentials, token, user.Name, user.Rights);

                Log(MessageType.Info, "refreshOAuthToken()", StringConsts.PAYPAL_TOKEN_REFRESHED_MESSAGE);
            }
            catch (Exception ex)
            {
                var message = StringConsts.PAYPAL_REFRESH_TOKEN_ERROR.Args(ex.ToMessageWithType());
                var error   = PayPalPaymentException.ComposeError(message, ex);
                Log(MessageType.Error, "refreshOAuthToken()", error.Message, ex);

                throw error;
            }
        }
Пример #5
0
        private bool doRefresh(PayPalSession session, PayPalOAuthToken authToken, Transaction transaction, object extraData = null)
        {
            var logID = Log(MessageType.Info, "doRefresh()", "Refresh transaction");

            payoutItemDetails payoutItem = null;
            var payoutItemID             = getPayoutItemID(transaction);

            if (payoutItemID.IsNullOrWhiteSpace())
            {
                var payouts = getPayouts(getBatchID(transaction), authToken, logID);
                switch (payouts.BatchHeader.BatchStatus)
                {
                case payoutBatchStatus.NEW:
                case payoutBatchStatus.PENDING:
                case payoutBatchStatus.PROCESSING:
                    return(false);
                }
                if (!payouts.Items.Any())
                {
                    return(false);
                }
                payoutItem = payouts.Items.FirstOrDefault(item => item.PayoutItem.SenderItemId.Equals(transaction.ID.AsString()));
            }
            else
            {
                payoutItem = getPayoutItem(payoutItemID, authToken, logID);
            }
            if (payoutItem == null)
            {
                return(false);
            }

            var transactionStatus = mapTransactionStatus(payoutItem.TransactionStatus);

            if (transaction.Status == transactionStatus)
            {
                return(false);
            }

            transaction.__Apply(Transaction.Operation.Refresh(transactionStatus, payoutItem.TimeProcessed, payoutItem.Token, payoutItem.Amount, payoutItem.PayoutItemFee.Value, extraData));
            return(true);
        }
Пример #6
0
        private payoutItemDetails cancelPayoutItem(string payoutItemID, PayPalOAuthToken authToken, Guid logID)
        {
            Log(MessageType.Info, "cancelPayoutIyem()", "Cancel payout item", relatedMessageID: logID);

            try
            {
                var request = new WebClient.RequestParams(this)
                {
                    Method      = HTTPRequestMethod.POST,
                    ContentType = ContentType.JSON,
                    Headers     = new Dictionary <string, string>
                    {
                        { HDR_AUTHORIZATION, authToken.AuthorizationHeader }
                    }
                };

                var response = WebClient.GetJson(URI_CancelPayoutItem(payoutItemID), request);
                Log(MessageType.Trace, "cancelPayoutIyem()", "Payout Item", relatedMessageID: logID, parameters: response.ToJSON());
                var payoutItem = new payoutItemDetails(response);
                if (payoutItem.TransactionStatus == payoutTransactionStatus.RETURNED)
                {
                    Log(MessageType.Info, "cancelPayoutIyem()", "Payout item canceled", relatedMessageID: logID);
                }
                else
                {
                    Log(MessageType.Info, "cancelPayoutIyem()", "Payout item not canceled", relatedMessageID: logID);
                }

                return(payoutItem);
            }
            catch (Exception ex)
            {
                var error = composeError(StringConsts.PAYPAL_PAYOUT_ITEM_CANCEL_ERROR_MESSAGE.Args(ex.ToMessageWithType()), ex);
                Log(MessageType.Error, "cancelPayoutIyem()", error.Message, ex, relatedMessageID: logID);
                throw error;
            }
        }
Пример #7
0
        private bool doTransfer(PayPalSession session, PayPalOAuthToken authToken, Transaction transaction, object extraData = null)
        {
            var logID = Log(MessageType.Info, "doTransfer()", "Transfer {0}".Args(transaction.Amount));

            var fromActualData = session.FetchAccountData(transaction.From);
            var toActualData   = session.FetchAccountData(transaction.To);

            var payouts = createPayouts(
                new payout
            {
                SenderBatchHeader = new payoutSenderBatchHeader
                {
                    SenderBatchID = transaction.ID.AsString(),
                    EmailSubject  = m_PayoutEmailSubject,
                    RecipientType = payoutRecipientType.EMAIL
                },
                Items = new List <payoutItem>
                {
                    new payoutItem
                    {
                        SenderItemId  = transaction.ID.AsString(),
                        RecipientType = payoutRecipientType.EMAIL,
                        Amount        = transaction.Amount,
                        Note          = transaction.Description,
                        Receiver      = toActualData.AccountID.AsString()
                    }
                }
            }, authToken, logID);

            switch (payouts.BatchHeader.BatchStatus)
            {
            case payoutBatchStatus.NEW:
            case payoutBatchStatus.PENDING:
            case payoutBatchStatus.PROCESSING:
                transaction.__Apply(Transaction.Operation.Refresh(TransactionStatus.Pending, App.TimeSource.UTCNow, payouts.BatchHeader.PayoutBatchID, transaction.Amount.Value, extraData: extraData));
                return(true);

            case payoutBatchStatus.SUCCESS:
                var payoutItem = payouts.Items.FirstOrAnyOrDefault(item => item.PayoutItem.SenderItemId.Equals(transaction.ID.ToString()));
                if (payoutItem == null)
                {
                    throw new PaymentException();
                }

                var transactionStatus = mapTransactionStatus(payoutItem.TransactionStatus);
                switch (transactionStatus)
                {
                case TransactionStatus.Pending:
                case TransactionStatus.Unclaimed:
                case TransactionStatus.Refunded:
                    break;

                case TransactionStatus.Success:
                    StatTransfer(transaction.Amount);
                    break;

                default:
                    throw new PaymentException();
                }
                transaction.__Apply(Transaction.Operation.Refresh(transactionStatus, payouts.BatchHeader.TimeCreated.Value, payoutItem.Token, transaction.Amount.Value, payoutItem.PayoutItemFee.Value, extraData: extraData));
                return(true);
            }
            throw new PaymentException();
        }
Пример #8
0
          private void refreshOAuthToken(PayPalConnectionParameters connectParameters)
          {   
              try
              {
                  Log(MessageType.Info, "refreshOAuthToken()", StringConsts.PAYPAL_REFRESH_TOKEN_MESSAGE);

                  var user = connectParameters.User;
                  
                  var request = new WebClient.RequestParams
                  { 
                      Caller = this,
                      Uri = new Uri(m_ApiUri + URI_GET_OAUTH_TOKEN),
                      Method = HTTPRequestMethod.POST,
                      ContentType = ContentType.FORM_URL_ENCODED,
                      Headers = new Dictionary<string, string> 
                          { 
                              { HDR_AUTHORIZATION, HDR_AUTHORIZATION_BASIC.Args(getBaseAuthString(user.Credentials)) } 
                          },
                      BodyParameters = new Dictionary<string, string> 
                          { 
                              { PRM_GRANT_TYPE, PRM_CLIENT_CREDENTIALS } 
                          }
                  };
                  
                  var response = WebClient.GetJson(request);
                  Log(MessageType.Info, "refreshOAuthToken()", response.ToJSON());
                  
                  var oauthToken = new PayPalOAuthToken(response, m_OAuthTokenExpirationMargin);
                  var token = new AuthenticationToken(PAYPAL_REALM, oauthToken);
                  connectParameters.User = new User(user.Credentials, token, user.Name, user.Rights);

                  Log(MessageType.Info, "refreshOAuthToken()", StringConsts.PAYPAL_TOKEN_REFRESHED_MESSAGE);
              }
              catch (Exception ex)
              {   
                  var message = StringConsts.PAYPAL_REFRESH_TOKEN_ERROR.Args(ex.ToMessageWithType());
                  var error = PayPalPaymentException.ComposeError(message, ex);
                  Log(MessageType.Error, "refreshOAuthToken()", error.Message, ex);
                  
                  throw error;
              }
          }