paypal/types.go

376 lines
15 KiB
Go
Raw Normal View History

2015-10-14 07:30:28 +02:00
package paypalsdk
import (
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"
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
RequestNewTokenBeforeExpiresIn = 60
2015-10-14 07:30:28 +02:00
)
type (
2015-12-29 10:21:11 +01:00
// Address https://developer.paypal.com/webapps/developer/docs/api/#address-object
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"`
}
2015-12-29 10:21:11 +01:00
// Amount https://developer.paypal.com/webapps/developer/docs/api/#amount-object
2015-12-17 08:50:25 +01:00
Amount struct {
Currency string `json:"currency"`
Total string `json:"total"`
2015-10-23 04:29:36 +02:00
}
2016-02-17 05:10:49 +01:00
// AmountPayout https://developer.paypal.com/docs/integration/direct/create-single-payout/
AmountPayout struct {
Currency string `json:"currency"`
Value string `json:"value"`
}
2015-12-29 10:21:11 +01:00
// Authorization rhttps://developer.paypal.com/webapps/developer/docs/api/#authorization-object
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"`
Links []Links `json:"links,omitempty"`
ClearingTime string `json:"clearing_time,omitempty"`
ProtectionEligibility string `json:"protection_eligibility,omitempty"`
ProtectionEligibilityType string `json:"protection_eligibility_type,omitempty"`
}
2016-02-17 05:10:49 +01:00
// BatchHeader https://developer.paypal.com/docs/integration/direct/create-single-payout/
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"`
}
2015-12-29 10:21:11 +01:00
// Capture https://developer.paypal.com/webapps/developer/docs/api/#capture-object
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"`
Links []Links `json:"links,omitempty"`
}
2015-12-17 08:50:25 +01:00
// Client represents a Paypal REST API Client
Client struct {
client *http.Client
ClientID string
Secret string
APIBase string
2016-05-16 12:04:23 +02:00
Log io.Writer // If user set log file name all requests will be logged there
2015-12-17 08:50:25 +01:00
Token *TokenResponse
2015-11-25 11:30:25 +01:00
}
2015-12-29 10:21:11 +01:00
// CreditCard https://developer.paypal.com/webapps/developer/docs/api/#creditcard-object
2015-11-25 11:30:25 +01:00
CreditCard struct {
ID string `json:"id,omitempty"`
PayerID string `json:"payer_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-12-29 10:21:11 +01:00
// CreditCardToken https://developer.paypal.com/webapps/developer/docs/api/#creditcardtoken-object
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"`
}
2015-12-17 08:50:25 +01:00
// Currency https://developer.paypal.com/webapps/developer/docs/api/#currency-object
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
2015-12-29 10:21:11 +01:00
// ErrorResponse https://developer.paypal.com/webapps/developer/docs/api/#error-object
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 []ErrorDetail `json:"details"`
}
2015-10-16 12:00:57 +02:00
2015-12-29 10:21:11 +01:00
// ErrorDetail https://developer.paypal.com/webapps/developer/docs/api/#errordetails-object
2015-10-23 04:29:36 +02:00
ErrorDetail struct {
Field string `json:"field"`
Issue string `json:"issue"`
}
2015-10-15 07:43:50 +02:00
2015-12-17 08:50:25 +01:00
// ExecuteResponse structure
ExecuteResponse struct {
ID string `json:"id"`
Links []PaymentLink `json:"links"`
State string `json:"state"`
Transactions []Transaction `json:"transactions,omitempty"`
2015-11-16 06:11:27 +01:00
}
2015-12-29 10:21:11 +01:00
// FundingInstrument https://developer.paypal.com/webapps/developer/docs/api/#fundinginstrument-object
2015-12-17 08:50:25 +01:00
FundingInstrument struct {
CreditCard *CreditCard `json:"credit_card,omitempty"`
CreditCardToken *CreditCardToken `json:"credit_card_token,omitempty"`
}
2015-12-29 10:21:11 +01:00
// Item https://developer.paypal.com/webapps/developer/docs/api/#item-object
2015-12-17 08:50:25 +01:00
Item struct {
Quantity int `json:"quantity"`
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"`
}
// ItemList struct
ItemList struct {
Items []Item `json:"items,omitempty"`
ShippingAddress *ShippingAddress `json:"shipping_address,omitempty"`
}
2015-12-29 10:21:11 +01:00
// Links https://developer.paypal.com/webapps/developer/docs/api/#itemlist-object
2015-12-17 08:50:25 +01:00
Links struct {
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
}
// Order https://developer.paypal.com/webapps/developer/docs/api/#order-object
Order struct {
ID string `json:"id,omitempty"`
CreateTime *time.Time `json:"create_time,omitempty"`
UpdateTime *time.Time `json:"update_time,omitempty"`
State string `json:"state,omitempty"`
Amount *Amount `json:"amount,omitempty"`
PendingReason string `json:"pending_reason,omitempty"`
ParentPayment string `json:"parent_payment,omitempty"`
Links []Links `json:"links,omitempty"`
}
2015-12-29 10:21:11 +01:00
// Payer https://developer.paypal.com/webapps/developer/docs/api/#payer-object
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"`
}
2015-12-29 10:21:11 +01:00
// PayerInfo https://developer.paypal.com/webapps/developer/docs/api/#itemlist-object
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"`
}
2015-12-29 10:21:11 +01:00
// Payment https://developer.paypal.com/webapps/developer/docs/api/#payment-object
2015-11-25 11:30:25 +01:00
Payment struct {
Intent string `json:"intent"`
Payer *Payer `json:"payer"`
Transactions []Transaction `json:"transactions"`
RedirectURLs *RedirectURLs `json:"redirect_urls,omitempty"`
ID string `json:"id,omitempty"`
CreateTime *time.Time `json:"create_time,omitempty"`
State string `json:"state,omitempty"`
UpdateTime *time.Time `json:"update_time,omitempty"`
ExperienceProfileID string `json:"experience_profile_id,omitempty"`
}
2015-12-29 10:21:11 +01:00
// PaymentLink https://developer.paypal.com/webapps/developer/docs/api/#paymentlink-object
2015-11-16 06:11:27 +01:00
PaymentLink struct {
Href string `json:"href"`
2015-11-20 09:07:34 +01:00
Rel string `json:"rel"`
2015-10-23 04:29:36 +02:00
}
2015-10-15 07:43:50 +02:00
2015-12-17 08:50:25 +01:00
// PaymentResponse structure
PaymentResponse struct {
2015-11-16 06:11:27 +01:00
ID string `json:"id"`
Links []PaymentLink `json:"links"`
2015-12-17 08:50:25 +01:00
}
2016-02-17 05:10:49 +01:00
// Payout https://developer.paypal.com/docs/integration/direct/create-single-payout/
Payout struct {
SenderBatchHeader *SenderBatchHeader `json:"sender_batch_header"`
Items []PayoutItem `json:"items"`
}
// PayoutItem https://developer.paypal.com/docs/integration/direct/create-single-payout/
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"`
}
// PayoutItemResponse https://developer.paypal.com/docs/integration/direct/create-single-payout/
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 []Links `json:"links"`
}
// PayoutResponse https://developer.paypal.com/docs/integration/direct/create-single-payout/
PayoutResponse struct {
BatchHeader *BatchHeader `json:"batch_header"`
Items []PayoutItemResponse `json:"items"`
Links []Links `json:"links"`
}
2015-12-29 10:21:11 +01:00
// RedirectURLs https://developer.paypal.com/webapps/developer/docs/api/#redirecturls-object
2015-12-17 08:50:25 +01:00
RedirectURLs struct {
ReturnURL string `json:"return_url,omitempty"`
CancelURL string `json:"cancel_url,omitempty"`
}
2015-12-29 10:21:11 +01:00
// Refund https://developer.paypal.com/webapps/developer/docs/api/#refund-object
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
// Related https://developer.paypal.com/docs/api/payments/#definition-related
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"`
}
2015-12-29 10:21:11 +01:00
// Sale https://developer.paypal.com/webapps/developer/docs/api/#sale-object
2015-12-17 04:56:49 +01:00
Sale struct {
ID string `json:"id,omitempty"`
Amount *Amount `json:"amount,omitempty"`
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"`
Links []Links `json:"links,omitempty"`
}
2016-02-17 05:10:49 +01:00
// SenderBatchHeader https://developer.paypal.com/docs/integration/direct/create-single-payout/
SenderBatchHeader struct {
EmailSubject string `json:"email_subject"`
}
2015-12-29 10:21:11 +01:00
// ShippingAddress https://developer.paypal.com/webapps/developer/docs/api/#shippingaddredd-object
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"`
}
// 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 int64 `json:"expires_in"`
2015-12-17 08:50:25 +01:00
}
2015-12-29 10:21:11 +01:00
// Transaction https://developer.paypal.com/webapps/developer/docs/api/#transaction-object
2015-12-17 08:50:25 +01:00
Transaction struct {
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"`
2015-12-17 04:56:49 +01:00
}
// UserInfo https://developer.paypal.com/webapps/developer/docs/api/#userinfo-object
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"`
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"`
AccountType string `json:"account_type,omitempty"`
AgeRange string `json:"age_range,omitempty"`
PayerID string `json:"payer_id,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-02-22 10:22:00 +01:00
return fmt.Sprintf("%v %v: %d %v", r.Response.Request.Method, r.Response.Request.URL, r.Response.StatusCode, r.Message)
2015-10-15 07:43:50 +02:00
}