paypalsdk

package module
v1.0.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 22, 2018 License: MIT Imports: 12 Imported by: 0

README

Go Report Card Build Status Godoc Sourcegraph

GO client for PayPal REST API

Coverage

  • POST /v1/oauth2/token
  • POST /v1/payments/payment
  • GET /v1/payments/payment/ID
  • GET /v1/payments/payment
  • GET /v1/payments/authorization/ID
  • POST /v1/payments/authorization/ID/capture
  • POST /v1/payments/authorization/ID/void
  • POST /v1/payments/authorization/ID/reauthorize
  • GET /v1/payments/sale/ID
  • POST /v1/payments/sale/ID/refund
  • GET /v1/payments/refund/ID
  • GET /v1/payments/orders/ID
  • POST /v1/payments/orders/ID/authorize
  • POST /v1/payments/orders/ID/capture
  • POST /v1/payments/orders/ID/do-void
  • POST /v1/identity/openidconnect/tokenservice
  • GET /v1/identity/openidconnect/userinfo/?schema=SCHEMA
  • POST /v1/payments/payouts
  • GET /v1/payments/payouts/ID
  • GET /v1/payments/payouts-item/ID
  • POST /v1/payments/payouts-item/ID/cancel
  • GET /v1/payment-experience/web-profiles
  • POST /v1/payment-experience/web-profiles
  • GET /v1/payment-experience/web-profiles/ID
  • PUT /v1/payment-experience/web-profiles/ID
  • DELETE /v1/payment-experience/web-profiles/ID
  • POST /v1/vault/credit-cards
  • DELETE /v1/vault/credit-cards/ID
  • PATCH /v1/vault/credit-cards/ID
  • GET /v1/vault/credit-cards/ID
  • GET /v1/vault/credit-cards
  • POST /v1/payments/billing-plans
  • PATCH /v1/payments/billing-plans/ID
  • POST /v1/payments/billing-agreements
  • POST /v1/payments/billing-agreements/TOKEN/agreement-execute

Missing endpoints

It is possible that some endpoints are missing in this SDK Client, but you can use built-in paypalsdk functions to perform a request: NewClient -> NewRequest -> SendWithAuth

New Client

import "github.com/logpacker/PayPal-Go-SDK"

// Create a client instance
c, err := paypalsdk.NewClient("clientID", "secretID", paypalsdk.APIBaseSandBox)
c.SetLog(os.Stdout) // Set log to terminal stdout

accessToken, err := c.GetAccessToken()

Create direct paypal payment

amount := paypalsdk.Amount{
    Total:    "7.00",
    Currency: "USD",
}
redirectURI := "http://example.com/redirect-uri"
cancelURI := "http://example.com/cancel-uri"
description := "Description for this payment"
paymentResult, err := c.CreateDirectPaypalPayment(amount, redirectURI, cancelURI, description)

Create custom payment

p := paypalsdk.Payment{
    Intent: "sale",
    Payer: &paypalsdk.Payer{
        PaymentMethod: "credit_card",
        FundingInstruments: []paypalsdk.FundingInstrument{paypalsdk.FundingInstrument{
            CreditCard: &paypalsdk.CreditCard{
                Number:      "4111111111111111",
                Type:        "visa",
                ExpireMonth: "11",
                ExpireYear:  "2020",
                CVV2:        "777",
                FirstName:   "John",
                LastName:    "Doe",
            },
        }},
    },
    Transactions: []paypalsdk.Transaction{paypalsdk.Transaction{
        Amount: &paypalsdk.Amount{
            Currency: "USD",
            Total:    "7.00",
        },
        Description: "My Payment",
    }},
    RedirectURLs: &paypalsdk.RedirectURLs{
        ReturnURL: "http://...",
        CancelURL: "http://...",
    },
}
paymentResponse, err := client.CreatePayment(p)

Execute approved payment

paymentID := "PAY-17S8410768582940NKEE66EQ"
payerID := "7E7MGXCWTTKK2"
executeResult, err := c.ExecuteApprovedPayment(paymentID, payerID)

Get payment by ID

payment, err := c.GetPayment("PAY-17S8410768582940NKEE66EQ")

Get list of payments

payments, err := c.GetPayments()

Get authorization by ID

auth, err := c.GetAuthorization("2DC87612EK520411B")

Capture authorization

capture, err := c.CaptureAuthorization(authID, &paypalsdk.Amount{Total: "7.00", Currency: "USD"}, true)

Void authorization

auth, err := c.VoidAuthorization(authID)

Reauthorize authorization

