• Stars
    star
    670
  • Rank 67,354 (Top 2 %)
  • Language
    Go
  • License
    MIT License
  • Created about 9 years ago
  • Updated 4 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Golang client for PayPal REST API

Go Report Card Build Status Godoc

Go client for PayPal REST API

Coverage

Auth

  • POST /v1/oauth2/token

/v1/payments

  • POST /v1/payments/payouts
  • GET /v1/payments/payouts/:id
  • GET /v1/payments/payouts-item/:id
  • POST /v1/payments/payouts-item/:id/cancel
  • GET /v1/payments/sale/:id
  • POST /v1/payments/sale/:id/refund
  • GET /v1/payments/billing-plans
  • POST /v1/payments/billing-plans
  • PATCH /v1/payments/billing-plans/:id
  • POST /v1/payments/billing-agreements
  • POST /v1/payments/billing-agreements/:token/agreement-execute

/v2/payments

  • GET /v2/payments/authorizations/:id
  • GET /v2/payments/captures/:id
  • POST /v2/payments/authorizations/:id/capture
  • POST /v2/payments/authorizations/:id/void
  • POST /v2/payments/authorizations/:id/reauthorize
  • GET /v2/payments/refund/:id

Identity

  • POST /v1/identity/openidconnect/tokenservice
  • GET /v1/identity/openidconnect/userinfo/?schema=:schema

/v1/payment-experience

  • 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

/v1/reporting

  • POST /v1/reporting/transactions

Vault

  • 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

Checkout

  • POST /v2/checkout/orders
  • GET /v2/checkout/orders/:id
  • PATCH /v2/checkout/orders/:id
  • POST /v2/checkout/orders/:id/authorize
  • POST /v2/checkout/orders/:id/capture

Notifications

  • POST /v1/notifications/webhooks
  • GET /v1/notifications/webhooks
  • GET /v1/notifications/webhooks/:id
  • PATCH /v1/notifications/webhooks/:id
  • DELETE /v1/notifications/webhooks/:id
  • POST /v1/notifications/verify-webhook-signature

Products (Catalog)

  • POST /v1/catalogs/products
  • PATCH /v1/catalogs/products/:id
  • GET /v1/catalogs/products/:id
  • GET /v1/catalogs/products

Billing Plans (Subscriptions)

  • POST /v1/billing/plans
  • PATCH /v1/billing/plans/:id
  • GET /v1/billing/plans/:id
  • GET /v1/billing/plans
  • POST /v1/billing/plans/:id/activate
  • POST /v1/billing/plans/:id/deactivate
  • POST /v1/billing/plans/:id/update-pricing-schemes

Subscriptions

  • POST /v1/billing/subscriptions
  • PATCH /v1/billing/subscriptions/:id
  • GET /v1/billing/subscriptions/:id
  • POST /v1/billing/subscriptions/:id/activate
  • POST /v1/billing/subscriptions/:id/cancel
  • POST /v1/billing/subscriptions/:id/revise
  • POST /v1/billing/subscriptions/:id/capture
  • POST /v1/billing/subscriptions/:id/suspend
  • GET /v1/billing/subscriptions/:id/transactions

Invoicing

  • POST /v2/invoicing/generate-next-invoice-number
  • GET /v2/invoicing/invoices/:id

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"

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

Get authorization by ID

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 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, &paypal.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")

Create an Order

order, err := c.CreateOrder(paypal.OrderIntentCapture, []paypal.PurchaseUnitRequest{paypal.PurchaseUnitRequest{ReferenceID: "ref-id", Amount: paypal.Amount{Total: "7.00", Currency: "USD"}}})

