Documentation ¶
Overview ¶
Package paypal provides a wrapper to PayPal API (https://developer.paypal.com/webapps/developer/docs/api/). The first thing you do is to create a Client (you can select API base URL using paypal contants).
c, err := paypal.NewClient("clientID", "secretID", paypal.APIBaseSandBox)
Then you can get an access token from PayPal:
accessToken, err := c.GetAccessToken()
After you have an access token you can call built-in functions to get data from PayPal. paypal will assign all responses to go structures.
Example ¶
package main import ( paypal "github.com/plutov/paypal" ) func main() { // Initialize client c, err := paypal.NewClient("clientID", "secretID", paypal.APIBaseSandBox) if err != nil { panic(err) } // Retrieve access token _, err = c.GetAccessToken() if err != nil { panic(err) } }
Output:
Index ¶
- Constants
- type Address
- type AgreementDetails
- type Amount
- type AmountPayout
- type ApplicationContext
- type Authorization
- type AuthorizeOrderRequest
- type AuthorizeOrderResponse
- type BatchHeader
- type BillingAgreement
- type BillingPlan
- type BillingPlanListParams
- type BillingPlanListResp
- type Capture
- type CaptureAmount
- type CaptureOrderRequest
- type CaptureOrderResponse
- type CapturedPayments
- type CapturedPurchaseUnit
- type CardBillingAddress
- type ChargeModel
- type Client
- func (c *Client) ActivatePlan(planID string) error
- func (c *Client) AuthorizeOrder(orderID string, authorizeOrderRequest AuthorizeOrderRequest) (*Authorization, error)
- func (c *Client) CancelPayoutItem(payoutItemID string) (*PayoutItemResponse, error)
- func (c *Client) CaptureAuthorization(authID string, a *Amount, isFinalCapture bool) (*Capture, error)
- func (c *Client) CaptureOrder(orderID string, captureOrderRequest CaptureOrderRequest) (*CaptureOrderResponse, error)
- func (c *Client) CreateBillingAgreement(a BillingAgreement) (*CreateAgreementResp, error)
- func (c *Client) CreateBillingPlan(plan BillingPlan) (*CreateBillingResp, error)
- func (c *Client) CreateOrder(intent string, purchaseUnits []PurchaseUnitRequest, payer *CreateOrderPayer, ...) (*Order, error)
- func (c *Client) CreateSinglePayout(p Payout) (*PayoutResponse, error)
- func (c *Client) CreateWebProfile(wp WebProfile) (*WebProfile, error)
- func (c *Client) DeleteCreditCard(id string) error
- func (c *Client) DeleteWebProfile(profileID string) error
- func (c *Client) ExecuteApprovedAgreement(token string) (*ExecuteAgreementResponse, error)
- func (c *Client) GetAccessToken() (*TokenResponse, error)
- func (c *Client) GetAuthorization(authID string) (*Authorization, error)
- func (c *Client) GetCreditCard(id string) (*CreditCard, error)
- func (c *Client) GetCreditCards(ccf *CreditCardsFilter) (*CreditCards, error)
- func (c *Client) GetOrder(orderID string) (*Order, error)
- func (c *Client) GetPayout(payoutBatchID string) (*PayoutResponse, error)
- func (c *Client) GetPayoutItem(payoutItemID string) (*PayoutItemResponse, error)
- func (c *Client) GetRefund(refundID string) (*Refund, error)
- func (c *Client) GetSale(saleID string) (*Sale, error)
- func (c *Client) GetUserInfo(schema string) (*UserInfo, error)
- func (c *Client) GetWebProfile(profileID string) (*WebProfile, error)
- func (c *Client) GetWebProfiles() ([]WebProfile, error)
- func (c *Client) GrantNewAccessTokenFromAuthCode(code, redirectURI string) (*TokenResponse, error)
- func (c *Client) GrantNewAccessTokenFromRefreshToken(refreshToken string) (*TokenResponse, error)
- func (c *Client) ListBillingPlans(bplp BillingPlanListParams) (*BillingPlanListResp, error)
- func (c *Client) NewRequest(method, url string, payload interface{}) (*http.Request, error)
- func (c *Client) PatchCreditCard(id string, ccf []CreditCardField) (*CreditCard, error)
- func (c *Client) ReauthorizeAuthorization(authID string, a *Amount) (*Authorization, error)
- func (c *Client) RefundSale(saleID string, a *Amount) (*Refund, error)
- func (c *Client) Send(req *http.Request, v interface{}) error
- func (c *Client) SendWithAuth(req *http.Request, v interface{}) error
- func (c *Client) SendWithBasicAuth(req *http.Request, v interface{}) error
- func (c *Client) SetAccessToken(token string)
- func (c *Client) SetHTTPClient(client *http.Client)
- func (c *Client) SetLog(log io.Writer)
- func (c *Client) SetWebProfile(wp WebProfile) error
- func (c *Client) StoreCreditCard(cc CreditCard) (*CreditCard, error)
- func (c *Client) UpdateOrder(orderID string, purchaseUnits []PurchaseUnitRequest) (*Order, error)
- func (c *Client) VoidAuthorization(authID string) (*Authorization, error)
- type CreateAgreementResp
- type CreateBillingResp
- type CreateOrderPayer
- type CreateOrderPayerName
- type CreditCard
- type CreditCardField
- type CreditCardToken
- type CreditCards
- type CreditCardsFilter
- type Currency
- type Details
- type ErrorResponse
- type ErrorResponseDetail
- type ExecuteAgreementResponse
- type ExecuteResponse
- type Filter
- type FlowConfig
- type FundingInstrument
- type InputFields
- type Item
- type ItemList
- type JSONTime
- type Link
- type MerchantPreferences
- type Money
- type Name
- type Order
- type Payee
- type PayeeForOrders
- type Payer
- type PayerInfo
- type PayerWithNameAndPhone
- type PaymentDefinition
- type PaymentOptions
- type PaymentPatch
- type PaymentPayer
- type PaymentResponse
- type PaymentSource
- type PaymentSourceCard
- type PaymentSourceToken
- type Payout
- type PayoutItem
- type PayoutItemResponse
- type PayoutResponse
- type PhoneWithType
- type PhoneWithTypeNumber
- type Presentation
- type PurchaseUnit
- type PurchaseUnitAmount
- type PurchaseUnitAmountBreakdown
- type PurchaseUnitRequest
- type RedirectURLs
- type Refund
- type RefundResponse
- type Related
- type Sale
- type SenderBatchHeader
- type ShippingAddress
- type ShippingDetail
- type ShippingDetailAddressPortable
- type TaxInfo
- type TextField
- type TimeField
- type TokenResponse
- type Transaction
- type UserInfo
- type WebProfile
Examples ¶
Constants ¶
const ( // APIBaseSandBox points to the sandbox (for testing) version of the API APIBaseSandBox = "https://api.sandbox.paypal.com" // APIBaseLive points to the live version of the API APIBaseLive = "https://api.paypal.com" // RequestNewTokenBeforeExpiresIn is used by SendWithAuth and try to get new Token when it's about to expire RequestNewTokenBeforeExpiresIn = time.Duration(60) * time.Second )
const ( NoShippingDisplay uint = 0 NoShippingHide uint = 1 NoShippingBuyerAccount uint = 2 )
Possible values for `no_shipping` in InputFields
https://developer.paypal.com/docs/api/payment-experience/#definition-input_fields
const ( AddrOverrideFromFile uint = 0 AddrOverrideFromCall uint = 1 )
Possible values for `address_override` in InputFields
https://developer.paypal.com/docs/api/payment-experience/#definition-input_fields
const ( LandingPageTypeBilling string = "Billing" LandingPageTypeLogin string = "Login" )
Possible values for `landing_page_type` in FlowConfig
https://developer.paypal.com/docs/api/payment-experience/#definition-flow_config
const ( AllowedPaymentUnrestricted string = "UNRESTRICTED" AllowedPaymentInstantFundingSource string = "INSTANT_FUNDING_SOURCE" AllowedPaymentImmediatePay string = "IMMEDIATE_PAY" )
Possible value for `allowed_payment_method` in PaymentOptions
https://developer.paypal.com/docs/api/payments/#definition-payment_options
const ( OrderIntentCapture string = "CAPTURE" OrderIntentAuthorize string = "AUTHORIZE" )
Possible value for `intent` in CreateOrder
https://developer.paypal.com/docs/api/orders/v2/#orders_create
const ( ItemCategoryDigitalGood string = "DIGITAL_GOODS" ItemCategoryPhysicalGood string = "PHYSICAL_GOODS" )
Possible values for `category` in Item
https://developer.paypal.com/docs/api/orders/v2/#definition-item
const ( ShippingPreferenceGetFromFile string = "GET_FROM_FILE" ShippingPreferenceNoShipping string = "NO_SHIPPING" ShippingPreferenceSetProvidedAddress string = "SET_PROVIDED_ADDRESS" )
Possible values for `shipping_preference` in ApplicationContext
https://developer.paypal.com/docs/api/orders/v2/#definition-application_context
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Address ¶
type 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"` }
Address struct
type AgreementDetails ¶
type AgreementDetails struct { OutstandingBalance AmountPayout `json:"outstanding_balance"` CyclesRemaining int `json:"cycles_remaining,string"` CyclesCompleted int `json:"cycles_completed,string"` 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"` FailedPaymentCount int `json:"failed_payment_count,string"` }
AgreementDetails struct
type Amount ¶
type Amount struct { Currency string `json:"currency"` Total string `json:"total"` Details Details `json:"details,omitempty"` }
Amount struct
type AmountPayout ¶
AmountPayout struct
type ApplicationContext ¶ added in v1.1.1
type ApplicationContext struct { 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"` }
ApplicationContext struct
type Authorization ¶
type 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 []Link `json:"links,omitempty"` ClearingTime string `json:"clearing_time,omitempty"` ProtectionEligibility string `json:"protection_eligibility,omitempty"` ProtectionEligibilityType string `json:"protection_eligibility_type,omitempty"` }
Authorization struct
type AuthorizeOrderRequest ¶
type AuthorizeOrderRequest struct { PaymentSource *PaymentSource `json:"payment_source,omitempty"` ApplicationContext ApplicationContext `json:"application_context,omitempty"` }
AuthorizeOrderRequest - https://developer.paypal.com/docs/api/orders/v2/#orders_authorize
type AuthorizeOrderResponse ¶
type 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"` }
AuthorizeOrderResponse .
type BatchHeader ¶
type 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"` }
BatchHeader struct
type BillingAgreement ¶
type 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"` }
BillingAgreement struct
type BillingPlan ¶
type BillingPlan struct { 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"` }
BillingPlan struct
type BillingPlanListParams ¶
type BillingPlanListParams struct { Page string `json:"page,omitempty"` //Default: 0. Status string `json:"status,omitempty"` //Allowed values: CREATED, ACTIVE, INACTIVE, ALL. PageSize string `json:"page_size,omitempty"` //Default: 10. TotalRequired string `json:"total_required,omitempty"` //Default: no. }
BillingPlanListParams struct
type BillingPlanListResp ¶
type BillingPlanListResp struct { Plans []BillingPlan `json:"plans,omitempty"` TotalItems string `json:"total_items,omitempty"` TotalPages string `json:"total_pages,omitempty"` Links []Link `json:"links,omitempty"` }
BillingPlanListResp struct
type Capture ¶
type 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 []Link `json:"links,omitempty"` }
Capture struct
type CaptureAmount ¶
type CaptureAmount struct { ID string `json:"id,omitempty"` Amount *PurchaseUnitAmount `json:"amount,omitempty"` }
CaptureAmount struct
type CaptureOrderRequest ¶
type CaptureOrderRequest struct {
PaymentSource *PaymentSource `json:"payment_source"`
}
CaptureOrderRequest - https://developer.paypal.com/docs/api/orders/v2/#orders_capture
type CaptureOrderResponse ¶
type CaptureOrderResponse struct { ID string `json:"id,omitempty"` Status string `json:"status,omitempty"` Payer *PayerWithNameAndPhone `json:"payer,omitempty"` PurchaseUnits []CapturedPurchaseUnit `json:"purchase_units,omitempty"` }
CaptureOrderResponse is the response for capture order
type CapturedPayments ¶
type CapturedPayments struct {
Captures []CaptureAmount `json:"captures,omitempty"`
}
CapturedPayments has the amounts for a captured order
type CapturedPurchaseUnit ¶
type CapturedPurchaseUnit struct {
Payments *CapturedPayments `json:"payments,omitempty"`
}
CapturedPurchaseUnit are purchase units for a captured order
type CardBillingAddress ¶
type 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"` }
CardBillingAddress structure
type ChargeModel ¶
type ChargeModel struct { Type string `json:"type,omitempty"` Amount AmountPayout `json:"amount,omitempty"` }
ChargeModel struct
type Client ¶
type Client struct { sync.Mutex 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 // contains filtered or unexported fields }
Client represents a Paypal REST API Client
func NewClient ¶
NewClient returns new Client struct APIBase is a base API URL, for testing you can use paypal.APIBaseSandBox
func (*Client) ActivatePlan ¶
ActivatePlan activates a billing plan By default, a new plan is not activated Endpoint: PATCH /v2/payments/billing-plans/
func (*Client) AuthorizeOrder ¶
func (c *Client) AuthorizeOrder(orderID string, authorizeOrderRequest AuthorizeOrderRequest) (*Authorization, error)
AuthorizeOrder - https://developer.paypal.com/docs/api/orders/v2/#orders_authorize Endpoint: POST /v2/checkout/orders/ID/authorize
func (*Client) CancelPayoutItem ¶
func (c *Client) CancelPayoutItem(payoutItemID string) (*PayoutItemResponse, error)
CancelPayoutItem cancels an unclaimed Payout Item. If no one claims the unclaimed item within 30 days, the funds are automatically returned to the sender. Use this call to cancel the unclaimed item before the automatic 30-day refund. Endpoint: POST /v1/payments/payouts-item/ID/cancel
func (*Client) CaptureAuthorization ¶
func (c *Client) CaptureAuthorization(authID string, a *Amount, isFinalCapture bool) (*Capture, error)
CaptureAuthorization captures and process an existing authorization. To use this method, the original payment must have Intent set to "authorize" Endpoint: POST /v2/payments/authorization/ID/capture
func (*Client) CaptureOrder ¶
func (c *Client) CaptureOrder(orderID string, captureOrderRequest CaptureOrderRequest) (*CaptureOrderResponse, error)
CaptureOrder - https://developer.paypal.com/docs/api/orders/v2/#orders_capture Endpoint: POST /v2/checkout/orders/ID/capture
func (*Client) CreateBillingAgreement ¶
func (c *Client) CreateBillingAgreement(a BillingAgreement) (*CreateAgreementResp, error)
CreateBillingAgreement creates an agreement for specified plan Endpoint: POST /v2/payments/billing-agreements
func (*Client) CreateBillingPlan ¶
func (c *Client) CreateBillingPlan(plan BillingPlan) (*CreateBillingResp, error)
CreateBillingPlan creates a billing plan in Paypal Endpoint: POST /v2/payments/billing-plans
func (*Client) CreateOrder ¶
func (c *Client) CreateOrder(intent string, purchaseUnits []PurchaseUnitRequest, payer *CreateOrderPayer, appContext *ApplicationContext) (*Order, error)
CreateOrder - Use this call to create an order Endpoint: POST /v2/checkout/orders
func (*Client) CreateSinglePayout ¶
func (c *Client) CreateSinglePayout(p Payout) (*PayoutResponse, error)
CreateSinglePayout submits a payout with an asynchronous API call, which immediately returns the results of a PayPal payment. For email payout set RecipientType: "EMAIL" and receiver email into Receiver Endpoint: POST /v1/payments/payouts
func (*Client) CreateWebProfile ¶
func (c *Client) CreateWebProfile(wp WebProfile) (*WebProfile, error)
CreateWebProfile creates a new web experience profile in Paypal
Allows for the customisation of the payment experience ¶
Endpoint: POST /v1/payment-experience/web-profiles
func (*Client) DeleteCreditCard ¶
DeleteCreditCard func Endpoint: DELETE /v1/vault/credit-cards/credit_card_id
func (*Client) DeleteWebProfile ¶
DeleteWebProfile deletes a web experience profile from Paypal with given id
Endpoint: DELETE /v1/payment-experience/web-profiles
func (*Client) ExecuteApprovedAgreement ¶
func (c *Client) ExecuteApprovedAgreement(token string) (*ExecuteAgreementResponse, error)
ExecuteApprovedAgreement - Use this call to execute (complete) a PayPal agreement that has been approved by the payer. Endpoint: POST /v2/payments/billing-agreements/token/agreement-execute
func (*Client) GetAccessToken ¶
func (c *Client) GetAccessToken() (*TokenResponse, error)
GetAccessToken returns struct of TokenResponse No need to call SetAccessToken to apply new access token for current Client Endpoint: POST /v1/oauth2/token
func (*Client) GetAuthorization ¶
func (c *Client) GetAuthorization(authID string) (*Authorization, error)
GetAuthorization returns an authorization by ID Endpoint: GET /v2/payments/authorization/ID
func (*Client) GetCreditCard ¶
func (c *Client) GetCreditCard(id string) (*CreditCard, error)
GetCreditCard func Endpoint: GET /v1/vault/credit-cards/credit_card_id
func (*Client) GetCreditCards ¶
func (c *Client) GetCreditCards(ccf *CreditCardsFilter) (*CreditCards, error)
GetCreditCards func Endpoint: GET /v1/vault/credit-cards
func (*Client) GetPayout ¶
func (c *Client) GetPayout(payoutBatchID string) (*PayoutResponse, error)
GetPayout shows the latest status of a batch payout along with the transaction status and other data for individual items. Also, returns IDs for the individual payout items. You can use these item IDs in other calls. Endpoint: GET /v1/payments/payouts/ID
func (*Client) GetPayoutItem ¶
func (c *Client) GetPayoutItem(payoutItemID string) (*PayoutItemResponse, error)
GetPayoutItem shows the details for a payout item. Use this call to review the current status of a previously unclaimed, or pending, payout item. Endpoint: GET /v1/payments/payouts-item/ID
func (*Client) GetRefund ¶
GetRefund by ID Use it to look up details of a specific refund on direct and captured payments. Endpoint: GET /v2/payments/refund/ID
func (*Client) GetSale ¶
GetSale returns a sale by ID Use this call to get details about a sale transaction. Note: This call returns only the sales that were created via the REST API. Endpoint: GET /v2/payments/sale/ID
func (*Client) GetUserInfo ¶
GetUserInfo - Use this call to retrieve user profile attributes. Endpoint: GET /v1/identity/openidconnect/userinfo/?schema=<Schema> Pass the schema that is used to return as per openidconnect protocol. The only supported schema value is openid.
func (*Client) GetWebProfile ¶
func (c *Client) GetWebProfile(profileID string) (*WebProfile, error)
GetWebProfile gets an exists payment experience from Paypal
Endpoint: GET /v1/payment-experience/web-profiles/<profile-id>
func (*Client) GetWebProfiles ¶
func (c *Client) GetWebProfiles() ([]WebProfile, error)
GetWebProfiles retreieves web experience profiles from Paypal
Endpoint: GET /v1/payment-experience/web-profiles
func (*Client) GrantNewAccessTokenFromAuthCode ¶
func (c *Client) GrantNewAccessTokenFromAuthCode(code, redirectURI string) (*TokenResponse, error)
GrantNewAccessTokenFromAuthCode - Use this call to grant a new access token, using the previously obtained authorization code. Endpoint: POST /v1/identity/openidconnect/tokenservice
func (*Client) GrantNewAccessTokenFromRefreshToken ¶
func (c *Client) GrantNewAccessTokenFromRefreshToken(refreshToken string) (*TokenResponse, error)
GrantNewAccessTokenFromRefreshToken - Use this call to grant a new access token, using a refresh token. Endpoint: POST /v1/identity/openidconnect/tokenservice
func (*Client) ListBillingPlans ¶
func (c *Client) ListBillingPlans(bplp BillingPlanListParams) (*BillingPlanListResp, error)
ListBillingPlans lists billing-plans Endpoint: GET /v2/payments/billing-plans
func (*Client) NewRequest ¶
NewRequest constructs a request Convert payload to a JSON
func (*Client) PatchCreditCard ¶
func (c *Client) PatchCreditCard(id string, ccf []CreditCardField) (*CreditCard, error)
PatchCreditCard func Endpoint: PATCH /v1/vault/credit-cards/credit_card_id
func (*Client) ReauthorizeAuthorization ¶
func (c *Client) ReauthorizeAuthorization(authID string, a *Amount) (*Authorization, error)
ReauthorizeAuthorization reauthorize a Paypal account payment. PayPal recommends to reauthorize payment after ~3 days Endpoint: POST /v2/payments/authorization/ID/reauthorize
func (*Client) RefundSale ¶
RefundSale refunds a completed payment. Use this call to refund a completed payment. Provide the sale_id in the URI and an empty JSON payload for a full refund. For partial refunds, you can include an amount. Endpoint: POST /v2/payments/sale/ID/refund
func (*Client) Send ¶
Send makes a request to the API, the response body will be unmarshaled into v, or if v is an io.Writer, the response will be written to it without decoding
func (*Client) SendWithAuth ¶
SendWithAuth makes a request to the API and apply OAuth2 header automatically. If the access token soon to be expired or already expired, it will try to get a new one before making the main request client.Token will be updated when changed
func (*Client) SendWithBasicAuth ¶
SendWithBasicAuth makes a request to the API using clientID:secret basic auth
func (*Client) SetAccessToken ¶
SetAccessToken sets saved token to current client
func (*Client) SetHTTPClient ¶
SetHTTPClient sets *http.Client to current client
func (*Client) SetLog ¶
SetLog will set/change the output destination. If log file is set paypal will log all requests and responses to this Writer
func (*Client) SetWebProfile ¶
func (c *Client) SetWebProfile(wp WebProfile) error
SetWebProfile sets a web experience profile in Paypal with given id
Endpoint: PUT /v1/payment-experience/web-profiles
func (*Client) StoreCreditCard ¶
func (c *Client) StoreCreditCard(cc CreditCard) (*CreditCard, error)
StoreCreditCard func Endpoint: POST /v1/vault/credit-cards
func (*Client) UpdateOrder ¶
func (c *Client) UpdateOrder(orderID string, purchaseUnits []PurchaseUnitRequest) (*Order, error)
UpdateOrder updates the order by ID Endpoint: PATCH /v2/checkout/orders/ID
func (*Client) VoidAuthorization ¶
func (c *Client) VoidAuthorization(authID string) (*Authorization, error)
VoidAuthorization voids a previously authorized payment Endpoint: POST /v2/payments/authorization/ID/void
type CreateAgreementResp ¶
type CreateAgreementResp struct { Name string `json:"name,omitempty"` Description string `json:"description,omitempty"` Plan BillingPlan `json:"plan,omitempty"` Links []Link `json:"links,omitempty"` StartTime time.Time `json:"start_time,omitempty"` }
CreateAgreementResp struct
type CreateBillingResp ¶
type CreateBillingResp struct { ID string `json:"id,omitempty"` State string `json:"state,omitempty"` PaymentDefinitions []PaymentDefinition `json:"payment_definitions,omitempty"` MerchantPreferences MerchantPreferences `json:"merchant_preferences,omitempty"` CreateTime time.Time `json:"create_time,omitempty"` UpdateTime time.Time `json:"update_time,omitempty"` Links []Link `json:"links,omitempty"` }
CreateBillingResp struct
type CreateOrderPayer ¶
type 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"` }
CreateOrderPayer used with create order requests
type CreateOrderPayerName ¶
type CreateOrderPayerName struct { GivenName string `json:"given_name,omitempty"` Surname string `json:"surname,omitempty"` }
CreateOrderPayerName create order payer name
type CreditCard ¶
type 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"` }
CreditCard struct
type CreditCardField ¶
type CreditCardField struct { Operation string `json:"op"` Path string `json:"path"` Value string `json:"value"` }
CreditCardField PATCH /v1/vault/credit-cards/credit_card_id
type CreditCardToken ¶
type 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"` }
CreditCardToken struct
type CreditCards ¶
type CreditCards struct { Items []CreditCard `json:"items"` Links []Link `json:"links"` TotalItems int `json:"total_items"` TotalPages int `json:"total_pages"` }
CreditCards GET /v1/vault/credit-cards
type CreditCardsFilter ¶
CreditCardsFilter struct
type Currency ¶
type Currency struct { Currency string `json:"currency,omitempty"` Value string `json:"value,omitempty"` }
Currency struct
type Details ¶
type 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"` }
Details structure used in Amount structures as optional value
type ErrorResponse ¶
type 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"` }
ErrorResponse https://developer.paypal.com/docs/api/errors/
func (*ErrorResponse) Error ¶
func (r *ErrorResponse) Error() string
Error method implementation for ErrorResponse struct
type ErrorResponseDetail ¶
type ErrorResponseDetail struct { Field string `json:"field"` Issue string `json:"issue"` Links []Link `json:"link"` }
ErrorResponseDetail struct
type ExecuteAgreementResponse ¶
type 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"` }
ExecuteAgreementResponse struct
type ExecuteResponse ¶
type ExecuteResponse struct { ID string `json:"id"` Links []Link `json:"links"` State string `json:"state"` Payer PaymentPayer `json:"payer"` Transactions []Transaction `json:"transactions,omitempty"` }
ExecuteResponse struct
type FlowConfig ¶
type FlowConfig struct { LandingPageType string `json:"landing_page_type,omitempty"` BankTXNPendingURL string `json:"bank_txn_pending_url,omitempty"` UserAction string `json:"user_action,omitempty"` }
FlowConfig represents the general behaviour of redirect payment pages
https://developer.paypal.com/docs/api/payment-experience/#definition-flow_config
type FundingInstrument ¶
type FundingInstrument struct { CreditCard *CreditCard `json:"credit_card,omitempty"` CreditCardToken *CreditCardToken `json:"credit_card_token,omitempty"` }
FundingInstrument struct
type InputFields ¶
type InputFields struct { AllowNote bool `json:"allow_note,omitempty"` NoShipping uint `json:"no_shipping,omitempty"` AddressOverride uint `json:"address_override,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
type Item ¶
type Item struct { Quantity uint32 `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"` UnitAmount *Money `json:"unit_amount,omitempty"` Category string `json:"category,omitempty"` }
Item struct
type ItemList ¶
type ItemList struct { Items []Item `json:"items,omitempty"` ShippingAddress *ShippingAddress `json:"shipping_address,omitempty"` }
ItemList struct
type JSONTime ¶
JSONTime overrides MarshalJson method to format in ISO8601
func (JSONTime) MarshalJSON ¶
MarshalJSON for JSONTime
type Link ¶
type Link struct { Href string `json:"href"` Rel string `json:"rel,omitempty"` Method string `json:"method,omitempty"` Enctype string `json:"enctype,omitempty"` }
Link struct
type MerchantPreferences ¶
type MerchantPreferences struct { SetupFee *AmountPayout `json:"setup_fee,omitempty"` ReturnURL string `json:"return_url,omitempty"` CancelURL string `json:"cancel_url,omitempty"` AutoBillAmount string `json:"auto_bill_amount,omitempty"` InitialFailAmountAction string `json:"initial_fail_amount_action,omitempty"` MaxFailAttempts string `json:"max_fail_attempts,omitempty"` }
MerchantPreferences struct
type Order ¶
type 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"` }
Order struct
type PayeeForOrders ¶
type PayeeForOrders struct { EmailAddress string `json:"email_address,omitempty"` MerchantID string `json:"merchant_id,omitempty"` }
PayeeForOrders struct
type Payer ¶
type 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"` }
Payer struct
type PayerInfo ¶
type 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"` }
PayerInfo struct
type PayerWithNameAndPhone ¶
type PayerWithNameAndPhone struct { Name *CreateOrderPayerName `json:"name,omitempty"` EmailAddress string `json:"email_address,omitempty"` Phone *PhoneWithType `json:"phone,omitempty"` PayerID string `json:"payer_id,omitempty"` }
PayerWithNameAndPhone struct
type PaymentDefinition ¶
type PaymentDefinition struct { ID string `json:"id,omitempty"` 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"` }
PaymentDefinition struct
type PaymentOptions ¶ added in v1.0.1
type PaymentOptions struct {
AllowedPaymentMethod string `json:"allowed_payment_method,omitempty"`
}
PaymentOptions struct
type PaymentPatch ¶ added in v1.0.1
type PaymentPatch struct { Operation string `json:"op"` Path string `json:"path"` Value interface{} `json:"value"` }
PaymentPatch PATCH /v2/payments/payment/{payment_id)
type PaymentPayer ¶ added in v1.0.1
type PaymentPayer struct { PaymentMethod string `json:"payment_method"` Status string `json:"status,omitempty"` PayerInfo *PayerInfo `json:"payer_info,omitempty"` }
PaymentPayer struct
type PaymentResponse ¶
type PaymentResponse struct { ID string `json:"id"` State string `json:"state"` Intent string `json:"intent"` Payer Payer `json:"payer"` Transactions []Transaction `json:"transactions"` Links []Link `json:"links"` }
PaymentResponse structure
type PaymentSource ¶
type PaymentSource struct { Card *PaymentSourceCard `json:"card"` Token *PaymentSourceToken `json:"token"` }
PaymentSource structure
type PaymentSourceCard ¶
type 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"` }
PaymentSourceCard structure
type PaymentSourceToken ¶
PaymentSourceToken structure
type Payout ¶
type Payout struct { SenderBatchHeader *SenderBatchHeader `json:"sender_batch_header"` Items []PayoutItem `json:"items"` }
Payout struct
type PayoutItem ¶
type 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"` }
PayoutItem struct
type PayoutItemResponse ¶
type 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"` }
PayoutItemResponse struct
type PayoutResponse ¶
type PayoutResponse struct { BatchHeader *BatchHeader `json:"batch_header"` Items []PayoutItemResponse `json:"items"` Links []Link `json:"links"` }
PayoutResponse struct
type PhoneWithType ¶
type PhoneWithType struct { PhoneType string `json:"phone_type,omitempty"` PhoneNumber *PhoneWithTypeNumber `json:"phone_number,omitempty"` }
PhoneWithType struct used for orders
type PhoneWithTypeNumber ¶
type PhoneWithTypeNumber struct {
NationalNumber string `json:"national_number,omitempty"`
}
PhoneWithTypeNumber struct for PhoneWithType
type Presentation ¶
type Presentation struct { BrandName string `json:"brand_name,omitempty"` LogoImage string `json:"logo_image,omitempty"` LocaleCode string `json:"locale_code,omitempty"` }
Presentation represents the branding and locale that a customer sees on redirect payments
https://developer.paypal.com/docs/api/payment-experience/#definition-presentation
type PurchaseUnit ¶
type PurchaseUnit struct { ReferenceID string `json:"reference_id"` Amount *PurchaseUnitAmount `json:"amount,omitempty"` }
PurchaseUnit struct
type PurchaseUnitAmount ¶
type PurchaseUnitAmount struct { Currency string `json:"currency_code"` Value string `json:"value"` Breakdown *PurchaseUnitAmountBreakdown `json:"breakdown,omitempty"` }
PurchaseUnitAmount struct
type PurchaseUnitAmountBreakdown ¶
type 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"` }
PurchaseUnitAmountBreakdown struct
type PurchaseUnitRequest ¶
type PurchaseUnitRequest struct { ReferenceID string `json:"reference_id,omitempty"` Amount *PurchaseUnitAmount `json:"amount"` Payee *PayeeForOrders `json:"payee,omitempty"` 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"` Shipping *ShippingDetail `json:"shipping,omitempty"` }
PurchaseUnitRequest struct
type RedirectURLs ¶
type RedirectURLs struct { ReturnURL string `json:"return_url,omitempty"` CancelURL string `json:"cancel_url,omitempty"` }
RedirectURLs struct
type Refund ¶
type 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"` }
Refund struct
type RefundResponse ¶
type RefundResponse struct { ID string `json:"id,omitempty"` Amount *PurchaseUnitAmount `json:"amount,omitempty"` Status string `json:"status,omitempty"` }
RefundResponse .
type Related ¶
type 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"` }
Related struct
type Sale ¶
type Sale struct { ID string `json:"id,omitempty"` Amount *Amount `json:"amount,omitempty"` TransactionFee *Currency `json:"transaction_fee,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 []Link `json:"links,omitempty"` }
Sale struct
type SenderBatchHeader ¶
type SenderBatchHeader struct { EmailSubject string `json:"email_subject"` SenderBatchID string `json:"sender_batch_id,omitempty"` }
SenderBatchHeader struct
type ShippingAddress ¶
type 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"` }
ShippingAddress struct
type ShippingDetail ¶
type ShippingDetail struct { Name *Name `json:"name,omitempty"` Address *ShippingDetailAddressPortable `json:"address,omitempty"` }
ShippingDetail struct
type ShippingDetailAddressPortable ¶
type 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"` }
ShippingDetailAddressPortable used with create orders
type TaxInfo ¶
type TaxInfo struct { TaxID string `json:"tax_id,omitempty"` TaxIDType string `json:"tax_id_type,omitempty"` }
TaxInfo used for orders.
type TextField ¶
type TextField struct { Is string // contains filtered or unexported fields }
TextField type
type TokenResponse ¶
type TokenResponse struct { RefreshToken string `json:"refresh_token"` Token string `json:"access_token"` Type string `json:"token_type"` ExpiresIn expirationTime `json:"expires_in"` }
TokenResponse is for API response for the /oauth2/token endpoint
type Transaction ¶
type 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"` PaymentOptions *PaymentOptions `json:"payment_options,omitempty"` NotifyURL string `json:"notify_url,omitempty"` OrderURL string `json:"order_url,omitempty"` Payee *Payee `json:"payee,omitempty"` }
Transaction struct
type UserInfo ¶
type 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"` }
UserInfo struct
type WebProfile ¶
type 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"` }
WebProfile represents the configuration of the payment web payment experience