【问题标题】:How to build a post request to verify PayPal webhook signature in python?如何在 python 中构建发布请求以验证 PayPal webhook 签名?
【发布时间】:2021-08-07 22:28:35
【问题描述】:

我需要验证收到的 PayPal webhook 的签名。 (PayPal-Python-SDK 不是一个选项,因为它已被弃用)

这是我正在尝试的:

access_token = "Bearer " + r['access_token']

data = {"auth_algo": auth_algo,
        "transmission_id": transmission_id,
        "transmission_sig": transmission_sig,
        "transmission_time": transmission_time,
        "webhook_id": webhookID,
        "webhook_event": res,
        "cert_url":cert_url }

headers = {"Authorization":access_token, "Content-Type": "application/json"}


response = requests.post("https://api-m.paypal.com/v1/notifications/verify-webhook-signature", data=data, headers=headers)

得到 400 响应:

{'name': 'VALIDATION_ERROR', 'message': '无效请求 - 查看详情', 'debug_id': '4d3f231bb0c69', 'details': [{'location': 'body', 'issue': 'MALFORMED_REQUEST_JSON'}],'链接':[]}

  • 我不确定访问令牌是否应该放在标头中。
  • 也不确定网址是否正确,但请注意我是 在生产环境中进行测试,而不是在沙盒中。
  • 也不确定是否应该在
    上添加“Bearer”前缀 令牌。

我正在尝试遵循本指南: https://developer.paypal.com/docs/api/webhooks/v1/#verify-webhook-signature_post

【问题讨论】:

    标签: python paypal


    【解决方案1】:

    数据=数据

    data 需要一个字符串,而不是 python dict

    你需要使用json=https://docs.python-requests.org/en/master/user/quickstart/#more-complicated-post-requests

    【讨论】:

    • 谢谢:我似乎在 webhook_event 字段中有错误 ::: {'name': 'VALIDATION_ERROR', 'message': 'Invalid request - see details', 'debug_id': ' 4d3f231bb0c69', 'details': [{'location': 'body', 'issue': 'MALFORMED_REQUEST_JSON'}], 'links': []}.
    • 我正在使用从 paypal 收到的原始 json webhook 作为签名验证调用中的 webhook_event 字段。此外,我一直小心地将访问令牌用于生产。
    • data= 取字符串,需要使用json=
    • 成功了!非常感谢普雷斯顿。还有一个问题,每次收到 webhook 时获取访问令牌是一种不好的做法吗?我试图避免每个月左右更新令牌。
    • 令牌被缓存(如果您重复调用,您将获得相同的令牌)并通常在 9 小时后过期,响应中有一个 expires_in。自己缓存它们,而不是根据需要重复调​​用。
    猜你喜欢
    • 2020-08-22
    • 2016-05-17
    • 2020-07-17
    • 2015-06-20
    • 2015-07-10
    • 2021-01-25
    • 1970-01-01
    • 2021-10-23
    • 1970-01-01
    相关资源
    最近更新 更多