auth, err := c.ReauthorizeAuthorization(authID, &paypalsdk.Amount{Total: "7.00", Currency: "USD"})

Get Sale by ID

sale, err := c.GetSale("36C38912MN9658832")

Refund Sale by ID

// Full
refund, err := c.RefundSale(saleID, nil)
// Partial
refund, err := c.RefundSale(saleID, &paypalsdk.Amount{Total: "7.00", Currency: "USD"})

Get Refund by ID

refund, err := c.GetRefund("O-4J082351X3132253H")

Get Order by ID

order, err := c.GetOrder("O-4J082351X3132253H")

Authorize Order

auth, err := c.AuthorizeOrder(orderID, &paypalsdk.Amount{Total: "7.00", Currency: "USD"})

Capture Order

capture, err := c.CaptureOrder(orderID, &paypalsdk.Amount{Total: "7.00", Currency: "USD"}, true, nil)

Void Order

order, err := c.VoidOrder(orderID)

Identity

token, err := c.GrantNewAccessTokenFromAuthCode("<Authorization-Code>", "http://example.com/myapp/return.php")
// ... or by refresh token
token, err := c.GrantNewAccessTokenFromRefreshToken("<Refresh-Token>")

Retreive user information

userInfo, err := c.GetUserInfo("openid")

Create single payout to email

payout := paypalsdk.Payout{
    SenderBatchHeader: &paypalsdk.SenderBatchHeader{
        EmailSubject: "Subject will be displayed on PayPal",
    },
    Items: []paypalsdk.PayoutItem{
        paypalsdk.PayoutItem{
            RecipientType: "EMAIL",
            Receiver:      "single-email-payout@mail.com",
            Amount: &paypalsdk.AmountPayout{
                Value:    "15.11",
                Currency: "USD",
            },
            Note:         "Optional note",
            SenderItemID: "Optional Item ID",
        },
    },
}

payoutResp, err := c.CreateSinglePayout(payout)

Get payout by ID

payout, err := c.GetPayout("PayoutBatchID")

Get payout item by ID

payoutItem, err := c.GetPayoutItem("PayoutItemID")

Cancel unclaimed payout item by ID

payoutItem, err := c.CancelPayoutItem("PayoutItemID")

Create web experience profile

webprofile := WebProfile{
    Name: "YeowZa! T-Shirt Shop",
    Presentation: Presentation{
        BrandName:  "YeowZa! Paypal",
        LogoImage:  "http://www.yeowza.com",
        LocaleCode: "US",
    },

    InputFields: InputFields{
        AllowNote:       true,
        NoShipping:      NoShippingDisplay,
        AddressOverride: AddrOverrideFromCall,
    },

    FlowConfig: FlowConfig{
        LandingPageType:   LandingPageTypeBilling,
        BankTXNPendingURL: "http://www.yeowza.com",
    },
}

result, err := c.CreateWebProfile(webprofile)

Get web experience profile

webprofile, err := c.GetWebProfile("XP-CP6S-W9DY-96H8-MVN2")

List web experience profile

webprofiles, err := c.GetWebProfiles()

Update web experience profile


webprofile := WebProfile{
    ID: "XP-CP6S-W9DY-96H8-MVN2",
    Name: "Shop YeowZa! YeowZa! ",
}
err := c.SetWebProfile(webprofile)

Delete web experience profile

err := c.DeleteWebProfile("XP-CP6S-W9DY-96H8-MVN2")

Vault

// Store CC
c.StoreCreditCard(paypalsdk.CreditCard{
    Number:      "4417119669820331",
    Type:        "visa",
    ExpireMonth: "11",
    ExpireYear:  "2020",
    CVV2:        "874",
    FirstName:   "Foo",
    LastName:    "Bar",
})

// Delete it
c.DeleteCreditCard("CARD-ID-123")

// Edit it
c.PatchCreditCard("CARD-ID-123", []paypalsdk.CreditCardField{
    paypalsdk.CreditCardField{
        Operation: "replace",
        Path:      "/billing_address/line1",
        Value:     "New value",
    },
})

// Get it
c.GetCreditCard("CARD-ID-123")

// Get all stored credit cards
c.GetCreditCards(nil)

How to Contribute

  • Fork a repository
  • Add/Fix something
  • Check that tests are passing
  • Create PR

Tests

  • Unit tests: go test
  • Integration tests: go test -tags=integration

Documentation

Overview

Package paypalsdk 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 paypalsdk contants).