Update Order by ID

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("<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 := paypal.Payout{
    SenderBatchHeader: &paypal.SenderBatchHeader{
        EmailSubject: "Subject will be displayed on PayPal",
    },
    Items: []paypal.PayoutItem{
        paypal.PayoutItem{
            RecipientType: "EMAIL",
            Receiver:      "[email protected]",
            Amount: &paypal.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(paypal.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", []paypal.CreditCardField{
    paypal.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)

Webhooks

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

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

// Get a registered webhook
c.GetWebhook("WebhookID")

// Delete a webhook
c.DeleteWebhook("WebhookID")

// List registered webhooks
c.ListWebhooks(paypal.AncorTypeApplication)

Generate Next Invoice Number

// GenerateInvoiceNumber: generates the next invoice number that is available to the merchant.
c.GenerateInvoiceNumber(ctx) // might return something like "0001" or "0010".

Get Invoice Details by ID

// the second argument is an ID, it should be valid
invoice, err := c.GetInvoiceDetails(ctx, "INV2-XFXV-YW42-ZANU-4F33")
  • for now, we are yet to implement the ShowAllInvoices endpoint, so use the following cURL request for the same(this gives you the list of invoice-IDs for this customer)

    curl -v -X GET https://api-m.sandbox.paypal.com/v2/invoicing/invoices?total_required=true \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer <Token>" 
  • refer to the beginning of this Usage section for obtaining a Token.

How to Contribute

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

Current contributors:

Tests

  • Unit tests: go test -v ./...
  • Integration tests: go test -tags=integration

More Repositories

1

practice-go

Practice Go: a collection of Go programming challenges
Go
621
star
2

packagemain

Collection of materials for my Youtube Channel about Go
Go
502
star
3

benchmark-grpc-protobuf-vs-http-json

Benchmarks comparing gRPC+Protobuf vs JSON+HTTP in Go
Go
122
star
4

playgo

CLI tool to send .go file to the Go Playground
Go
76
star
5

clickhouse-helm

ClickHouse Helm Chart
Dockerfile
64
star
6

bot

Python Bot using RASA for NLP
Python
28
star
7

awesome-functions

A curated list of awesome open source Cloud / Lambda / Azure functions
28
star
8

go-snake-telnet

Snake Game over telnet protocol in Go
Go
22
star
9

google-home-k8s

Google Home Kubernetes Action
Go
22
star
10

o

o means open. simple CLI tool to open repository in browser
Shell
17
star
11

echo-logrus

Echo middleware to log using logrus pkg
Go
16
star
12

notebook

Personal digital notebook
10
star
13

slack-stranger-bot

🤖 Meet strangers in your company, explore new people.
Go
10
star
14

go-docker-skeleton

Docker based skeleton for standard Go application
Makefile
7
star
15

gitbootstrap

Useful template for .gitconfig and .gitignore
Shell
6
star
16

elixirrest

Sample REST server in Elixir
Elixir
6
star
17

cubique

Elegant AJAX datagrid for Zend Framework and jQuery
JavaScript
6
star
18

all-my-stats

Google Cloud Function to display various social stats (pretty much specific for me).
Go
4
star
19

go-maxmind-geoip

Go plugin with MaxMind's free GeoIP2 DB
Go
3
star
20

games

Verbal games based on Google Speech, Google Translate, AI. Written in Go, some games support multiplayer mode. Written in Go.
Go
3
star
21

go-bindata-tpl

How to use go-bindata with html/template
Go
2
star
22

go-docker-compose-skeleton

Go
2
star
23

pliutau.com

Source for my blog about Go, built with Hugo
CSS
2
star
24

air-quality-google-home

Google Action. Air Quality Index gives you current air quality index and status description.
Go
2
star
25

mag

Go
2
star
26

gosd

Go Runtime stats exporter into Stackdriver
Go
1
star
27

dotfiles

My dotfiles
Shell
1
star
28

surv

SURV Project 🏄
Go
1
star
29

github-org-diff

Simple CLI tool to check a diff between 2 branches of all org repos
Go
1
star
30

anthems

Anthems is an Action on Google to play a national anthem of selected country
Go
1
star