forked from go-packages/paypal
55 lines
1.8 KiB
Go
55 lines
1.8 KiB
Go
|
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
|
||
|
}
|