From 18b47a065240138b65b74cba5f9d7eb1e34c485d Mon Sep 17 00:00:00 2001 From: Onezino Moreira Date: Thu, 13 Aug 2020 20:20:35 -0300 Subject: [PATCH] add recipient_wallet payout field (#165) --- example_test.go | 38 ++++++++++++++++++++++++++++++++++++++ integration_test.go | 37 ++++++++++++++++++++++++++++++++++--- types.go | 17 ++++++++++++----- 3 files changed, 84 insertions(+), 8 deletions(-) diff --git a/example_test.go b/example_test.go index 52ec09be..25e19ce8 100644 --- a/example_test.go +++ b/example_test.go @@ -15,3 +15,41 @@ func Example() { panic(err) } } + +func ExampleClient_CreateSinglePayout_Venmo() { + // 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) + } + + // Set payout item with Venmo wallet + payout := paypal.Payout{ + SenderBatchHeader: &paypal.SenderBatchHeader{ + SenderBatchID: "Payouts_2018_100007", + EmailSubject: "You have a payout!", + EmailMessage: "You have received a payout! Thanks for using our service!", + }, + Items: []paypal.PayoutItem{ + { + RecipientType: "EMAIL", + RecipientWallet: paypal.VenmoRecipientWallet, + Receiver: "receiver@example.com", + Amount: &paypal.AmountPayout{ + Value: "9.87", + Currency: "USD", + }, + Note: "Thanks for your patronage!", + SenderItemID: "201403140001", + }, + }, + } + + c.CreateSinglePayout(payout) +} \ No newline at end of file diff --git a/integration_test.go b/integration_test.go index c39246be..6100512e 100644 --- a/integration_test.go +++ b/integration_test.go @@ -3,9 +3,10 @@ package paypal import ( - "github.com/stretchr/testify/assert" "testing" "time" + + "github.com/stretchr/testify/assert" ) // All test values are defined here @@ -38,6 +39,36 @@ func TestGetUserInfo(t *testing.T) { } } +func TestCreateVenmoPayout(t *testing.T) { + c, _ := NewClient(testClientID, testSecret, APIBaseSandBox) + c.GetAccessToken() + + payout := Payout{ + SenderBatchHeader: &SenderBatchHeader{ + SenderBatchID: "Payouts_2018_100007", + EmailSubject: "You have a payout!", + EmailMessage: "You have received a payout! Thanks for using our service!", + }, + Items: []PayoutItem{ + { + RecipientType: "EMAIL", + RecipientWallet: VenmoRecipientWallet, + Receiver: "receiver@example.com", + Amount: &AmountPayout{ + Value: "9.87", + Currency: "USD", + }, + Note: "Thanks for your patronage!", + SenderItemID: "201403140001", + }, + }, + } + + res, err := c.CreateSinglePayout(payout) + assert.NoError(t, err, "should accept venmo wallet") + assert.Greater(t, len(res.Items), 0) +} + func TestCreateSinglePayout(t *testing.T) { c, _ := NewClient(testClientID, testSecret, APIBaseSandBox) c.GetAccessToken() @@ -285,13 +316,13 @@ func TestSubscriptionPlans(t *testing.T) { TotalCycles: 0, }, }, - PaymentPreferences: PaymentPreferences{ + PaymentPreferences: &PaymentPreferences{ AutoBillOutstanding: false, SetupFee: nil, SetupFeeFailureAction: SetupFeeFailureActionCancel, PaymentFailureThreshold: 0, }, - Taxes: Taxes{ + Taxes: &Taxes{ Percentage: "19", Inclusive: false, }, diff --git a/types.go b/types.go index 576f241c..140b1043 100644 --- a/types.go +++ b/types.go @@ -115,6 +115,12 @@ const ( FeatureUpdateCustomerDispute string = "UPDATE_CUSTOMER_DISPUTES" ) +// https://developer.paypal.com/docs/api/payments.payouts-batch/v1/?mark=recipient_wallet#definition-recipient_wallet +const ( + PaypalRecipientWallet string = "PAYPAL" + VenmoRecipientWallet string = "VENMO" +) + const ( LinkRelSelf string = "self" LinkRelActionURL string = "action_url" @@ -735,11 +741,12 @@ type ( // PayoutItem struct 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"` + RecipientType string `json:"recipient_type"` + RecipientWallet string `json:"recipient_wallet"` + Receiver string `json:"receiver"` + Amount *AmountPayout `json:"amount"` + Note string `json:"note,omitempty"` + SenderItemID string `json:"sender_item_id,omitempty"` } // PayoutItemResponse struct