2019-08-21 15:50:20 +02:00
|
|
|
package paypal
|
2015-10-14 07:30:28 +02:00
|
|
|
|
|
|
|
import (
|
2017-10-21 15:13:24 +02:00
|
|
|
"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"
|
2020-05-02 16:43:30 +02:00
|
|
|
"strings"
|
2019-02-27 08:26:37 +01:00
|
|
|
"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"
|
|
|
|
)
|
|
|
|
|
2020-04-19 08:37:18 +02:00
|
|
|
// Possible value for `status` in GetOrder
|
|
|
|
//
|
|
|
|
// https://developer.paypal.com/docs/api/orders/v2/#orders-get-response
|
|
|
|
const (
|
|
|
|
OrderStatusCreated string = "CREATED"
|
|
|
|
OrderStatusSaved string = "SAVED"
|
|
|
|
OrderStatusApproved string = "APPROVED"
|
|
|
|
OrderStatusVoided string = "VOIDED"
|
|
|
|
OrderStatusCompleted string = "COMPLETED"
|
|
|
|
)
|
|
|
|
|
2019-08-05 15:40:51 +02:00
|
|
|
// 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
|
|
|
|
|
2019-09-25 22:44:33 +02:00
|
|
|
const (
|
|
|
|
EventPaymentCaptureCompleted string = "PAYMENT.CAPTURE.COMPLETED"
|
|
|
|
EventPaymentCaptureDenied string = "PAYMENT.CAPTURE.DENIED"
|
|
|
|
EventPaymentCaptureRefunded string = "PAYMENT.CAPTURE.REFUNDED"
|
|
|
|
EventMerchantOnboardingCompleted string = "MERCHANT.ONBOARDING.COMPLETED"
|
|
|
|
EventMerchantPartnerConsentRevoked string = "MERCHANT.PARTNER-CONSENT.REVOKED"
|
|
|
|
)
|
|
|
|
|
2019-10-10 23:36:26 +02:00
|
|
|
const (
|
|
|
|
OperationAPIIntegration string = "API_INTEGRATION"
|
|
|
|
ProductExpressCheckout string = "EXPRESS_CHECKOUT"
|
|
|
|
IntegrationMethodPayPal string = "PAYPAL"
|
|
|
|
IntegrationTypeThirdParty string = "THIRD_PARTY"
|
|
|
|
ConsentShareData string = "SHARE_DATA_CONSENT"
|
|
|
|
)
|
|
|
|
|
|
|
|
const (
|
|
|
|
FeaturePayment string = "PAYMENT"
|
|
|
|
FeatureRefund string = "REFUND"
|
|
|
|
FeatureFuturePayment string = "FUTURE_PAYMENT"
|
|
|
|
FeatureDirectPayment string = "DIRECT_PAYMENT"
|
|
|
|
FeaturePartnerFee string = "PARTNER_FEE"
|
|
|
|
FeatureDelayFunds string = "DELAY_FUNDS_DISBURSEMENT"
|
|
|
|
FeatureReadSellerDispute string = "READ_SELLER_DISPUTE"
|
|
|
|
FeatureUpdateSellerDispute string = "UPDATE_SELLER_DISPUTE"
|
|
|
|
FeatureDisputeReadBuyer string = "DISPUTE_READ_BUYER"
|
|
|
|
FeatureUpdateCustomerDispute string = "UPDATE_CUSTOMER_DISPUTES"
|
|
|
|
)
|
|
|
|
|
|
|
|
const (
|
|
|
|
LinkRelSelf string = "self"
|
|
|
|
LinkRelActionURL string = "action_url"
|
|
|
|
)
|
|
|
|
|
2020-05-02 16:42:37 +02:00
|
|
|
const (
|
|
|
|
AncorTypeApplication string = "APPLICATION"
|
|
|
|
AncorTypeAccount string = "ACCOUNT"
|
|
|
|
)
|
|
|
|
|
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 {
|
2017-09-26 17:26:02 +02:00
|
|
|
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
|
2020-05-31 07:14:19 +02:00
|
|
|
//Doc: https://developer.paypal.com/docs/api/subscriptions/v1/#definition-application_context
|
2018-08-28 11:43:53 +02:00
|
|
|
ApplicationContext struct {
|
2020-05-31 07:14:19 +02:00
|
|
|
BrandName string `json:"brand_name,omitempty"`
|
|
|
|
Locale string `json:"locale,omitempty"`
|
|
|
|
ShippingPreference ShippingPreference `json:"shipping_preference,omitempty"`
|
|
|
|
UserAction UserAction `json:"user_action,omitempty"`
|
|
|
|
//LandingPage string `json:"landing_page,omitempty"` // not found in documentation
|
|
|
|
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
|
2015-12-01 05:35:25 +01:00
|
|
|
Authorization struct {
|
2019-09-24 21:34:56 +02:00
|
|
|
ID string `json:"id,omitempty"`
|
|
|
|
CustomID string `json:"custom_id,omitempty"`
|
|
|
|
InvoiceID string `json:"invoice_id,omitempty"`
|
|
|
|
Status string `json:"status,omitempty"`
|
|
|
|
StatusDetails *CaptureStatusDetails `json:"status_details,omitempty"`
|
|
|
|
Amount *PurchaseUnitAmount `json:"amount,omitempty"`
|
|
|
|
SellerProtection *SellerProtection `json:"seller_protection,omitempty"`
|
|
|
|
CreateTime *time.Time `json:"create_time,omitempty"`
|
|
|
|
UpdateTime *time.Time `json:"update_time,omitempty"`
|
|
|
|
ExpirationTime *time.Time `json:"expiration_time,omitempty"`
|
|
|
|
Links []Link `json:"links,omitempty"`
|
2015-12-01 05:35:25 +01:00
|
|
|
}
|
|
|
|
|
2019-08-21 13:16:54 +02:00
|
|
|
// AuthorizeOrderResponse .
|
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
|
|
|
}
|
|
|
|
|
2019-09-06 17:00:21 +02:00
|
|
|
// https://developer.paypal.com/docs/api/payments/v2/#definition-platform_fee
|
|
|
|
PlatformFee struct {
|
|
|
|
Amount *Money `json:"amount,omitempty"`
|
|
|
|
Payee *PayeeForOrders `json:"payee,omitempty"`
|
|
|
|
}
|
|
|
|
|
|
|
|
// https://developer.paypal.com/docs/api/payments/v2/#definition-payment_instruction
|
|
|
|
PaymentInstruction struct {
|
|
|
|
PlatformFees []PlatformFee `json:"platform_fees,omitempty"`
|
|
|
|
DisbursementMode string `json:"disbursement_mode,omitempty"`
|
|
|
|
}
|
|
|
|
|
|
|
|
// https://developer.paypal.com/docs/api/payments/v2/#authorizations_capture
|
|
|
|
PaymentCaptureRequest struct {
|
|
|
|
InvoiceID string `json:"invoice_id,omitempty"`
|
|
|
|
NoteToPayer string `json:"note_to_payer,omitempty"`
|
|
|
|
SoftDescriptor string `json:"soft_descriptor,omitempty"`
|
|
|
|
Amount *Money `json:"amount,omitempty"`
|
|
|
|
FinalCapture bool `json:"final_capture,omitempty"`
|
|
|
|
}
|
|
|
|
|
2019-09-24 21:34:56 +02:00
|
|
|
SellerProtection struct {
|
|
|
|
Status string `json:"status,omitempty"`
|
|
|
|
DisputeCategories []string `json:"dispute_categories,omitempty"`
|
|
|
|
}
|
|
|
|
|
2019-09-06 17:00:21 +02:00
|
|
|
// https://developer.paypal.com/docs/api/payments/v2/#definition-capture_status_details
|
|
|
|
CaptureStatusDetails struct {
|
|
|
|
Reason string `json:"reason,omitempty"`
|
|
|
|
}
|
|
|
|
|
|
|
|
PaymentCaptureResponse struct {
|
|
|
|
Status string `json:"status,omitempty"`
|
|
|
|
StatusDetails *CaptureStatusDetails `json:"status_details,omitempty"`
|
|
|
|
ID string `json:"id,omitempty"`
|
|
|
|
Amount *Money `json:"amount,omitempty"`
|
|
|
|
InvoiceID string `json:"invoice_id,omitempty"`
|
|
|
|
FinalCapture bool `json:"final_capture,omitempty"`
|
|
|
|
DisbursementMode string `json:"disbursement_mode,omitempty"`
|
2019-11-18 23:44:42 +01:00
|
|
|
Links []Link `json:"links,omitempty"`
|
2019-09-06 17:00:21 +02:00
|
|
|
}
|
|
|
|
|
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"`
|
|
|
|
}
|
|
|
|
|
2020-04-08 18:51:17 +02:00
|
|
|
// RefundOrderRequest - https://developer.paypal.com/docs/api/payments/v2/#captures_refund
|
|
|
|
RefundCaptureRequest struct {
|
|
|
|
Amount *Money `json:"amount,omitempty"`
|
|
|
|
InvoiceID string `json:"invoice_id,omitempty"`
|
|
|
|
NoteToPayer string `json:"note_to_payer,omitempty"`
|
|
|
|
}
|
|
|
|
|
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 {
|
2019-08-12 16:09:45 +02:00
|
|
|
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
|
|
|
}
|
|
|
|
|
2020-03-27 12:05:56 +01:00
|
|
|
// BillingInfo struct
|
|
|
|
BillingInfo struct {
|
|
|
|
OutstandingBalance AmountPayout `json:"outstanding_balance,omitempty"`
|
|
|
|
CycleExecutions []CycleExecutions `json:"cycle_executions,omitempty"`
|
|
|
|
LastPayment LastPayment `json:"last_payment,omitempty"`
|
|
|
|
NextBillingTime time.Time `json:"next_billing_time,omitempty"`
|
|
|
|
FailedPaymentsCount int `json:"failed_payments_count,omitempty"`
|
|
|
|
}
|
|
|
|
|
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
|
2015-12-01 05:35:25 +01:00
|
|
|
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"`
|
2015-12-01 05:35:25 +01:00
|
|
|
}
|
|
|
|
|
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 {
|
2019-02-27 08:26:37 +01:00
|
|
|
sync.Mutex
|
2020-01-06 15:27:03 +01: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
|
|
|
|
tokenExpiresAt time.Time
|
|
|
|
returnRepresentation bool
|
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 {
|
2017-05-25 23:16:33 +02:00
|
|
|
ID string `json:"id,omitempty"`
|
|
|
|
PayerID string `json:"payer_id,omitempty"`
|
2017-05-25 23:27:19 +02:00
|
|
|
ExternalCustomerID string `json:"external_customer_id,omitempty"`
|
2017-05-25 23:16:33 +02:00
|
|
|
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 {
|
2020-05-31 07:14:19 +02:00
|
|
|
Items []CreditCard `json:"items"`
|
|
|
|
SharedListResponse
|
2016-12-19 06:55:00 +01:00
|
|
|
}
|
|
|
|
|
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
|
|
|
|
2020-03-27 12:05:56 +01:00
|
|
|
// CycleExecutions struct
|
|
|
|
CycleExecutions struct {
|
|
|
|
TenureType string `json:"tenure_type,omitempty"`
|
|
|
|
Sequence int `json:"sequence,omitempty"`
|
|
|
|
CyclesCompleted int `json:"cycles_completed,omitempty"`
|
|
|
|
CyclesRemaining int `json:"cycles_remaining,omitempty"`
|
|
|
|
TotalCycles int `json:"total_cycles,omitempty"`
|
|
|
|
}
|
|
|
|
|
|
|
|
// LastPayment struct
|
|
|
|
LastPayment struct {
|
|
|
|
Amount Money `json:"amount,omitempty"`
|
|
|
|
Time time.Time `json:"time,omitempty"`
|
|
|
|
}
|
|
|
|
|
2017-09-26 17:26:02 +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
|
2017-10-26 02:43:41 +02:00
|
|
|
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 {
|
2017-10-26 02:43:41 +02:00
|
|
|
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 {
|
2016-08-18 18:53:22 +02:00
|
|
|
ID string `json:"id"`
|
2016-12-19 06:55:00 +01:00
|
|
|
Links []Link `json:"links"`
|
2016-08-18 18:53:22 +02:00
|
|
|
State string `json:"state"`
|
2018-01-14 07:37:24 +01:00
|
|
|
Payer PaymentPayer `json:"payer"`
|
2016-08-18 18:53:22 +02:00
|
|
|
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 {
|
|
|
|
Name string `json:"name"`
|
2019-08-02 11:32:04 +02:00
|
|
|
UnitAmount *Money `json:"unit_amount,omitempty"`
|
2019-11-21 07:12:36 +01:00
|
|
|
Tax *Money `json:"tax,omitempty"`
|
|
|
|
Quantity string `json:"quantity"`
|
|
|
|
Description string `json:"description,omitempty"`
|
|
|
|
SKU string `json:"sku,omitempty"`
|
2019-08-05 15:40:51 +02:00
|
|
|
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 {
|
2019-10-10 23:36:26 +02:00
|
|
|
Href string `json:"href"`
|
|
|
|
Rel string `json:"rel,omitempty"`
|
|
|
|
Method string `json:"method,omitempty"`
|
|
|
|
Description string `json:"description,omitempty"`
|
|
|
|
Enctype string `json:"enctype,omitempty"`
|
2015-12-17 08:50:25 +01:00
|
|
|
}
|
|
|
|
|
2019-04-21 06:43:53 +02:00
|
|
|
// PurchaseUnitAmount struct
|
|
|
|
PurchaseUnitAmount struct {
|
2019-08-02 11:32:04 +02:00
|
|
|
Currency string `json:"currency_code"`
|
|
|
|
Value string `json:"value"`
|
|
|
|
Breakdown *PurchaseUnitAmountBreakdown `json:"breakdown,omitempty"`
|
|
|
|
}
|
|
|
|
|
2019-08-19 15:33:46 +02:00
|
|
|
// PurchaseUnitAmountBreakdown struct
|
2019-08-02 11:32:04 +02:00
|
|
|
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 {
|
2019-04-21 06:43:53 +02:00
|
|
|
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"`
|
2019-07-21 21:46:13 +02:00
|
|
|
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 {
|
2019-04-21 06:43:53 +02:00
|
|
|
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 {
|
2019-09-03 22:39:22 +02:00
|
|
|
ID string `json:"id,omitempty"`
|
|
|
|
CustomID string `json:"custom_id,omitempty"`
|
|
|
|
Amount *PurchaseUnitAmount `json:"amount,omitempty"`
|
2019-08-21 08:24:18 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
// CapturedPayments has the amounts for a captured order
|
|
|
|
CapturedPayments struct {
|
|
|
|
Captures []CaptureAmount `json:"captures,omitempty"`
|
|
|
|
}
|
|
|
|
|
2020-01-06 15:27:03 +01:00
|
|
|
// CapturedPurchaseItem are items for a captured order
|
|
|
|
CapturedPurchaseItem struct {
|
|
|
|
Quantity string `json:"quantity"`
|
|
|
|
Name string `json:"name"`
|
|
|
|
SKU string `json:"sku,omitempty"`
|
|
|
|
Description string `json:"description,omitempty"`
|
|
|
|
}
|
|
|
|
|
2019-08-21 08:24:18 +02:00
|
|
|
// CapturedPurchaseUnit are purchase units for a captured order
|
|
|
|
CapturedPurchaseUnit struct {
|
2020-03-27 12:05:43 +01:00
|
|
|
Items []CapturedPurchaseItem `json:"items,omitempty"`
|
|
|
|
ReferenceID string `json:"reference_id"`
|
|
|
|
Shipping CapturedPurchaseUnitShipping `json:"shipping,omitempty"`
|
|
|
|
Payments *CapturedPayments `json:"payments,omitempty"`
|
|
|
|
}
|
|
|
|
|
|
|
|
CapturedPurchaseUnitShipping struct {
|
|
|
|
Address ShippingDetailAddressPortable `json:"address,omitempty"`
|
2019-08-21 08:24:18 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
// 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"`
|
2018-01-14 07:37:24 +01:00
|
|
|
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)
|
2018-01-14 07:37:24 +01:00
|
|
|
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 {
|
2017-11-08 02:56:24 +01:00
|
|
|
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 {
|
2020-05-04 22:17:53 +02:00
|
|
|
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 13:16:54 +02:00
|
|
|
// RefundResponse .
|
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
|
2016-08-18 18:53:22 +02:00
|
|
|
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"`
|
2018-01-22 16:32:18 +01:00
|
|
|
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 {
|
2017-10-02 08:12:42 +02:00
|
|
|
EmailSubject string `json:"email_subject"`
|
2020-05-02 17:00:45 +02:00
|
|
|
EmailMessage string `json:"email_message"`
|
2017-10-02 08:12:42 +02:00
|
|
|
SenderBatchID string `json:"sender_batch_id,omitempty"`
|
2016-02-17 05:10:49 +01:00
|
|
|
}
|
|
|
|
|
2020-03-27 12:05:56 +01:00
|
|
|
//ShippingAmount struct
|
|
|
|
ShippingAmount struct {
|
2020-05-31 07:14:19 +02:00
|
|
|
Money
|
2020-03-27 12:05:56 +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"`
|
|
|
|
}
|
|
|
|
|
2019-07-21 21:46:13 +02:00
|
|
|
// 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
|
2020-05-31 07:14:19 +02:00
|
|
|
//Doc: https://developer.paypal.com/docs/api/subscriptions/v1/#definition-name
|
2019-06-27 06:16:21 +02:00
|
|
|
Name struct {
|
2020-05-31 07:14:19 +02:00
|
|
|
FullName string `json:"full_name,omitempty"`
|
|
|
|
Suffix string `json:"suffix,omitempty"`
|
|
|
|
Prefix string `json:"prefix,omitempty"`
|
|
|
|
GivenName string `json:"given_name,omitempty"`
|
|
|
|
Surname string `json:"surname,omitempty"`
|
|
|
|
MiddleName string `json:"middle_name,omitempty"`
|
2019-06-27 06:16:21 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
// ShippingDetail struct
|
|
|
|
ShippingDetail struct {
|
2019-07-21 21:46:13 +02:00
|
|
|
Name *Name `json:"name,omitempty"`
|
|
|
|
Address *ShippingDetailAddressPortable `json:"address,omitempty"`
|
2019-06-27 06:16:21 +02:00
|
|
|
}
|
|
|
|
|
2020-03-27 12:05:56 +01:00
|
|
|
// Subscriber struct
|
|
|
|
Subscriber struct {
|
|
|
|
ShippingAddress ShippingDetail `json:"shipping_address,omitempty"`
|
|
|
|
Name CreateOrderPayerName `json:"name,omitempty"`
|
|
|
|
EmailAddress string `json:"email_address,omitempty"`
|
|
|
|
}
|
|
|
|
|
2017-10-21 15:13:24 +02:00
|
|
|
expirationTime int64
|
|
|
|
|
2015-12-17 08:50:25 +01:00
|
|
|
// TokenResponse is for API response for the /oauth2/token endpoint
|
|
|
|
TokenResponse struct {
|
2017-10-21 15:13:24 +02:00
|
|
|
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"`
|
2018-03-20 17:56:13 +01:00
|
|
|
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
|
|
|
}
|
2016-01-20 05:17:19 +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
|
2016-01-20 05:17:19 +01:00
|
|
|
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"`
|
2017-10-21 15:14:27 +02:00
|
|
|
Verified bool `json:"verified,omitempty,string"`
|
2016-01-20 05:17:19 +01:00
|
|
|
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"`
|
2017-10-21 15:14:27 +02:00
|
|
|
VerifiedAccount bool `json:"verified_account,omitempty,string"`
|
2016-01-20 05:17:19 +01:00
|
|
|
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"`
|
|
|
|
}
|
2019-09-19 17:03:42 +02:00
|
|
|
|
2020-05-02 16:42:37 +02:00
|
|
|
// VerifyWebhookResponse struct
|
2019-09-19 17:03:42 +02:00
|
|
|
VerifyWebhookResponse struct {
|
|
|
|
VerificationStatus string `json:"verification_status,omitempty"`
|
|
|
|
}
|
2020-01-06 15:27:03 +01:00
|
|
|
|
2020-05-02 16:42:37 +02:00
|
|
|
// Webhook strunct
|
|
|
|
Webhook struct {
|
|
|
|
ID string `json:"id"`
|
|
|
|
URL string `json:"url"`
|
|
|
|
EventTypes []WebhookEventType `json:"event_types"`
|
|
|
|
Links []Link `json:"links"`
|
|
|
|
}
|
|
|
|
|
2020-05-04 22:17:53 +02:00
|
|
|
// WebhookEvent struct
|
2019-09-25 22:44:33 +02:00
|
|
|
WebhookEvent struct {
|
2020-01-06 15:27:03 +01:00
|
|
|
ID string `json:"id"`
|
|
|
|
CreateTime time.Time `json:"create_time"`
|
|
|
|
ResourceType string `json:"resource_type"`
|
|
|
|
EventType string `json:"event_type"`
|
|
|
|
Summary string `json:"summary,omitempty"`
|
|
|
|
Resource Resource `json:"resource"`
|
|
|
|
Links []Link `json:"links"`
|
|
|
|
EventVersion string `json:"event_version,omitempty"`
|
|
|
|
ResourceVersion string `json:"resource_version,omitempty"`
|
|
|
|
}
|
|
|
|
|
2020-05-02 16:42:37 +02:00
|
|
|
// WebhookEventType struct
|
|
|
|
WebhookEventType struct {
|
|
|
|
Name string `json:"name"`
|
|
|
|
Description string `json:"description"`
|
|
|
|
}
|
|
|
|
|
|
|
|
// CreateWebhookRequest struct
|
|
|
|
CreateWebhookRequest struct {
|
|
|
|
URL string `json:"url"`
|
|
|
|
EventTypes []WebhookEventType `json:"event_types"`
|
|
|
|
}
|
|
|
|
|
|
|
|
ListWebhookResponse struct {
|
|
|
|
Webhooks []Webhook `json:"webhooks"`
|
|
|
|
}
|
|
|
|
|
|
|
|
WebhookField struct {
|
|
|
|
Operation string `json:"op"`
|
|
|
|
Path string `json:"path"`
|
|
|
|
Value interface{} `json:"value"`
|
|
|
|
}
|
|
|
|
|
2019-09-25 22:44:33 +02:00
|
|
|
Resource struct {
|
|
|
|
// Payment Resource type
|
|
|
|
ID string `json:"id,omitempty"`
|
|
|
|
Status string `json:"status,omitempty"`
|
|
|
|
StatusDetails *CaptureStatusDetails `json:"status_details,omitempty"`
|
|
|
|
Amount *PurchaseUnitAmount `json:"amount,omitempty"`
|
|
|
|
UpdateTime string `json:"update_time,omitempty"`
|
|
|
|
CreateTime string `json:"create_time,omitempty"`
|
|
|
|
ExpirationTime string `json:"expiration_time,omitempty"`
|
|
|
|
SellerProtection *SellerProtection `json:"seller_protection,omitempty"`
|
|
|
|
FinalCapture bool `json:"final_capture,omitempty"`
|
|
|
|
SellerPayableBreakdown *CaptureSellerBreakdown `json:"seller_payable_breakdown,omitempty"`
|
|
|
|
NoteToPayer string `json:"note_to_payer,omitempty"`
|
|
|
|
// merchant-onboarding Resource type
|
|
|
|
PartnerClientID string `json:"partner_client_id,omitempty"`
|
|
|
|
MerchantID string `json:"merchant_id,omitempty"`
|
|
|
|
// Common
|
|
|
|
Links []Link `json:"links,omitempty"`
|
|
|
|
}
|
2020-01-06 15:27:03 +01:00
|
|
|
|
2019-09-25 22:44:33 +02:00
|
|
|
CaptureSellerBreakdown struct {
|
|
|
|
GrossAmount PurchaseUnitAmount `json:"gross_amount"`
|
|
|
|
PayPalFee PurchaseUnitAmount `json:"paypal_fee"`
|
|
|
|
NetAmount PurchaseUnitAmount `json:"net_amount"`
|
|
|
|
TotalRefundedAmount *PurchaseUnitAmount `json:"total_refunded_amount,omitempty"`
|
|
|
|
}
|
2019-10-10 23:36:26 +02:00
|
|
|
|
|
|
|
ReferralRequest struct {
|
2019-10-11 20:54:25 +02:00
|
|
|
TrackingID string `json:"tracking_id"`
|
2020-04-24 12:05:22 +02:00
|
|
|
PartnerConfigOverride *PartnerConfigOverride `json:"partner_config_override,omitempty"`
|
2019-10-11 20:54:25 +02:00
|
|
|
Operations []Operation `json:"operations,omitempty"`
|
|
|
|
Products []string `json:"products,omitempty"`
|
|
|
|
LegalConsents []Consent `json:"legal_consents,omitempty"`
|
|
|
|
}
|
2020-01-06 15:27:03 +01:00
|
|
|
|
2019-10-11 20:54:25 +02:00
|
|
|
PartnerConfigOverride struct {
|
|
|
|
PartnerLogoURL string `json:"partner_logo_url,omitempty"`
|
|
|
|
ReturnURL string `json:"return_url,omitempty"`
|
|
|
|
ReturnURLDescription string `json:"return_url_description,omitempty"`
|
|
|
|
ActionRenewalURL string `json:"action_renewal_url,omitempty"`
|
|
|
|
ShowAddCreditCard *bool `json:"show_add_credit_card,omitempty"`
|
2019-10-10 23:36:26 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
Operation struct {
|
|
|
|
Operation string `json:"operation"`
|
|
|
|
APIIntegrationPreference *IntegrationDetails `json:"api_integration_preference,omitempty"`
|
|
|
|
}
|
|
|
|
|
|
|
|
IntegrationDetails struct {
|
|
|
|
RestAPIIntegration *RestAPIIntegration `json:"rest_api_integration,omitempty"`
|
|
|
|
}
|
|
|
|
|
|
|
|
RestAPIIntegration struct {
|
|
|
|
IntegrationMethod string `json:"integration_method"`
|
|
|
|
IntegrationType string `json:"integration_type"`
|
|
|
|
ThirdPartyDetails ThirdPartyDetails `json:"third_party_details"`
|
|
|
|
}
|
|
|
|
|
|
|
|
ThirdPartyDetails struct {
|
|
|
|
Features []string `json:"features"`
|
|
|
|
}
|
|
|
|
|
|
|
|
Consent struct {
|
|
|
|
Type string `json:"type"`
|
|
|
|
Granted bool `json:"granted"`
|
|
|
|
}
|
2020-05-02 16:43:30 +02:00
|
|
|
|
|
|
|
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"`
|
|
|
|
}
|
2020-05-31 07:14:19 +02:00
|
|
|
|
|
|
|
SharedResponse struct {
|
|
|
|
CreateTime string `json:"create_time"`
|
|
|
|
UpdateTime string `json:"update_time"`
|
|
|
|
Links []Link `json:"links"`
|
|
|
|
}
|
|
|
|
|
|
|
|
ListParams struct {
|
|
|
|
Page string `json:"page,omitempty"` //Default: 0.
|
|
|
|
PageSize string `json:"page_size,omitempty"` //Default: 10.
|
|
|
|
TotalRequired string `json:"total_required,omitempty"` //Default: no.
|
|
|
|
}
|
|
|
|
|
|
|
|
SharedListResponse struct {
|
|
|
|
TotalItems string `json:"total_items,omitempty"`
|
|
|
|
TotalPages string `json:"total_pages,omitempty"`
|
|
|
|
Links []Link `json:"links,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 {
|
2019-12-17 01:34:48 +01:00
|
|
|
return fmt.Sprintf("%v %v: %d %s, %+v", r.Response.Request.Method, r.Response.Request.URL, r.Response.StatusCode, r.Message, r.Details)
|
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
|
|
|
|
}
|
2017-10-21 15:13:24 +02:00
|
|
|
|
2020-05-02 16:43:30 +02:00
|
|
|
// 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
|
|
|
|
}
|
|
|
|
|
2017-10-21 15:13:24 +02:00
|
|
|
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
|
|
|
|
}
|