github.com/plutov/paypal/v4@v4.7.1/transaction_search.go (about)

     1  package paypal
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"strconv"
     7  	"time"
     8  )
     9  
    10  type TransactionSearchRequest struct {
    11  	TransactionID               *string
    12  	TransactionType             *string
    13  	TransactionStatus           *string
    14  	TransactionAmount           *string
    15  	TransactionCurrency         *string
    16  	StartDate                   time.Time
    17  	EndDate                     time.Time
    18  	PaymentInstrumentType       *string
    19  	StoreID                     *string
    20  	TerminalID                  *string
    21  	Fields                      *string
    22  	BalanceAffectingRecordsOnly *string
    23  	PageSize                    *int
    24  	Page                        *int
    25  }
    26  
    27  type TransactionSearchResponse struct {
    28  	TransactionDetails  []SearchTransactionDetails `json:"transaction_details"`
    29  	AccountNumber       string                     `json:"account_number"`
    30  	StartDate           JSONTime                   `json:"start_date"`
    31  	EndDate             JSONTime                   `json:"end_date"`
    32  	LastRefreshDatetime JSONTime                   `json:"last_refreshed_datetime"`
    33  	Page                int                        `json:"page"`
    34  	SharedListResponse
    35  }
    36  
    37  // ListTransactions - Use this to search PayPal transactions from the last 31 days.
    38  // Endpoint: GET /v1/reporting/transactions
    39  func (c *Client) ListTransactions(ctx context.Context, req *TransactionSearchRequest) (*TransactionSearchResponse, error) {
    40  	response := &TransactionSearchResponse{}
    41  
    42  	r, err := c.NewRequest(ctx, "GET", fmt.Sprintf("%s%s", c.APIBase, "/v1/reporting/transactions"), nil)
    43  	if err != nil {
    44  		return nil, err
    45  	}
    46  
    47  	q := r.URL.Query()
    48  
    49  	q.Add("start_date", req.StartDate.Format(time.RFC3339))
    50  	q.Add("end_date", req.EndDate.Format(time.RFC3339))
    51  
    52  	if req.TransactionID != nil {
    53  		q.Add("transaction_id", *req.TransactionID)
    54  	}
    55  	if req.TransactionType != nil {
    56  		q.Add("transaction_type", *req.TransactionType)
    57  	}
    58  	if req.TransactionStatus != nil {
    59  		q.Add("transaction_status", *req.TransactionStatus)
    60  	}
    61  	if req.TransactionAmount != nil {
    62  		q.Add("transaction_amount", *req.TransactionAmount)
    63  	}
    64  	if req.TransactionCurrency != nil {
    65  		q.Add("transaction_currency", *req.TransactionCurrency)
    66  	}
    67  	if req.PaymentInstrumentType != nil {
    68  		q.Add("payment_instrument_type", *req.PaymentInstrumentType)
    69  	}
    70  	if req.StoreID != nil {
    71  		q.Add("store_id", *req.StoreID)
    72  	}
    73  	if req.TerminalID != nil {
    74  		q.Add("terminal_id", *req.TerminalID)
    75  	}
    76  	if req.Fields != nil {
    77  		q.Add("fields", *req.Fields)
    78  	}
    79  	if req.BalanceAffectingRecordsOnly != nil {
    80  		q.Add("balance_affecting_records_only", *req.BalanceAffectingRecordsOnly)
    81  	}
    82  	if req.PageSize != nil {
    83  		q.Add("page_size", strconv.Itoa(*req.PageSize))
    84  	}
    85  	if req.Page != nil {
    86  		q.Add("page", strconv.Itoa(*req.Page))
    87  	}
    88  
    89  	r.URL.RawQuery = q.Encode()
    90  
    91  	if err = c.SendWithAuth(r, response); err != nil {
    92  		return nil, err
    93  	}
    94  
    95  	return response, nil
    96  }