测试 Django 对 Stripe Webhooks 的响应

问题描述 投票:0回答:5

我正在尝试找出一种有效的方法来测试我的服务器如何处理来自 Stripe 的 webhook。我正在设置一个系统来向客户的信用卡添加多个订阅,这在 Stripe 的网站上有描述:

https://support.stripe.com/questions/can-customers-have-multiple-subscriptions

我遇到的问题是弄清楚如何有效地测试我的服务器是否正确执行脚本(即,向发票添加正确的订阅,在我的数据库中记录事件等)。我现在不太关心自动化测试,我只是在努力有效地对脚本运行任何好的测试。以前有人用 Django 做过这个吗?您使用哪些资源和工具来运行这些测试?

谢谢!

python django payment-processing stripe-payments webhooks
5个回答
1
投票

我没有使用任何工具来运行测试。 Impact 条带具有完整的 API 参考,它显示您发送给他们的信息,并且它们还显示错误。 Stripe 非常容易设置,价格便宜,并且在文档中有完整的详细信息。

我做了什么?

  1. 首先我创建一个 Stripe 帐户。在该帐户中,他们会给您:

    • TEST_SECRET_KEY:用于发送付款和条带信息(用于测试)
    • TEST_PUBS_KEY:与 Stripe 通信时标识您的网站(用于测试)
    • LIVE_SECRET_KEY:用于以条带形式发送付款和信息(用于实时)
    • LIVE_PUBS_KEY:与 Stripe 通信时识别您的网站(实时)
    • API_VERSION: "2012-11-07" //此版本仅用于测试
  2. 当您登录时,您将在顶部看到文档。单击文档,他们将为您提供有关如何创建表单、如何创建订阅、如何处理错误等等的分步教程。

  3. 检查您的脚本是否正在执行并连接到 stripe。单击完整 API 参考,然后选择 Python。在该页面中,您将看到您发送的信息以及遇到的错误。

我真正喜欢的是,如果 Stripe 检测到错误,系统会指出并为您提供解决方案。解决方案在左侧,检查发送的信息在右侧。

Stripe 分为两个世界:测试模式和实时模式。在测试模式下,您可以执行创建新客户、添加新发票、设置订阅等操作。无论您在测试模式下做什么,当您的 Stripe 上线时都是一样的。


1
投票

我真的很喜欢 stripe 为 Web hook 提供日志,但是,很难查看它们的错误响应,因此我使用 Requests 库设置了一个脚本。首先,我转到 Stripe 仪表板并复制了他们发送的一个请求。

事件和 Webhooks --> 单击其中一个请求 --> 复制整个请求

import requests

data = """ PASTE COPIED JSON REQUEST HERE """

# insert the appropriate url/endpoint below
res = requests.post("http://localhost:8000/stripe_hook/", data=data).text
output = open("hook_result.html", "w")
output.write(res)
output.close()

现在我可以打开

hook_result.html
并查看可能出现的任何 django 错误(在 django 中给定 DEBUG=True )。


1
投票

django-stripe- payments 中,我有一个 测试套件,虽然远非全面,但这只是实现这一目标的开始。我所做的只是复制真实的 Webhook 数据,清除其中的敏感数据并将其作为数据添加到测试中。


0
投票

测试 stripe webhooks 很痛苦。我不使用 Django,所以我的答案会更笼统。

我的 php webhook 处理程序解析 webhook 数据并相应地调度处理程序函数。在我的处理程序类中,我为测试 Webhook 破坏的所有 id 设置了具有合法数据的类属性。然后我在每个处理程序函数中都有一个测试实时模式的条件。如果为 false,我将用合法的测试 ID 替换损坏的 ID。

我还有另一个名为 $fakeLiveMode 的类属性,我在测试时将其设置为 true。这允许我强制代码像在实时模式下一样进行处理。

因此,例如,在测试 customer.subscription.updated 事件时,计划 ID 和客户 ID 会出现问题。所以在那个处理程序中我会这样做:

if ($event->livemode === true || $this->fakeLivemode)
{
    if ($this->fakeLivemode)
    {
        // override botched data returned by test webhook
        $event->data->object->plan->id = $this->testPlanId;
        $event->data->object->customer = $this->testCustomerId;
    }

    // process webhook
}

这有帮助吗?


0
投票

您知道如何从 Stripe 测试 webhooks 了吗?

© www.soinside.com 2019 - 2024. All rights reserved.