Skip to content

Commit

Permalink
Add verify webhook signature response (#117)
Browse files Browse the repository at this point in the history
  • Loading branch information
roopakv authored Sep 19, 2019
1 parent 8e38113 commit cd72fd3
Show file tree
Hide file tree
Showing 4 changed files with 61 additions and 1 deletion.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
.idea
.vscode
2 changes: 1 addition & 1 deletion example_test.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package paypal_test

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

func Example() {
// Initialize client
Expand Down
4 changes: 4 additions & 0 deletions types.go
Original file line number Diff line number Diff line change
Expand Up @@ -852,6 +852,10 @@ type (
BankTXNPendingURL string `json:"bank_txn_pending_url,omitempty"`
UserAction string `json:"user_action,omitempty"`
}

VerifyWebhookResponse struct {
VerificationStatus string `json:"verification_status,omitempty"`
}
)

// Error method implementation for ErrorResponse struct
Expand Down
54 changes: 54 additions & 0 deletions webhooks.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package paypal

import (
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)

// VerifyWebhookSignature - Use this to verify the signature of a webhook recieved from paypal.
// Endpoint: POST /v1/notifications/verify-webhook-signature
func (c *Client) VerifyWebhookSignature(httpReq *http.Request, webhookID string) (*VerifyWebhookResponse, error) {
type verifyWebhookSignatureRequest struct {
AuthAlgo string `json:"auth_algo,omitempty"`
CertURL string `json:"cert_url,omitempty"`
TransmissionID string `json:"transmission_id,omitempty"`
TransmissionSig string `json:"transmission_sig,omitempty"`
TransmissionTime string `json:"transmission_time,omitempty"`
WebhookID string `json:"webhook_id,omitempty"`
WebhookEvent json.RawMessage `json:"webhook_event"`
}
getBody := httpReq.GetBody
bodyReadCloser, err := getBody()
if err != nil {
return nil, err
}
body, err := ioutil.ReadAll(bodyReadCloser)
if err != nil {
return nil, err
}

verifyRequest := verifyWebhookSignatureRequest{
AuthAlgo: httpReq.Header.Get("PAYPAL-AUTH-ALGO"),
CertURL: httpReq.Header.Get("PAYPAL-CERT-URL"),
TransmissionID: httpReq.Header.Get("PAYPAL-TRANSMISSION-ID"),
TransmissionSig: httpReq.Header.Get("PAYPAL-TRANSMISSION-SIG"),
TransmissionTime: httpReq.Header.Get("PAYPAL-TRANSMISSION-TIME"),
WebhookID: webhookID,
WebhookEvent: json.RawMessage(body),
}

response := &VerifyWebhookResponse{}

req, err := c.NewRequest("POST", fmt.Sprintf("%s%s", c.APIBase, "/v1/notifications/verify-webhook-signature"), verifyRequest)
if err != nil {
return nil, err
}

if err = c.SendWithAuth(req, response); err != nil {
return nil, err
}

return response, nil
}

0 comments on commit cd72fd3

Please sign in to comment.