Stripe签名验证异常错误PHP

问题描述 投票:0回答:1

我正在尝试将 Stripe 付款意向付款方式实施到我的应用程序中。到目前为止,付款已完成,但网络钩子给我提供了以下异常错误:

错误图片

Stripe\Exception\SignatureVerificationException
No signatures found matching the expected signature for payload

这是我的代码设置:

    public function handleWebhook(Request $request)
    {
        $sPayload = json_decode($request->getContent());
        $sSignature = $request->header('Stripe-Signature');
        $sWebhookSecret = env('STRIPE_WEBHOOK_SECRET');

        $oPaymentIntentResponse = Webhook::constructEvent(
             json_encode($sPayload), $sSignature, $sWebhookSecret
        );

        $this->processPaymentIntentFeedback($oPaymentIntentResponse);

        return response()->json(['success' => true]);
    }

这一切都使用实时网络钩子。 webhook 的图像  我从这本 wehbook 中获取了 stripe webhook 密钥。 我从同一个应用程序中获得的条带密钥和秘密。 所以钥匙应该都按顺序排列。已找到网络钩子并且付款已完成,唯一的问题是签名未经过验证。

Stripe\Exception\SignatureVerificationException
No signatures found matching the expected signature for payload

我的代码中的有效负载、签名和 Webhook 签名已正确交付,但它们似乎不匹配。可能出了什么问题?

php laravel stripe-payments webhooks
1个回答
0
投票

Stripe 的

constructEvent
函数非常敏感,对原始 Event 内容中的空格的任何更改都会导致计算出的签名值发生变化,并导致签名未找到错误。我相信您解码然后重新编码请求的有效负载的方式。

我建议尝试将原始请求有效负载传递到

constructEvent
,而不是尝试使用已处理的值。

交换这个:

$oPaymentIntentResponse = Webhook::constructEvent(
             json_encode($sPayload), $sSignature, $sWebhookSecret
        );

对于:

$oPaymentIntentResponse = Webhook::constructEvent(
             $request->getContent(), $sSignature, $sWebhookSecret
        );

这更接近 Stripe 在其示例 Webhook 端点代码中推荐的内容: https://docs.stripe.com/webhooks/quickstart?lang=php

© www.soinside.com 2019 - 2024. All rights reserved.