paypal/types.go

842 lines
30 KiB
Go
Raw Normal View History

2015-10-14 07:30:28 +02:00
package paypalsdk
import (
"encoding/json"
2015-10-23 04:29:36 +02:00
"fmt"
2016-05-16 12:04:23 +02:00
"io"
2015-10-23 04:29:36 +02:00
"net/http"
"sync"
2015-11-25 11:30:25 +01:00
"time"
2015-10-14 07:30:28 +02:00
)
const (
2015-10-23 04:29:36 +02:00
// APIBaseSandBox points to the sandbox (for testing) version of the API
APIBaseSandBox = "https://api.sandbox.paypal.com"
2015-10-14 07:30:28 +02:00
2015-10-23 04:29:36 +02:00
// APIBaseLive points to the live version of the API
APIBaseLive = "https://api.paypal.com"
2016-09-19 06:39:05 +02:00
// RequestNewTokenBeforeExpiresIn is used by SendWithAuth and try to get new Token when it's about to expire
2017-07-07 00:52:39 +02:00
RequestNewTokenBeforeExpiresIn = time.Duration(60) * time.Second
2015-10-14 07:30:28 +02:00
)
2016-10-25 21:44:10 +02:00
// Possible values for `no_shipping` in InputFields
//
// https://developer.paypal.com/docs/api/payment-experience/#definition-input_fields
const (
NoShippingDisplay uint = 0
NoShippingHide uint = 1
NoShippingBuyerAccount uint = 2
)
// Possible values for `address_override` in InputFields
//
// https://developer.paypal.com/docs/api/payment-experience/#definition-input_fields
const (
AddrOverrideFromFile uint = 0
AddrOverrideFromCall uint = 1
)
// Possible values for `landing_page_type` in FlowConfig
//
// https://developer.paypal.com/docs/api/payment-experience/#definition-flow_config
const (
LandingPageTypeBilling string = "Billing"
LandingPageTypeLogin string = "Login"
)
2018-02-07 21:01:07 +01:00
// Possible value for `allowed_payment_method` in PaymentOptions
//
// https://developer.paypal.com/docs/api/payments/#definition-payment_options
const (
AllowedPaymentUnrestricted string = "UNRESTRICTED"
AllowedPaymentInstantFundingSource string = "INSTANT_FUNDING_SOURCE"
AllowedPaymentImmediatePay string = "IMMEDIATE_PAY"
)
2019-06-27 06:16:21 +02:00
// Possible value for `intent` in CreateOrder
//
// https://developer.paypal.com/docs/api/orders/v2/#orders_create
const (
OrderIntentCapture string = "CAPTURE"
OrderIntentAuthorize string = "AUTHORIZE"
)
// Possible values for `category` in Item
//
// https://developer.paypal.com/docs/api/orders/v2/#definition-item
const (
ItemCategoryDigitalGood string = "DIGITAL_GOODS"
ItemCategoryPhysicalGood string = "PHYSICAL_GOODS"
)
// Possible values for `shipping_preference` in ApplicationContext
//
// https://developer.paypal.com/docs/api/orders/v2/#definition-application_context
const (
ShippingPreferenceGetFromFile string = "GET_FROM_FILE"
ShippingPreferenceNoShipping string = "NO_SHIPPING"
ShippingPreferenceSetProvidedAddress string = "SET_PROVIDED_ADDRESS"
)
2015-10-14 07:30:28 +02:00
type (
2017-10-03 05:30:39 +02:00
// JSONTime overrides MarshalJson method to format in ISO8601
JSONTime time.Time
2017-07-23 07:47:17 +02:00
2016-10-24 06:36:23 +02:00
// Address struct
2015-12-17 08:50:25 +01:00
Address struct {
Line1 string `json:"line1"`
Line2 string `json:"line2,omitempty"`
City string `json:"city"`
CountryCode string `json:"country_code"`
PostalCode string `json:"postal_code,omitempty"`
State string `json:"state,omitempty"`
Phone string `json:"phone,omitempty"`
}
2017-08-24 12:22:46 +02:00
// AgreementDetails struct
AgreementDetails struct {
OutstandingBalance AmountPayout `json:"outstanding_balance"`
2017-08-24 17:03:34 +02:00
CyclesRemaining int `json:"cycles_remaining,string"`
CyclesCompleted int `json:"cycles_completed,string"`
2017-08-24 12:22:46 +02:00
NextBillingDate time.Time `json:"next_billing_date"`
LastPaymentDate time.Time `json:"last_payment_date"`
LastPaymentAmount AmountPayout `json:"last_payment_amount"`
FinalPaymentDate time.Time `json:"final_payment_date"`
2017-08-24 17:03:34 +02:00
FailedPaymentCount int `json:"failed_payment_count,string"`
2017-08-24 12:22:46 +02:00
}
2016-10-24 06:36:23 +02:00
// Amount struct
2015-12-17 08:50:25 +01:00
Amount struct {
Currency string `json:"currency"`
Total string `json:"total"`
Details Details `json:"details,omitempty"`
2015-10-23 04:29:36 +02:00
}
2016-10-24 06:36:23 +02:00
// AmountPayout struct
2016-02-17 05:10:49 +01:00
AmountPayout struct {
Currency string `json:"currency"`
Value string `json:"value"`
}
2018-08-28 11:43:53 +02:00
// ApplicationContext struct
ApplicationContext struct {
2019-07-19 07:21:31 +02:00
BrandName string `json:"brand_name,omitempty"`
Locale string `json:"locale,omitempty"`
LandingPage string `json:"landing_page,omitempty"`
ShippingPreference string `json:"shipping_preference,omitempty"`
UserAction string `json:"user_action,omitempty"`
ReturnURL string `json:"return_url,omitempty"`
CancelURL string `json:"cancel_url,omitempty"`
2018-08-28 11:43:53 +02:00
}
2016-10-24 06:36:23 +02:00
// Authorization struct
Authorization struct {
Amount *Amount `json:"amount,omitempty"`
CreateTime *time.Time `json:"create_time,omitempty"`
UpdateTime *time.Time `json:"update_time,omitempty"`
State string `json:"state,omitempty"`
ParentPayment string `json:"parent_payment,omitempty"`
ID string `json:"id,omitempty"`
ValidUntil *time.Time `json:"valid_until,omitempty"`
2016-12-19 06:55:00 +01:00
Links []Link `json:"links,omitempty"`
ClearingTime string `json:"clearing_time,omitempty"`
ProtectionEligibility string `json:"protection_eligibility,omitempty"`
ProtectionEligibilityType string `json:"protection_eligibility_type,omitempty"`
}
2019-08-21 08:24:18 +02:00
AuthorizeOrderResponse struct {
CreateTime *time.Time `json:"create_time,omitempty"`
UpdateTime *time.Time `json:"update_time,omitempty"`
ID string `json:"id,omitempty"`
Status string `json:"status,omitempty"`
Intent string `json:"intent,omitempty"`
PurchaseUnits []PurchaseUnitRequest `json:"purchase_units,omitempty"`
Payer *PayerWithNameAndPhone `json:"payer,omitempty"`
}
2019-07-30 15:12:58 +02:00
// AuthorizeOrderRequest - https://developer.paypal.com/docs/api/orders/v2/#orders_authorize
AuthorizeOrderRequest struct {
2019-08-21 08:24:18 +02:00
PaymentSource *PaymentSource `json:"payment_source,omitempty"`
ApplicationContext ApplicationContext `json:"application_context,omitempty"`
2019-07-30 15:12:58 +02:00
}
// CaptureOrderRequest - https://developer.paypal.com/docs/api/orders/v2/#orders_capture
CaptureOrderRequest struct {
PaymentSource *PaymentSource `json:"payment_source"`
}
2016-10-24 06:36:23 +02:00
// BatchHeader struct
2016-02-17 05:10:49 +01:00
BatchHeader struct {
Amount *AmountPayout `json:"amount,omitempty"`
Fees *AmountPayout `json:"fees,omitempty"`
PayoutBatchID string `json:"payout_batch_id,omitempty"`
BatchStatus string `json:"batch_status,omitempty"`
TimeCreated *time.Time `json:"time_created,omitempty"`
TimeCompleted *time.Time `json:"time_completed,omitempty"`
SenderBatchHeader *SenderBatchHeader `json:"sender_batch_header,omitempty"`
}
2017-07-23 07:47:17 +02:00
// BillingAgreement struct
BillingAgreement struct {
Name string `json:"name,omitempty"`
Description string `json:"description,omitempty"`
StartDate JSONTime `json:"start_date,omitempty"`
Plan BillingPlan `json:"plan,omitempty"`
Payer Payer `json:"payer,omitempty"`
ShippingAddress *ShippingAddress `json:"shipping_address,omitempty"`
OverrideMerchantPreferences *MerchantPreferences `json:"override_merchant_preferences,omitempty"`
2017-07-23 07:47:17 +02:00
}
2017-07-20 11:07:11 +02:00
// BillingPlan struct
BillingPlan struct {
2017-07-23 07:47:17 +02:00
ID string `json:"id,omitempty"`
Name string `json:"name,omitempty"`
Description string `json:"description,omitempty"`
Type string `json:"type,omitempty"`
PaymentDefinitions []PaymentDefinition `json:"payment_definitions,omitempty"`
MerchantPreferences *MerchantPreferences `json:"merchant_preferences,omitempty"`
2017-07-20 11:07:11 +02:00
}
2016-10-24 06:36:23 +02:00
// Capture struct
Capture struct {
Amount *Amount `json:"amount,omitempty"`
IsFinalCapture bool `json:"is_final_capture"`
CreateTime *time.Time `json:"create_time,omitempty"`
UpdateTime *time.Time `json:"update_time,omitempty"`
State string `json:"state,omitempty"`
ParentPayment string `json:"parent_payment,omitempty"`
ID string `json:"id,omitempty"`
2016-12-19 06:55:00 +01:00
Links []Link `json:"links,omitempty"`
}
2017-07-20 11:07:11 +02:00
// ChargeModel struct
ChargeModel struct {
Type string `json:"type,omitempty"`
Amount AmountPayout `json:"amount,omitempty"`
}
2015-12-17 08:50:25 +01:00
// Client represents a Paypal REST API Client
Client struct {
sync.Mutex
2017-07-20 11:07:11 +02:00
Client *http.Client
ClientID string
Secret string
APIBase string
Log io.Writer // If user set log file name all requests will be logged there
Token *TokenResponse
2017-07-07 00:52:39 +02:00
tokenExpiresAt time.Time
2015-11-25 11:30:25 +01:00
}
2016-10-24 06:36:23 +02:00
// CreditCard struct
2015-11-25 11:30:25 +01:00
CreditCard struct {
ID string `json:"id,omitempty"`
PayerID string `json:"payer_id,omitempty"`
ExternalCustomerID string `json:"external_customer_id,omitempty"`
Number string `json:"number"`
Type string `json:"type"`
ExpireMonth string `json:"expire_month"`
ExpireYear string `json:"expire_year"`
CVV2 string `json:"cvv2,omitempty"`
FirstName string `json:"first_name,omitempty"`
LastName string `json:"last_name,omitempty"`
BillingAddress *Address `json:"billing_address,omitempty"`
State string `json:"state,omitempty"`
ValidUntil string `json:"valid_until,omitempty"`
2015-11-25 11:30:25 +01:00
}
2016-12-19 06:55:00 +01:00
// CreditCards GET /v1/vault/credit-cards
CreditCards struct {
Items []CreditCard `json:"items"`
Links []Link `json:"links"`
TotalItems int `json:"total_items"`
TotalPages int `json:"total_pages"`
}
2016-10-24 06:36:23 +02:00
// CreditCardToken struct
2015-11-25 11:30:25 +01:00
CreditCardToken struct {
CreditCardID string `json:"credit_card_id"`
PayerID string `json:"payer_id,omitempty"`
Last4 string `json:"last4,omitempty"`
ExpireYear string `json:"expire_year,omitempty"`
ExpireMonth string `json:"expire_month,omitempty"`
}
2016-12-19 06:55:00 +01:00
// CreditCardsFilter struct
CreditCardsFilter struct {
PageSize int
Page int
}
// CreditCardField PATCH /v1/vault/credit-cards/credit_card_id
CreditCardField struct {
Operation string `json:"op"`
Path string `json:"path"`
Value string `json:"value"`
}
2016-10-24 06:36:23 +02:00
// Currency struct
2015-12-17 08:50:25 +01:00
Currency struct {
Currency string `json:"currency,omitempty"`
Value string `json:"value,omitempty"`
2015-10-23 04:29:36 +02:00
}
2015-10-14 07:30:28 +02:00
// Details structure used in Amount structures as optional value
Details struct {
Subtotal string `json:"subtotal,omitempty"`
Shipping string `json:"shipping,omitempty"`
Tax string `json:"tax,omitempty"`
HandlingFee string `json:"handling_fee,omitempty"`
ShippingDiscount string `json:"shipping_discount,omitempty"`
Insurance string `json:"insurance,omitempty"`
GiftWrap string `json:"gift_wrap,omitempty"`
}
2018-08-28 11:43:53 +02:00
// ErrorResponseDetail struct
ErrorResponseDetail struct {
Field string `json:"field"`
Issue string `json:"issue"`
Links []Link `json:"link"`
}
2016-10-24 06:36:23 +02:00
// ErrorResponse https://developer.paypal.com/docs/api/errors/
2015-10-23 04:29:36 +02:00
ErrorResponse struct {
Response *http.Response `json:"-"`
Name string `json:"name"`
DebugID string `json:"debug_id"`
Message string `json:"message"`
InformationLink string `json:"information_link"`
Details []ErrorResponseDetail `json:"details"`
2015-10-23 04:29:36 +02:00
}
2015-10-16 12:00:57 +02:00
2017-08-24 12:22:46 +02:00
// ExecuteAgreementResponse struct
ExecuteAgreementResponse struct {
ID string `json:"id"`
State string `json:"state"`
Description string `json:"description,omitempty"`
Payer Payer `json:"payer"`
Plan BillingPlan `json:"plan"`
StartDate time.Time `json:"start_date"`
ShippingAddress ShippingAddress `json:"shipping_address"`
AgreementDetails AgreementDetails `json:"agreement_details"`
Links []Link `json:"links"`
}
2016-10-24 06:36:23 +02:00
// ExecuteResponse struct
2015-12-17 08:50:25 +01:00
ExecuteResponse struct {
ID string `json:"id"`
2016-12-19 06:55:00 +01:00
Links []Link `json:"links"`
State string `json:"state"`
Payer PaymentPayer `json:"payer"`
Transactions []Transaction `json:"transactions,omitempty"`
2015-11-16 06:11:27 +01:00
}
2016-10-24 06:36:23 +02:00
// FundingInstrument struct
2015-12-17 08:50:25 +01:00
FundingInstrument struct {
CreditCard *CreditCard `json:"credit_card,omitempty"`
CreditCardToken *CreditCardToken `json:"credit_card_token,omitempty"`
}
2016-10-24 06:36:23 +02:00
// Item struct
2015-12-17 08:50:25 +01:00
Item struct {
Quantity uint32 `json:"quantity"`
2015-12-17 08:50:25 +01:00
Name string `json:"name"`
Price string `json:"price"`
Currency string `json:"currency"`
SKU string `json:"sku,omitempty"`
Description string `json:"description,omitempty"`
Tax string `json:"tax,omitempty"`
UnitAmount *Money `json:"unit_amount,omitempty"`
Category string `json:"category,omitempty"`
2015-12-17 08:50:25 +01:00
}
// ItemList struct
ItemList struct {
Items []Item `json:"items,omitempty"`
ShippingAddress *ShippingAddress `json:"shipping_address,omitempty"`
}
2016-12-19 06:55:00 +01:00
// Link struct
Link struct {
2015-12-17 08:50:25 +01:00
Href string `json:"href"`
2016-02-17 05:10:49 +01:00
Rel string `json:"rel,omitempty"`
Method string `json:"method,omitempty"`
Enctype string `json:"enctype,omitempty"`
2015-12-17 08:50:25 +01:00
}
// PurchaseUnitAmount struct
PurchaseUnitAmount struct {
Currency string `json:"currency_code"`
Value string `json:"value"`
Breakdown *PurchaseUnitAmountBreakdown `json:"breakdown,omitempty"`
}
2019-08-19 15:33:46 +02:00
// PurchaseUnitAmountBreakdown struct
PurchaseUnitAmountBreakdown struct {
ItemTotal *Money `json:"item_total,omitempty"`
Shipping *Money `json:"shipping,omitempty"`
Handling *Money `json:"handling,omitempty"`
TaxTotal *Money `json:"tax_total,omitempty"`
Insurance *Money `json:"insurance,omitempty"`
ShippingDiscount *Money `json:"shipping_discount,omitempty"`
Discount *Money `json:"discount,omitempty"`
}
// Money struct
//
// https://developer.paypal.com/docs/api/orders/v2/#definition-money
Money struct {
Currency string `json:"currency_code"`
Value string `json:"value"`
}
// PurchaseUnit struct
PurchaseUnit struct {
ReferenceID string `json:"reference_id"`
Amount *PurchaseUnitAmount `json:"amount,omitempty"`
}
2019-07-22 03:29:26 +02:00
// TaxInfo used for orders.
TaxInfo struct {
TaxID string `json:"tax_id,omitempty"`
TaxIDType string `json:"tax_id_type,omitempty"`
}
// PhoneWithTypeNumber struct for PhoneWithType
PhoneWithTypeNumber struct {
NationalNumber string `json:"national_number,omitempty"`
}
// PhoneWithType struct used for orders
PhoneWithType struct {
PhoneType string `json:"phone_type,omitempty"`
PhoneNumber *PhoneWithTypeNumber `json:"phone_number,omitempty"`
}
// CreateOrderPayerName create order payer name
CreateOrderPayerName struct {
GivenName string `json:"given_name,omitempty"`
Surname string `json:"surname,omitempty"`
}
// CreateOrderPayer used with create order requests
CreateOrderPayer struct {
Name *CreateOrderPayerName `json:"name,omitempty"`
EmailAddress string `json:"email_address,omitempty"`
PayerID string `json:"payer_id,omitempty"`
Phone *PhoneWithType `json:"phone,omitempty"`
BirthDate string `json:"birth_date,omitempty"`
TaxInfo *TaxInfo `json:"tax_info,omitempty"`
Address *ShippingDetailAddressPortable `json:"address,omitempty"`
}
2019-06-27 06:16:21 +02:00
// PurchaseUnitRequest struct
PurchaseUnitRequest struct {
2019-06-27 20:39:07 +02:00
ReferenceID string `json:"reference_id,omitempty"`
2019-06-27 06:16:21 +02:00
Amount *PurchaseUnitAmount `json:"amount"`
Payee *PayeeForOrders `json:"payee,omitempty"`
2019-06-27 06:16:21 +02:00
Description string `json:"description,omitempty"`
CustomID string `json:"custom_id,omitempty"`
InvoiceID string `json:"invoice_id,omitempty"`
SoftDescriptor string `json:"soft_descriptor,omitempty"`
Items []Item `json:"items,omitempty"`
2019-06-29 06:00:29 +02:00
Shipping *ShippingDetail `json:"shipping,omitempty"`
2019-06-27 06:16:21 +02:00
}
2017-07-20 11:07:11 +02:00
// MerchantPreferences struct
MerchantPreferences struct {
2017-08-24 08:08:31 +02:00
SetupFee *AmountPayout `json:"setup_fee,omitempty"`
2017-10-03 05:30:39 +02:00
ReturnURL string `json:"return_url,omitempty"`
CancelURL string `json:"cancel_url,omitempty"`
2017-08-24 08:08:31 +02:00
AutoBillAmount string `json:"auto_bill_amount,omitempty"`
InitialFailAmountAction string `json:"initial_fail_amount_action,omitempty"`
MaxFailAttempts string `json:"max_fail_attempts,omitempty"`
2017-07-20 11:07:11 +02:00
}
2016-10-24 06:36:23 +02:00
// Order struct
2015-12-17 08:50:25 +01:00
Order struct {
ID string `json:"id,omitempty"`
Status string `json:"status,omitempty"`
Intent string `json:"intent,omitempty"`
PurchaseUnits []PurchaseUnit `json:"purchase_units,omitempty"`
Links []Link `json:"links,omitempty"`
CreateTime *time.Time `json:"create_time,omitempty"`
UpdateTime *time.Time `json:"update_time,omitempty"`
2015-12-17 08:50:25 +01:00
}
2019-08-21 08:24:18 +02:00
// CaptureAmount struct
CaptureAmount struct {
ID string `json:"id,omitempty"`
Amount *PurchaseUnitAmount `json:"amount,omitempty"`
}
// CapturedPayments has the amounts for a captured order
CapturedPayments struct {
Captures []CaptureAmount `json:"captures,omitempty"`
}
// CapturedPurchaseUnit are purchase units for a captured order
CapturedPurchaseUnit struct {
Payments *CapturedPayments `json:"payments,omitempty"`
}
// PayerWithNameAndPhone struct
PayerWithNameAndPhone struct {
Name *CreateOrderPayerName `json:"name,omitempty"`
EmailAddress string `json:"email_address,omitempty"`
Phone *PhoneWithType `json:"phone,omitempty"`
PayerID string `json:"payer_id,omitempty"`
}
// CaptureOrderResponse is the response for capture order
CaptureOrderResponse struct {
ID string `json:"id,omitempty"`
Status string `json:"status,omitempty"`
Payer *PayerWithNameAndPhone `json:"payer,omitempty"`
PurchaseUnits []CapturedPurchaseUnit `json:"purchase_units,omitempty"`
}
2016-10-24 06:36:23 +02:00
// Payer struct
2015-11-25 11:30:25 +01:00
Payer struct {
PaymentMethod string `json:"payment_method"`
FundingInstruments []FundingInstrument `json:"funding_instruments,omitempty"`
PayerInfo *PayerInfo `json:"payer_info,omitempty"`
Status string `json:"payer_status,omitempty"`
}
2016-10-24 06:36:23 +02:00
// PayerInfo struct
2015-11-25 11:30:25 +01:00
PayerInfo struct {
Email string `json:"email,omitempty"`
FirstName string `json:"first_name,omitempty"`
LastName string `json:"last_name,omitempty"`
PayerID string `json:"payer_id,omitempty"`
Phone string `json:"phone,omitempty"`
ShippingAddress *ShippingAddress `json:"shipping_address,omitempty"`
TaxIDType string `json:"tax_id_type,omitempty"`
TaxID string `json:"tax_id,omitempty"`
CountryCode string `json:"country_code"`
2015-11-25 11:30:25 +01:00
}
2017-07-20 11:07:11 +02:00
// PaymentDefinition struct
PaymentDefinition struct {
2017-07-22 13:48:16 +02:00
ID string `json:"id,omitempty"`
2017-07-20 11:07:11 +02:00
Name string `json:"name,omitempty"`
Type string `json:"type,omitempty"`
Frequency string `json:"frequency,omitempty"`
FrequencyInterval string `json:"frequency_interval,omitempty"`
Amount AmountPayout `json:"amount,omitempty"`
Cycles string `json:"cycles,omitempty"`
ChargeModels []ChargeModel `json:"charge_models,omitempty"`
}
2018-08-28 11:43:53 +02:00
// PaymentOptions struct
2018-02-07 21:01:07 +01:00
PaymentOptions struct {
AllowedPaymentMethod string `json:"allowed_payment_method,omitempty"`
}
2019-03-27 09:27:53 +01:00
// PaymentPatch PATCH /v2/payments/payment/{payment_id)
PaymentPatch struct {
Operation string `json:"op"`
Path string `json:"path"`
Value interface{} `json:"value"`
}
// PaymentPayer struct
PaymentPayer struct {
PaymentMethod string `json:"payment_method"`
Status string `json:"status,omitempty"`
PayerInfo *PayerInfo `json:"payer_info,omitempty"`
}
2015-12-17 08:50:25 +01:00
// PaymentResponse structure
PaymentResponse struct {
2018-12-16 13:26:41 +01:00
ID string `json:"id"`
State string `json:"state"`
Intent string `json:"intent"`
Payer Payer `json:"payer"`
Transactions []Transaction `json:"transactions"`
Links []Link `json:"links"`
2015-12-17 08:50:25 +01:00
}
2019-06-24 13:01:15 +02:00
// PaymentSource structure
PaymentSource struct {
Card *PaymentSourceCard `json:"card"`
Token *PaymentSourceToken `json:"token"`
}
// PaymentSourceCard structure
PaymentSourceCard struct {
ID string `json:"id"`
Name string `json:"name"`
Number string `json:"number"`
Expiry string `json:"expiry"`
SecurityCode string `json:"security_code"`
LastDigits string `json:"last_digits"`
CardType string `json:"card_type"`
BillingAddress *CardBillingAddress `json:"billing_address"`
}
// CardBillingAddress structure
CardBillingAddress struct {
AddressLine1 string `json:"address_line_1"`
AddressLine2 string `json:"address_line_2"`
AdminArea2 string `json:"admin_area_2"`
AdminArea1 string `json:"admin_area_1"`
PostalCode string `json:"postal_code"`
CountryCode string `json:"country_code"`
}
// PaymentSourceToken structure
PaymentSourceToken struct {
ID string `json:"id"`
Type string `json:"type"`
}
2016-10-24 06:36:23 +02:00
// Payout struct
2016-02-17 05:10:49 +01:00
Payout struct {
SenderBatchHeader *SenderBatchHeader `json:"sender_batch_header"`
Items []PayoutItem `json:"items"`
}
2016-10-24 06:36:23 +02:00
// PayoutItem struct
2016-02-17 05:10:49 +01:00
PayoutItem struct {
RecipientType string `json:"recipient_type"`
Receiver string `json:"receiver"`
Amount *AmountPayout `json:"amount"`
Note string `json:"note,omitempty"`
SenderItemID string `json:"sender_item_id,omitempty"`
}
2016-10-24 06:36:23 +02:00
// PayoutItemResponse struct
2016-02-17 05:10:49 +01:00
PayoutItemResponse struct {
PayoutItemID string `json:"payout_item_id"`
TransactionID string `json:"transaction_id"`
TransactionStatus string `json:"transaction_status"`
PayoutBatchID string `json:"payout_batch_id,omitempty"`
PayoutItemFee *AmountPayout `json:"payout_item_fee,omitempty"`
PayoutItem *PayoutItem `json:"payout_item"`
TimeProcessed *time.Time `json:"time_processed,omitempty"`
Links []Link `json:"links"`
Error ErrorResponse `json:"errors,omitempty"`
2016-02-17 05:10:49 +01:00
}
2016-10-24 06:36:23 +02:00
// PayoutResponse struct
2016-02-17 05:10:49 +01:00
PayoutResponse struct {
BatchHeader *BatchHeader `json:"batch_header"`
Items []PayoutItemResponse `json:"items"`
2016-12-19 06:55:00 +01:00
Links []Link `json:"links"`
2016-02-17 05:10:49 +01:00
}
2016-10-24 06:36:23 +02:00
// RedirectURLs struct
2015-12-17 08:50:25 +01:00
RedirectURLs struct {
ReturnURL string `json:"return_url,omitempty"`
CancelURL string `json:"cancel_url,omitempty"`
}
2016-10-24 06:36:23 +02:00
// Refund struct
2015-12-17 08:50:25 +01:00
Refund struct {
ID string `json:"id,omitempty"`
Amount *Amount `json:"amount,omitempty"`
CreateTime *time.Time `json:"create_time,omitempty"`
State string `json:"state,omitempty"`
CaptureID string `json:"capture_id,omitempty"`
ParentPayment string `json:"parent_payment,omitempty"`
UpdateTime *time.Time `json:"update_time,omitempty"`
2015-11-16 06:11:27 +01:00
}
2015-12-17 04:56:49 +01:00
2019-08-21 08:24:18 +02:00
RefundResponse struct {
ID string `json:"id,omitempty"`
Amount *PurchaseUnitAmount `json:"amount,omitempty"`
Status string `json:"status,omitempty"`
}
2016-10-24 06:36:23 +02:00
// Related struct
Related struct {
Sale *Sale `json:"sale,omitempty"`
Authorization *Authorization `json:"authorization,omitempty"`
Order *Order `json:"order,omitempty"`
Capture *Capture `json:"capture,omitempty"`
Refund *Refund `json:"refund,omitempty"`
}
2016-10-24 06:36:23 +02:00
// Sale struct
2015-12-17 04:56:49 +01:00
Sale struct {
ID string `json:"id,omitempty"`
Amount *Amount `json:"amount,omitempty"`
TransactionFee *Currency `json:"transaction_fee,omitempty"`
2015-12-17 04:56:49 +01:00
Description string `json:"description,omitempty"`
CreateTime *time.Time `json:"create_time,omitempty"`
State string `json:"state,omitempty"`
ParentPayment string `json:"parent_payment,omitempty"`
UpdateTime *time.Time `json:"update_time,omitempty"`
PaymentMode string `json:"payment_mode,omitempty"`
PendingReason string `json:"pending_reason,omitempty"`
ReasonCode string `json:"reason_code,omitempty"`
ClearingTime string `json:"clearing_time,omitempty"`
ProtectionEligibility string `json:"protection_eligibility,omitempty"`
ProtectionEligibilityType string `json:"protection_eligibility_type,omitempty"`
2016-12-19 06:55:00 +01:00
Links []Link `json:"links,omitempty"`
2015-12-17 04:56:49 +01:00
}
2016-10-24 06:36:23 +02:00
// SenderBatchHeader struct
2016-02-17 05:10:49 +01:00
SenderBatchHeader struct {
EmailSubject string `json:"email_subject"`
SenderBatchID string `json:"sender_batch_id,omitempty"`
2016-02-17 05:10:49 +01:00
}
2016-10-24 06:36:23 +02:00
// ShippingAddress struct
2015-12-17 08:50:25 +01:00
ShippingAddress struct {
RecipientName string `json:"recipient_name,omitempty"`
Type string `json:"type,omitempty"`
Line1 string `json:"line1"`
Line2 string `json:"line2,omitempty"`
City string `json:"city"`
CountryCode string `json:"country_code"`
PostalCode string `json:"postal_code,omitempty"`
State string `json:"state,omitempty"`
Phone string `json:"phone,omitempty"`
}
// ShippingDetailAddressPortable used with create orders
ShippingDetailAddressPortable struct {
AddressLine1 string `json:"address_line_1,omitempty"`
AddressLine2 string `json:"address_line_2,omitempty"`
AdminArea1 string `json:"admin_area_1,omitempty"`
AdminArea2 string `json:"admin_area_2,omitempty"`
PostalCode string `json:"postal_code,omitempty"`
CountryCode string `json:"country_code,omitempty"`
}
2019-06-27 06:16:21 +02:00
// Name struct
Name struct {
FullName string `json:"full_name,omitempty"`
}
// ShippingDetail struct
ShippingDetail struct {
Name *Name `json:"name,omitempty"`
Address *ShippingDetailAddressPortable `json:"address,omitempty"`
2019-06-27 06:16:21 +02:00
}
expirationTime int64
2015-12-17 08:50:25 +01:00
// TokenResponse is for API response for the /oauth2/token endpoint
TokenResponse struct {
RefreshToken string `json:"refresh_token"`
Token string `json:"access_token"`
Type string `json:"token_type"`
ExpiresIn expirationTime `json:"expires_in"`
2015-12-17 08:50:25 +01:00
}
2016-10-24 06:36:23 +02:00
// Transaction struct
2015-12-17 08:50:25 +01:00
Transaction struct {
2018-02-07 21:01:07 +01:00
Amount *Amount `json:"amount"`
Description string `json:"description,omitempty"`
ItemList *ItemList `json:"item_list,omitempty"`
InvoiceNumber string `json:"invoice_number,omitempty"`
Custom string `json:"custom,omitempty"`
SoftDescriptor string `json:"soft_descriptor,omitempty"`
RelatedResources []Related `json:"related_resources,omitempty"`
PaymentOptions *PaymentOptions `json:"payment_options,omitempty"`
NotifyURL string `json:"notify_url,omitempty"`
OrderURL string `json:"order_url,omitempty"`
2018-04-19 23:56:10 +02:00
Payee *Payee `json:"payee,omitempty"`
}
//Payee struct
Payee struct {
Email string `json:"email"`
2015-12-17 04:56:49 +01:00
}
2019-06-27 20:39:07 +02:00
// PayeeForOrders struct
PayeeForOrders struct {
EmailAddress string `json:"email_address,omitempty"`
MerchantID string `json:"merchant_id,omitempty"`
2019-06-27 19:55:21 +02:00
}
2016-10-24 06:36:23 +02:00
// UserInfo struct
UserInfo struct {
ID string `json:"user_id"`
Name string `json:"name"`
GivenName string `json:"given_name"`
FamilyName string `json:"family_name"`
Email string `json:"email"`
Verified bool `json:"verified,omitempty,string"`
Gender string `json:"gender,omitempty"`
BirthDate string `json:"birthdate,omitempty"`
ZoneInfo string `json:"zoneinfo,omitempty"`
Locale string `json:"locale,omitempty"`
Phone string `json:"phone_number,omitempty"`
Address *Address `json:"address,omitempty"`
VerifiedAccount bool `json:"verified_account,omitempty,string"`
AccountType string `json:"account_type,omitempty"`
AgeRange string `json:"age_range,omitempty"`
PayerID string `json:"payer_id,omitempty"`
}
2016-10-25 21:44:10 +02:00
// WebProfile represents the configuration of the payment web payment experience
//
// https://developer.paypal.com/docs/api/payment-experience/
WebProfile struct {
ID string `json:"id,omitempty"`
Name string `json:"name"`
Presentation Presentation `json:"presentation,omitempty"`
InputFields InputFields `json:"input_fields,omitempty"`
FlowConfig FlowConfig `json:"flow_config,omitempty"`
}
// Presentation represents the branding and locale that a customer sees on
// redirect payments
//
// https://developer.paypal.com/docs/api/payment-experience/#definition-presentation
Presentation struct {
BrandName string `json:"brand_name,omitempty"`
LogoImage string `json:"logo_image,omitempty"`
LocaleCode string `json:"locale_code,omitempty"`
}
// InputFields represents the fields that are displayed to a customer on
// redirect payments
//
// https://developer.paypal.com/docs/api/payment-experience/#definition-input_fields
InputFields struct {
AllowNote bool `json:"allow_note,omitempty"`
NoShipping uint `json:"no_shipping,omitempty"`
AddressOverride uint `json:"address_override,omitempty"`
}
// FlowConfig represents the general behaviour of redirect payment pages
//
// https://developer.paypal.com/docs/api/payment-experience/#definition-flow_config
FlowConfig struct {
LandingPageType string `json:"landing_page_type,omitempty"`
BankTXNPendingURL string `json:"bank_txn_pending_url,omitempty"`
UserAction string `json:"user_action,omitempty"`
}
2015-10-14 07:30:28 +02:00
)
2015-10-15 07:43:50 +02:00
// Error method implementation for ErrorResponse struct
func (r *ErrorResponse) Error() string {
2016-10-24 06:36:23 +02:00
return fmt.Sprintf("%v %v: %d %s", r.Response.Request.Method, r.Response.Request.URL, r.Response.StatusCode, r.Message)
2015-10-15 07:43:50 +02:00
}
2017-07-23 07:47:17 +02:00
2017-10-03 05:30:39 +02:00
// MarshalJSON for JSONTime
func (t JSONTime) MarshalJSON() ([]byte, error) {
2017-07-23 07:47:17 +02:00
stamp := fmt.Sprintf(`"%s"`, time.Time(t).UTC().Format(time.RFC3339))
return []byte(stamp), nil
}
func (e *expirationTime) UnmarshalJSON(b []byte) error {
var n json.Number
err := json.Unmarshal(b, &n)
if err != nil {
return err
}
i, err := n.Int64()
if err != nil {
return err
}
*e = expirationTime(i)
return nil
}