PayPal沙盒中的Webhooks无法正常工作

13
我已将REST API集成到我们的系统中,唯一缺少的是我创建的Webhook的响应。 Webhook已在我的应用程序中为沙盒注册,但是当我使用应用程序密钥在沙盒中创建付款时,我没有收到Webhook接收器的调用。使用Webhook模拟器完全正常。
我执行的步骤如下:
  1. https://api.sandbox.paypal.com/v1/oauth2/token
  2. https://api.sandbox.paypal.com/v1/payments/payment
  3. 使用“REDIRECT”方法重定向到结果链接
  4. 使用沙盒帐户完成付款
我做错了什么吗?在沙盒中使用这个有问题吗?

3
你解决问题了吗?我在沙盒和正式环境下遇到了Webhook的问题,Paypal真是个烂公司... - Doctiger
4个回答

0
在Django中使用Paypal Webhook与沙盒
在Django应用程序中创建Webhook的URL,或者您可以从Paypal仪表板中创建。由于我们正在使用沙盒,因此我将从应用程序中创建。
url('createWebhook', CreateWebhookAPIView.as_view(), name='create-webhook'),

然后编写一个类API来创建用于创建Webhook的类

class CreateWebhookAPIView(CreateAPIView):
    """
    Subscribes your webhook listener to events.
    """
    authentication_classes = ()
    permission_classes = ()
    serializer_class = BrandListSerializer

    def __init__(self, **kwargs):
        self.response_format = ResponseInfo().response
        super(CreateWebhookAPIView, self).__init__(**kwargs)

    def post(self, request, *args, **kwargs):
        try:
            webhook = URL+'v1/notifications/webhooks'
            response = requests.post(webhook, headers=headers, json=request.data)
            self.response_format = return_response(
                response.json(), None, status.HTTP_200_OK, messages.SUCCESS)
            return Response(self.response_format)
        except Exception as e:
            print(e, "error")
            return Response(self.response_format)

并创建另一个类,您想执行特定事件操作,请确保为每个EVENT创建了单独的执行操作的类,如果尝试为不同的事件使用相同的URL,则会出现错误。我已经创建了以下类,目前只打印事件响应,您可以执行操作

class UpdateSubscriptionWebhookAPIView(CreateAPIView):
    """
    Subscribes your webhook listener to events.
    """
    authentication_classes = ()
    permission_classes = ()
    serializer_class = BrandListSerializer

    def __init__(self, **kwargs):
        self.response_format = ResponseInfo().response
        super(UpdateSubscriptionWebhookAPIView, self).__init__(**kwargs)

    def post(self, request, *args, **kwargs):
        try:
            event_json = json.loads(request.body)
            print(event_json)
            self.response_format = return_response(
                event_json, None, status.HTTP_200_OK, messages.SUCCESS)
            return Response(self.response_format)
        except Exception as e:
            print(e, "error")
            return Response(self.response_format)

添加相同的URL链接

url('updateSubscriptionWebhook', UpdateSubscriptionWebhookAPIView.as_view(), name='update-webhook')

之后从请求创建的帖子上进行操作,并使用相应的事件来触发它,你就可以看到创建的webhook,一旦事件发生,你将获得对应的输出,如下所示 在此输入图片描述

在打印类中输出的控制台输出 在此输入图片描述


0
如果您使用PayPal提供的按钮代码表单,则必须在创建按钮代码时选择您的凭据。

0

我也遇到了同样的问题;结果发现是防火墙问题。Paypal Webhook模拟器(以及沙盒操作的Webhook调用)尝试但未能发送Webhook消息。

Paypal沙盒Webhook模拟器仅会给出一个消息,即Webhook调用已被“成功”排队。虽然这里的“成功”是误导性的,因为最终它并不是成功的。

如果Paypal可以提供正在进行的模拟Webhook调用的调用状态,那将是很好的。这样,至少我们可以立即知道正在发生什么。


-1

要在沙盒或生产环境中使用Webhooks,请执行以下操作:

  1. 转到“我的应用程序和凭据”页面。
  2. 如果尚未创建应用程序,请创建一个。
  3. 添加Webhook URL。
  4. 订阅感兴趣的事件类型。

看起来您肯定已经完成了前三个步骤。如果您还没有订阅Webhook事件,请务必订阅。

您还可以检查您的Webhook URL,并查看是否从Webhooks模拟器生成数据,如果没有,则可能需要更新该URL。对于Webhook URL,您可以使用类似Runscope的工具,在那里创建桶以捕获响应。


7
谢谢您的回答。我已经订阅了所有测试事件。我在我的URL中唯一做的就是将请求写入日志。然而,模拟器可以正常工作。 - Dominik G
你好,能否分享一下你想触发哪个事件以及你是如何进行支付的呢?我会查一下并尽快回复你。 - VJ-PP
我期望收到“支付完成”事件,但出于测试原因,我监听每个事件。您可以在我的原始帖子中找到创建付款的步骤。付款将在第3步重定向到的网站上完成。 - Dominik G
7
嗨,@DominikG,能解决这个问题吗?我按照建议配置了,但在沙盒中仍然无法收到我的网络钩子事件。 - Satish

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接