GitHub - plutov/paypal: Golang client for PayPal REST API (original) (raw)

Latest Release GoDoc

Go client for PayPal REST API

Paypal REST API Docs

Missing endpoints

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

Usage

import "github.com/plutov/paypal/v4"

c, err := paypal.NewClient("clientID", "secretID", paypal.APIBaseSandBox) // or paypal.APIBaseLive c.SetLog(os.Stdout)

Get authorization

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

Capture authorization

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

Void authorization

auth, err := c.VoidAuthorization(authID)

Reauthorize authorization

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

Get Refund

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

Get Order

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

Create Order

units := []paypal.PurchaseUnitRequest{} source := &paypal.PaymentSource{} appCtx := &paypal.ApplicationContext{} order, err := c.CreateOrder(context.TODO(), paypal.OrderIntentCapture, units, ource, appCtx)

Update Order

order, err := c.UpdateOrder("O-4J082351X3132253H", []paypal.PurchaseUnitRequest{})

Authorize Order

auth, err := c.AuthorizeOrder(orderID, paypal.AuthorizeOrderRequest{})

Capture Order

capture, err := c.CaptureOrder(orderID, paypal.CaptureOrderRequest{})

Identity

token, err := c.GrantNewAccessTokenFromAuthCode("", "http://example.com/myapp/return.php")

// ... or by refresh token token, err := c.GrantNewAccessTokenFromRefreshToken("")

Get user info

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

Create single payout to email

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

payoutResp, err := c.CreatePayout(payout)

Get payout

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

Get payout item

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

Cancel unclaimed payout item

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

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

c.DeleteCreditCard("CARD-ID-123")

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

c.GetCreditCard("CARD-ID-123")

c.GetCreditCards(nil)

Webhooks

c.CreateWebhook(paypal.CreateWebhookRequest{ URL: "webhook URL", EventTypes: []paypal.WebhookEventType{ paypal.WebhookEventType{ Name: "PAYMENT.AUTHORIZATION.CREATED", }, }, })

c.UpdateWebhook("WebhookID", []paypal.WebhookField{ paypal.WebhookField{ Operation: "replace", Path: "/event_types", Value: []interface{}{ map[string]interface{}{ "name": "PAYMENT.SALE.REFUNDED", }, }, }, })

c.GetWebhook("WebhookID")

c.DeleteWebhook("WebhookID")

c.ListWebhooks(paypal.AncorTypeApplication)

Generate Next Invoice Number

c.GenerateInvoiceNumber(ctx) // might return something like "0001" or "0010".

Get Invoice Details

invoice, err := c.GetInvoiceDetails(ctx, "INV2-XFXV-YW42-ZANU-4F33")

Contributing

Check out ./CONTRIBUTING.md.

Testing

This projects uses paypal-rest-api-specifications to generate a mock server for testing purposes.

To update the mock server, first we need to get the latest OpenAPI specification files and then generate the mock server code. Paypal has multiple files that have to be combined into one OpenAPI file. The following commands will do that:

Then make sure to add missing mock implementations in mockserver/impl.go.

Linting

Make sure to run the linter before submitting a PR: