为什么Spatie laravel-webhook-client payload只在生产服务器上为空?

xqk2d5yq  于 2023-03-31  发布在  其他
关注(0)|答案(2)|浏览(146)

使用Spatie laravel-webhook-客户端
在开发服务器(Windows)上使用Postman测试所有的工作。获取请求,验证签名,并将有效负载发送到排队的作业。所有工作都与预期一样,从源发送完整的有效负载。
生产服务器接收webhook,验证签名,并将条目保存在webhook_calls表中。但表中的有效负载条目是空对象“[]”,排队作业中没有任何可用内容。
为什么负载仅在生产服务器上为空?

编辑:发现来自AWS(SNS)的源内容类型是text/plain而不是application/json。这是AWS多年前的一个明显疏忽。如何使用Spatie包在Laravel中处理text/plain?

bvuwiixz

bvuwiixz1#

哇,真是一个皇家皮塔。亚马逊承认10年前错误地将SNS消息的内容类型设置为文本/纯文本。不幸的是,我们这些刚刚开始使用该服务的人通过尝试/错误发现了这一点。
为了解决这个问题,我修改了Spatie包中的一行代码:
第23行:网络钩子客户端/src/模型/网络钩子呼叫. php
从-'payload' => $request->input(),
至-'payload' => json_decode($request->getContent(), JSON_UNESCAPED_SLASHES),
这对我很有效。我将不得不坚持使用这个版本的Spatie,以防他们升级。

1tuwyuhd

1tuwyuhd2#

最近,在2023年3月,Amazon SNS推出了对从主题交付的HTTP消息的自定义Content-Type标头的支持。以下是发布帖子:https://aws.amazon.com/about-aws/whats-new/2023/03/amazon-sns-content-type-request-headers-http-s-notifications/
您必须修改Amazon SNS订阅的DeliveryPolicy属性,将headerContentType属性设置为application/json或支持的任何其他值。您可以在此处找到支持的所有值:https://docs.aws.amazon.com/sns/latest/dg/sns-message-delivery-retries.html#creating-delivery-policy

{
    "healthyRetryPolicy": {
        "minDelayTarget": 1,
        "maxDelayTarget": 60,
        "numRetries": 50,
        "numNoDelayRetries": 3,
        "numMinDelayRetries": 2,
        "numMaxDelayRetries": 35,
        "backoffFunction": "exponential"
    },
    "throttlePolicy": {
        "maxReceivesPerSecond": 10
    },
    "requestPolicy": {
        "headerContentType": "application/json"
    }
}

您可以通过调用SubscribeSetSubscriptionAttributes API操作来设置DeliveryPolicy属性:

或者,您也可以使用AWS::SNS::Subscription资源使用AWS CloudFormation来设置此策略。

相关问题