You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GCP云函数部署Flask应用:Stripe Webhook签名验证失败且Payload为空

GCP Flask云函数Stripe Webhook Payload空+签名验证失败解决方案

问题根源

你遇到的问题核心是两个关键错误:

  1. GCP的Flask环境会自动解析请求体,导致request.get_data()无法获取原始Payload
  2. 代码中手动将签名验证后的event重置为None,直接破坏了后续事件处理逻辑

修复步骤

1. 阻止Flask自动解析请求体

在路由装饰器中添加get_json=False参数,避免Flask提前解析并清空请求体,确保get_data()能拿到完整原始Payload:

@app.route('/webhook', methods=['POST'], get_json=False)

2. 删除致命的event = None代码行

你在签名验证成功后,手动把event设为None,这会导致后续的事件类型判断永远不成立,哪怕验证通过也返回失败。直接删掉这行代码:

# 移除这行:event = None

3. 确认Content-Type未被篡改

Stripe Webhook发送的请求Content-Type为application/json,如果GCP网关或负载均衡修改了这个请求头,会导致解析异常。可以通过日志确认该值是否正确,若异常需检查GCP侧配置。

修复后的完整代码

@app.route('/webhook', methods=['POST'], get_json=False)
def stripe_webhook():
    event = None
    payload = request.get_data(as_text=True)

    logging.info(f"Raw request payload: {payload}")

    sig_header = request.headers.get('Stripe-Signature')
    logging.info(f"Stripe-Signature header: {sig_header}")

    content_type = request.headers.get('Content-Type')
    logging.info(f"Request Content-Type: {content_type}")

    logging.info(f'endpoint secret: {endpoint_secret}')

    if endpoint_secret:
        try:
            event = stripe.Webhook.construct_event(
                payload, sig_header, endpoint_secret
            )
        except stripe.error.SignatureVerificationError as e:
            logging.error(f"Webhook signature verification failed: {e}")
            return jsonify(success=False)

    if event and event['type'] == 'customer.subscription.deleted':
        subscription = event['data']['object']
        customer_id = subscription['customer']
        handle_subscription_deleted(customer_id)

        return jsonify(success=True)

    return jsonify(success=False)

测试建议

部署完成后用Stripe CLI测试:

stripe listen --forward-to https://<你的GCP函数URL>/webhook

触发测试事件后,查看GCP云函数日志,确认Payload正常、签名验证通过。

内容的提问来源于stack exchange,提问作者calebtjohnson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 11:05:02