c, err := paypalsdk.NewClient("clientID", "secretID", paypalsdk.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. paypalsdk will assign all responses to go structures.

Example
package main

import (
	paypalsdk "github.com/logpacker/PayPal-Go-SDK"
)

func main() {
	// Initialize client
	c, err := paypalsdk.NewClient("clientID", "secretID", paypalsdk.APIBaseSandBox)
	if err != nil {
		panic(err)
	}

	// Retrieve access token
	_, err = c.GetAccessToken()
	if err != nil {
		panic(err)
	}

	// Create credit card payment
	p := paypalsdk.Payment{
		Intent: "sale",
		Payer: &paypalsdk.Payer{
			PaymentMethod: "credit_card",
			FundingInstruments: []paypalsdk.FundingInstrument{{
				CreditCard: &paypalsdk.CreditCard{
					Number:      "4111111111111111",
					Type:        "visa",
					ExpireMonth: "11",
					ExpireYear:  "2020",
					CVV2:        "777",
					FirstName:   "John",
					LastName:    "Doe",
				},
			}},
		},
		Transactions: []paypalsdk.Transaction{{
			Amount: &paypalsdk.Amount{
				Currency: "USD",
				Total:    "7.00",
			},
			Description: "My Payment",
		}},
		RedirectURLs: &paypalsdk.RedirectURLs{
			ReturnURL: "http://...",
			CancelURL: "http://...",
		},
	}
	_, err = c.CreatePayment(p)
	if err != nil {
		panic(err)
	}
}
Output:

Index

Examples

Constants

View Source
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
)
View Source
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

View Source
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

View Source
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

View Source
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

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

type AmountPayout struct {
	Currency string `json:"currency"`
	Value    string `json:"value"`
}

AmountPayout 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 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"`
}

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 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 ChargeModel

type ChargeModel struct {
	Type   string       `json:"type,omitempty"`
	Amount AmountPayout `json:"amount,omitempty"`
}

ChargeModel struct

type Client

type Client struct {
	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

func NewClient(clientID string, secret string, APIBase string) (*Client, error)

NewClient returns new Client struct APIBase is a base API URL, for testing you can use paypalsdk.APIBaseSandBox

func (*Client) ActivatePlan

func (c *Client) ActivatePlan(planID string) error

ActivatePlan activates a billing plan By default, a new plan is not activated Endpoint: PATCH /v1/payments/billing-plans/

func (*Client) AuthorizeOrder

func (c *Client) AuthorizeOrder(orderID string, amount *Amount) (*Authorization, error)

AuthorizeOrder - Use this call to authorize an order. Endpoint: POST /v1/payments/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 /v1/payments/authorization/ID/capture

func (*Client) CaptureOrder

func (c *Client) CaptureOrder(orderID string, amount *Amount, isFinalCapture bool, currency *Currency) (*Capture, error)

CaptureOrder - Use this call to capture a payment on an order. To use this call, an original payment call must specify an intent of order. Endpoint: POST /v1/payments/orders/ID/capture

func (*Client) CreateBillingAgreement

func (c *Client) CreateBillingAgreement(a BillingAgreement) (*CreateAgreementResp, error)

CreateBillingAgreement creates an agreement for specified plan Endpoint: POST /v1/payments/billing-agreements

func (*Client) CreateBillingPlan

func (c *Client) CreateBillingPlan(plan BillingPlan) (*CreateBillingResp, error)

CreateBillingPlan creates a billing plan in Paypal Endpoint: POST /v1/payments/billing-plans

func (*Client) CreateDirectPaypalPayment

func (c *Client) CreateDirectPaypalPayment(amount Amount, redirectURI string, cancelURI string, description string) (*PaymentResponse, error)

CreateDirectPaypalPayment sends request to create a payment with payment_method=paypal CreatePayment is more common function for any kind of payment Endpoint: POST /v1/payments/payment

func (*Client) CreatePayment

func (c *Client) CreatePayment(p Payment) (*CreatePaymentResp, error)

CreatePayment creates a payment in Paypal Depending on the payment_method and the funding_instrument, you can use the payment resource for direct credit card payments, stored credit card payments, or PayPal account payments. Endpoint: POST /v1/payments/payment

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

func (c *Client) DeleteCreditCard(id string) error

DeleteCreditCard func Endpoint: DELETE /v1/vault/credit-cards/credit_card_id

func (*Client) DeleteWebProfile

func (c *Client) DeleteWebProfile(profileID string) error

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 /v1/payments/billing-agreements/token/agreement-execute

func (*Client) ExecuteApprovedPayment

func (c *Client) ExecuteApprovedPayment(paymentID string, payerID string) (*ExecuteResponse, error)

ExecuteApprovedPayment - Use this call to execute (complete) a PayPal payment that has been approved by the payer. You can optionally update transaction information when executing the payment by passing in one or more transactions. Endpoint: POST /v1/payments/payment/paymentID/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 /v1/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) GetOrder

