使用Spatie laravel-webhook-客户端
在开发服务器(Windows)上使用Postman测试所有的工作。获取请求,验证签名,并将有效负载发送到排队的作业。所有工作都与预期一样,从源发送完整的有效负载。
生产服务器接收webhook,验证签名,并将条目保存在webhook_calls表中。但表中的有效负载条目是空对象“[]”,排队作业中没有任何可用内容。
为什么负载仅在生产服务器上为空?
编辑:发现来自AWS(SNS)的源内容类型是text/plain而不是application/json。这是AWS多年前的一个明显疏忽。如何使用Spatie包在Laravel中处理text/plain?
2条答案
按热度按时间bvuwiixz1#
哇,真是一个皇家皮塔。亚马逊承认10年前错误地将SNS消息的内容类型设置为文本/纯文本。不幸的是,我们这些刚刚开始使用该服务的人通过尝试/错误发现了这一点。
为了解决这个问题,我修改了Spatie包中的一行代码:
第23行:网络钩子客户端/src/模型/网络钩子呼叫. php
从-
'payload' => $request->input(),
至-
'payload' => json_decode($request->getContent(), JSON_UNESCAPED_SLASHES),
这对我很有效。我将不得不坚持使用这个版本的Spatie,以防他们升级。
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您可以通过调用
Subscribe
或SetSubscriptionAttributes
API操作来设置DeliveryPolicy
属性:或者,您也可以使用
AWS::SNS::Subscription
资源使用AWS CloudFormation来设置此策略。