为了账号安全,请及时绑定邮箱和手机立即绑定

当我用 spatie 包处理 stripewebbook 时没有任何反应

当我用 spatie 包处理 stripewebbook 时没有任何反应

PHP
胡子哥哥 2023-05-12 15:58:58
我使用 spatie/laravel-stripe-webhook 来处理从 stripe 发送的 webhook。我使用 stripe CLI 通过以下命令进行测试:stripe listen --events checkout.session.completed --forward-to localhost:8000/api/webhook/checkout一切顺利,我的控制台中有这样的回应:> Ready! Your webhook signing secret is whsec_mSz72pLPb4B******rfvvYajj641iqZ7 (^C to quit)2020-06-10 14:12:07   --> \checkout.session.completed\ [\evt_1GsSmjLG****Fak7OpFNC8c2\]2020-06-10 14:12:07  <--  [200] POST http://localhost:8000/api/webhook/checkout [\evt_1GsSmj*****OFak7OpFNC8c2\]但是...什么也没发生...我的 laravel.log 中没有任何错误...我关注了 github Spatie 中的所有自述文件,然后我这样做了:路线/api.php :Route::stripeWebhooks('webhook/checkout');应用程序/提供商/EventServiceProvider.php :protected $listen = [        Registered::class => [            SendEmailVerificationNotification::class,        ],        'stripe-webhooks::checkout.session.completed' => [            App\Listeners\HandleSubscriptions::class        ]    ];我必须禁用:Parent::boot();因为如果启用这个,我会抛出异常:[object] (ReflectionException(code: -1): Class App\\Providers\\App\\Listeners\\HandleSubscriptions does not exist at /var/www/private/bnb-v2/bnb-back/vendor/laravel/framework/src/Illuminate/Container/Container.php:803)而且我无法处理 stripeWebhook。
查看完整描述

2 回答

?
饮歌长啸

TA贡献1951条经验 获得超3个赞

您要求 Stripe 联系本地主机,以便您可以在本地测试您的代码,但因为它不是公共 URL,Stripe 看不到它,也无法向您发送请求。使用“localhost”只会在你的机器上工作。

要在本地使用 Stripe webhooks 测试您的代码,您可以使用 expose.sh 使用 Stripe 可以使用的公共 HTTPS URL 公开您的本地服务器。

安装暴露.sh

对于 Mac 或 Linux,转到Expose.sh并将显示的安装代码复制/粘贴到终端中。

对于 Windows,转到Expose.sh,下载二进制文件并将其放在您的 PATH 中的某个位置。

将您的本地 API 服务器公开到网络

启动您的 API 服务器。然后运行,expose <port>其中端口是您的 API 服务器运行的端口,例如 80 或 8080。

Expose.sh 将生成一个随机的公共 expose.sh URL。你会看到类似的输出

https://s3rh.expose.sh is forwarding to localhost:80
http://s3rh.expose.sh is forwarding to localhost:80

然后您可以让 Stripe 使用公共 HTTPS URL,该 URL 将转发到您本地运行的服务器。

获得 URL 后,您可以使用stripe listen --events checkout.session.completed --forward-to <https expose.sh url>输出中的 URL 进行替换,这类似于https://s3rh.expose.sh.

查看完整回答
反对 回复 2023-05-12
?
烙印99

TA贡献1829条经验 获得超13个赞

我有一个类似的问题,我在浪费了几个小时后终于设法解决了。这个问题调试起来特别烦人,因为 Laravel 的日志中没有记录任何内容,并且完全错误地指定格式会在 Stripe CLI 中返回成功的状态代码。


至少在我的情况下,问题是 webhook 事件stripe-webhook.php需要完全用下划线分隔:


'jobs' => [

    "payment_intent_succeeded" => \App\Jobs\StripeWebhooks\PaymentIntentSucceeded::class,

    // 'source_chargeable' => \App\Jobs\StripeWebhooks\HandleChargeableSource::class,

    // 'charge_failed' => \App\Jobs\StripeWebhooks\HandleFailedCharge::class,

],


查看完整回答
反对 回复 2023-05-12
  • 2 回答
  • 0 关注
  • 146 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信