GitHub - plutov/paypal: Golang client for PayPal REST API (original) (raw)
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: