forked from go-packages/paypal
Add transaction search /v1/reporting/transactions (#145)
This commit is contained in:
parent
21b349dbdc
commit
4f66415fcd
|
@ -48,6 +48,7 @@ Currently supports **v2** only, if you want to use **v1**, use **v1.1.4** git ta
|
||||||
* PATCH /v1/notifications/webhooks/**ID**
|
* PATCH /v1/notifications/webhooks/**ID**
|
||||||
* DELETE /v1/notifications/webhooks/**ID**
|
* DELETE /v1/notifications/webhooks/**ID**
|
||||||
* POST /v1/notifications/verify-webhook-signature
|
* POST /v1/notifications/verify-webhook-signature
|
||||||
|
* POST /v1/reporting/transactions
|
||||||
|
|
||||||
### Missing endpoints
|
### Missing endpoints
|
||||||
It is possible that some endpoints are missing in this SDK Client, but you can use built-in **paypal** functions to perform a request: **NewClient -> NewRequest -> SendWithAuth**
|
It is possible that some endpoints are missing in this SDK Client, but you can use built-in **paypal** functions to perform a request: **NewClient -> NewRequest -> SendWithAuth**
|
||||||
|
|
97
transaction_search.go
Normal file
97
transaction_search.go
Normal file
|
@ -0,0 +1,97 @@
|
||||||
|
package paypal
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"strconv"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
type TransactionSearchRequest struct {
|
||||||
|
TransactionID *string
|
||||||
|
TransactionType *string
|
||||||
|
TransactionStatus *string
|
||||||
|
TransactionAmount *string
|
||||||
|
TransactionCurrency *string
|
||||||
|
StartDate time.Time
|
||||||
|
EndDate time.Time
|
||||||
|
PaymentInstrumentType *string
|
||||||
|
StoreID *string
|
||||||
|
TerminalID *string
|
||||||
|
Fields *string
|
||||||
|
BalanceAffectingRecordsOnly *string
|
||||||
|
PageSize *int
|
||||||
|
Page *int
|
||||||
|
}
|
||||||
|
|
||||||
|
type TransactionSearchResponse struct {
|
||||||
|
TransactionDetails []SearchTransactionDetails `json:"transaction_details"`
|
||||||
|
AccountNumber string `json:"account_number"`
|
||||||
|
StartDate JSONTime `json:"start_date"`
|
||||||
|
EndDate JSONTime `json:"end_date"`
|
||||||
|
LastRefreshDatetime JSONTime `json:"last_refreshed_datetime"`
|
||||||
|
Page int `json:"page"`
|
||||||
|
TotalItems int `json:"total_items"`
|
||||||
|
TotalPages int `json:"total_pages"`
|
||||||
|
Links []Link `json:"links"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListTransactions - Use this to search PayPal transactions from the last 31 days.
|
||||||
|
// Endpoint: GET /v1/reporting/transactions
|
||||||
|
func (c *Client) ListTransactions(req *TransactionSearchRequest) (*TransactionSearchResponse, error) {
|
||||||
|
response := &TransactionSearchResponse{}
|
||||||
|
|
||||||
|
r, err := c.NewRequest("GET", fmt.Sprintf("%s%s", c.APIBase, "/v1/reporting/transactions"), nil)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
q := r.URL.Query()
|
||||||
|
|
||||||
|
q.Add("start_date", req.StartDate.Format(time.RFC3339))
|
||||||
|
q.Add("end_date", req.EndDate.Format(time.RFC3339))
|
||||||
|
|
||||||
|
if req.TransactionID != nil {
|
||||||
|
q.Add("transaction_id", *req.TransactionID)
|
||||||
|
}
|
||||||
|
if req.TransactionType != nil {
|
||||||
|
q.Add("transaction_type", *req.TransactionType)
|
||||||
|
}
|
||||||
|
if req.TransactionStatus != nil {
|
||||||
|
q.Add("transaction_status", *req.TransactionStatus)
|
||||||
|
}
|
||||||
|
if req.TransactionAmount != nil {
|
||||||
|
q.Add("transaction_amount", *req.TransactionAmount)
|
||||||
|
}
|
||||||
|
if req.TransactionCurrency != nil {
|
||||||
|
q.Add("transaction_currency", *req.TransactionCurrency)
|
||||||
|
}
|
||||||
|
if req.PaymentInstrumentType != nil {
|
||||||
|
q.Add("payment_instrument_type", *req.PaymentInstrumentType)
|
||||||
|
}
|
||||||
|
if req.StoreID != nil {
|
||||||
|
q.Add("store_id", *req.StoreID)
|
||||||
|
}
|
||||||
|
if req.TerminalID != nil {
|
||||||
|
q.Add("terminal_id", *req.TerminalID)
|
||||||
|
}
|
||||||
|
if req.Fields != nil {
|
||||||
|
q.Add("fields", *req.Fields)
|
||||||
|
}
|
||||||
|
if req.BalanceAffectingRecordsOnly != nil {
|
||||||
|
q.Add("balance_affecting_records_only", *req.BalanceAffectingRecordsOnly)
|
||||||
|
}
|
||||||
|
if req.PageSize != nil {
|
||||||
|
q.Add("page_size", strconv.Itoa(*req.PageSize))
|
||||||
|
}
|
||||||
|
if req.Page != nil {
|
||||||
|
q.Add("page", strconv.Itoa(*req.Page))
|
||||||
|
}
|
||||||
|
|
||||||
|
r.URL.RawQuery = q.Encode()
|
||||||
|
|
||||||
|
if err = c.SendWithAuth(r, response); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return response, nil
|
||||||
|
}
|
109
types.go
109
types.go
|
@ -5,6 +5,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
@ -1082,6 +1083,106 @@ type (
|
||||||
Type string `json:"type"`
|
Type string `json:"type"`
|
||||||
Granted bool `json:"granted"`
|
Granted bool `json:"granted"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SearchItemDetails struct {
|
||||||
|
ItemCode string `json:"item_code"`
|
||||||
|
ItemName string `json:"item_name"`
|
||||||
|
ItemDescription string `json:"item_description"`
|
||||||
|
ItemOptions string `json:"item_options"`
|
||||||
|
ItemQuantity string `json:"item_quantity"`
|
||||||
|
ItemUnitPrice Money `json:"item_unit_price"`
|
||||||
|
ItemAmount Money `json:"item_amount"`
|
||||||
|
DiscountAmount *Money `json:"discount_amount"`
|
||||||
|
AdjustmentAmount *Money `json:"adjustment_amount"`
|
||||||
|
GiftWrapAmount *Money `json:"gift_wrap_amount"`
|
||||||
|
TaxPercentage string `json:"tax_percentage"`
|
||||||
|
TaxAmounts []SearchTaxAmount `json:"tax_amounts"`
|
||||||
|
BasicShippingAmount *Money `json:"basic_shipping_amount"`
|
||||||
|
ExtraShippingAmount *Money `json:"extra_shipping_amount"`
|
||||||
|
HandlingAmount *Money `json:"handling_amount"`
|
||||||
|
InsuranceAmount *Money `json:"insurance_amount"`
|
||||||
|
TotalItemAmount Money `json:"total_item_amount"`
|
||||||
|
InvoiceNumber string `json:"invoice_number"`
|
||||||
|
CheckoutOptions []SearchCheckoutOption `json:"checkout_options"`
|
||||||
|
}
|
||||||
|
|
||||||
|
SearchCheckoutOption struct {
|
||||||
|
CheckoutOptionName string `json:"checkout_option_name"`
|
||||||
|
CheckoutOptionValue string `json:"checkout_option_value"`
|
||||||
|
}
|
||||||
|
|
||||||
|
SearchCartInfo struct {
|
||||||
|
ItemDetails []SearchItemDetails `json:"item_details"`
|
||||||
|
TaxInclusive *bool `json:"tax_inclusive"`
|
||||||
|
PayPalInvoiceID string `json:"paypal_invoice_id"`
|
||||||
|
}
|
||||||
|
|
||||||
|
SearchShippingInfo struct {
|
||||||
|
Name string `json:"name"`
|
||||||
|
Method string `json:"method"`
|
||||||
|
Address Address `json:"address"`
|
||||||
|
SecondaryShippingAddress *Address `json:"secondary_shipping_address"`
|
||||||
|
}
|
||||||
|
|
||||||
|
SearchPayerName struct {
|
||||||
|
GivenName string `json:"given_name"`
|
||||||
|
Surname string `json:"surname"`
|
||||||
|
}
|
||||||
|
|
||||||
|
SearchPayerInfo struct {
|
||||||
|
AccountID string `json:"account_id"`
|
||||||
|
EmailAddress string `json:"email_address"`
|
||||||
|
PhoneNumber *PhoneWithTypeNumber `json:"phone_number"`
|
||||||
|
AddressStatus string `json:"address_status"`
|
||||||
|
PayerStatus string `json:"payer_status"`
|
||||||
|
PayerName SearchPayerName `json:"payer_name"`
|
||||||
|
CountryCode string `json:"country_code"`
|
||||||
|
Address *Address `json:"address"`
|
||||||
|
}
|
||||||
|
|
||||||
|
SearchTaxAmount struct {
|
||||||
|
TaxAmount Money `json:"tax_amount"`
|
||||||
|
}
|
||||||
|
|
||||||
|
SearchTransactionInfo struct {
|
||||||
|
PayPalAccountID string `json:"paypal_account_id"`
|
||||||
|
TransactionID string `json:"transaction_id"`
|
||||||
|
PayPalReferenceID string `json:"paypal_reference_id"`
|
||||||
|
PayPalReferenceIDType string `json:"paypal_reference_id_type"`
|
||||||
|
TransactionEventCode string `json:"transaction_event_code"`
|
||||||
|
TransactionInitiationDate JSONTime `json:"transaction_initiation_date"`
|
||||||
|
TransactionUpdatedDate JSONTime `json:"transaction_updated_date"`
|
||||||
|
TransactionAmount Money `json:"transaction_amount"`
|
||||||
|
FeeAmount *Money `json:"fee_amount"`
|
||||||
|
InsuranceAmount *Money `json:"insurance_amount"`
|
||||||
|
ShippingAmount *Money `json:"shipping_amount"`
|
||||||
|
ShippingDiscountAmount *Money `json:"shipping_discount_amount"`
|
||||||
|
ShippingTaxAmount *Money `json:"shipping_tax_amount"`
|
||||||
|
OtherAmount *Money `json:"other_amount"`
|
||||||
|
TipAmount *Money `json:"tip_amount"`
|
||||||
|
TransactionStatus string `json:"transaction_status"`
|
||||||
|
TransactionSubject string `json:"transaction_subject"`
|
||||||
|
PaymentTrackingID string `json:"payment_tracking_id"`
|
||||||
|
BankReferenceID string `json:"bank_reference_id"`
|
||||||
|
TransactionNote string `json:"transaction_note"`
|
||||||
|
EndingBalance *Money `json:"ending_balance"`
|
||||||
|
AvailableBalance *Money `json:"available_balance"`
|
||||||
|
InvoiceID string `json:"invoice_id"`
|
||||||
|
CustomField string `json:"custom_field"`
|
||||||
|
ProtectionEligibility string `json:"protection_eligibility"`
|
||||||
|
CreditTerm string `json:"credit_term"`
|
||||||
|
CreditTransactionalFee *Money `json:"credit_transactional_fee"`
|
||||||
|
CreditPromotionalFee *Money `json:"credit_promotional_fee"`
|
||||||
|
AnnualPercentageRate string `json:"annual_percentage_rate"`
|
||||||
|
PaymentMethodType string `json:"payment_method_type"`
|
||||||
|
}
|
||||||
|
|
||||||
|
SearchTransactionDetails struct {
|
||||||
|
TransactionInfo SearchTransactionInfo `json:"transaction_info"`
|
||||||
|
PayerInfo *SearchPayerInfo `json:"payer_info"`
|
||||||
|
ShippingInfo *SearchShippingInfo `json:"shipping_info"`
|
||||||
|
CartInfo *SearchCartInfo `json:"cart_info"`
|
||||||
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
// Error method implementation for ErrorResponse struct
|
// Error method implementation for ErrorResponse struct
|
||||||
|
@ -1095,6 +1196,14 @@ func (t JSONTime) MarshalJSON() ([]byte, error) {
|
||||||
return []byte(stamp), nil
|
return []byte(stamp), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UnmarshalJSON for JSONTime, timezone offset is missing a colon ':"
|
||||||
|
func (t *JSONTime) UnmarshalJSON(b []byte) error {
|
||||||
|
s := strings.Trim(string(b), `"`)
|
||||||
|
nt, err := time.Parse("2006-01-02T15:04:05Z0700", s)
|
||||||
|
*t = JSONTime(nt)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
func (e *expirationTime) UnmarshalJSON(b []byte) error {
|
func (e *expirationTime) UnmarshalJSON(b []byte) error {
|
||||||
var n json.Number
|
var n json.Number
|
||||||
err := json.Unmarshal(b, &n)
|
err := json.Unmarshal(b, &n)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user