func (c *Client) GetOrder(orderID string) (*Order, error)

GetOrder retrieves order by ID Endpoint: GET /v1/payments/orders/ID

func (*Client) GetPayment

func (c *Client) GetPayment(paymentID string) (*Payment, error)

GetPayment gets a payment from PayPal Endpoint: GET /v1/payments/payment/ID

func (*Client) GetPayments

func (c *Client) GetPayments() ([]Payment, error)

GetPayments retrieve payments resources from Paypal Endpoint: GET /v1/payments/payment/

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

func (c *Client) GetRefund(refundID string) (*Refund, error)

GetRefund by ID Use it to look up details of a specific refund on direct and captured payments. Endpoint: GET /v1/payments/refund/ID

func (*Client) GetSale

func (c *Client) GetSale(saleID string) (*Sale, error)

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 /v1/payments/sale/ID

func (*Client) GetUserInfo

func (c *Client) GetUserInfo(schema string) (*UserInfo, error)

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 string, 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) NewRequest

func (c *Client) NewRequest(method, url string, payload interface{}) (*http.Request, error)

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) PatchPayment added in v1.0.1

func (c *Client) PatchPayment(paymentID string, p []PaymentPatch) (*Payment, error)

PatchPayment modifies some fields of a payment prior to execution Endpoint: PATCH /v1/payments/payment/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 /v1/payments/authorization/ID/reauthorize

func (*Client) RefundSale

func (c *Client) RefundSale(saleID string, a *Amount) (*Refund, error)

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 /v1/payments/sale/ID/refund

func (*Client) Send

func (c *Client) Send(req *http.Request, v interface{}) error

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

func (c *Client) SendWithAuth(req *http.Request, v interface{}) error

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

func (c *Client) SendWithBasicAuth(req *http.Request, v interface{}) error

SendWithBasicAuth makes a request to the API using clientID:secret basic auth

func (*Client) SetAccessToken

func (c *Client) SetAccessToken(token string) error

SetAccessToken sets saved token to current client

func (*Client) SetHTTPClient

func (c *Client) SetHTTPClient(client *http.Client) error

SetHTTPClient sets *http.Client to current client

func (*Client) SetLog

func (c *Client) SetLog(log io.Writer) error

SetLog will set/change the output destination. If log file is set paypalsdk 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) VoidAuthorization

func (c *Client) VoidAuthorization(authID string) (*Authorization, error)

VoidAuthorization voids a previously authorized payment Endpoint: POST /v1/payments/authorization/ID/void

func (*Client) VoidOrder

func (c *Client) VoidOrder(orderID string) (*Order, error)

VoidOrder - Use this call to void an existing order. Note: An order cannot be voided if payment has already been partially or fully captured. Endpoint: POST /v1/payments/orders/ID/do-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 CreatePaymentResp

type CreatePaymentResp struct {
	*Payment
	Links []Link `json:"links"`
}

CreatePaymentResp contains Payment Info and Links slice

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

type CreditCardsFilter struct {
	PageSize int
	Page     int
}

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"`
}

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    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"`
}

Item struct

type ItemList

type ItemList struct {
	Items           []Item           `json:"items,omitempty"`
	ShippingAddress *ShippingAddress `json:"shipping_address,omitempty"`
}

ItemList struct

type JSONTime

type JSONTime time.Time

JSONTime overrides MarshalJson method to format in ISO8601

func (JSONTime) MarshalJSON

func (t JSONTime) MarshalJSON() ([]byte, error)

MarshalJSON for JSONTime

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 ListPaymentsResp

type ListPaymentsResp struct {
	Payments []Payment `json:"payments"`
}

ListPaymentsResp slice of payments

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"`
	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         []Link     `json:"links,omitempty"`
}

Order 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 Payment

type 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"`
}

Payment 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"`
}

type PaymentPatch added in v1.0.1

type PaymentPatch struct {
	Operation string      `json:"op"`
	Path      string      `json:"path"`
	Value     interface{} `json:"value"`
}

PaymentPatch PATCH /v1/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"`
	Links []Link `json:"links"`
}

PaymentResponse 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 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 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 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 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"`
}

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

https://developer.paypal.com/docs/api/payment-experience/

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL