6

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

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

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

谢谢!

4

4 回答 4

1

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

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

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)。

于 2013-03-15T19:43:57.467 回答
1

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

我做的是什么?

  1. 首先,我创建一个条带帐户。在该帐户中,他们将为您提供:

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

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

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

Stripe 分为两个世界:测试模式和现场。在测试模式下,您可以执行创建新客户、添加新发票、设置订阅等等。您在测试模式下所做的一切,在您的 Stripe 上线时都是一样的。

于 2013-03-15T18:47:20.923 回答
1

django-stripe-payments我有一个测试套件,虽然远非全面,但它只是一个开始。我所做的只是复制一个真正的 webhook 的数据,擦洗敏感数据并将其作为数据添加到测试中。

于 2013-08-11T01:20:47.560 回答
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
}

这有帮助吗?

于 2013-03-22T19:31:45.697 回答