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

Stripe Webhook未返回全部元数据问题求助

问题

使用PHP创建Stripe Checkout Session时,我向metadata参数传入了10组键值对,代码如下:

$checkout_session = \Stripe\Checkout\Session::create([
    'payment_method_types' => ['card'],
    'client_reference_id' => $accountnumber,
    'mode' => 'payment',
    'line_items' => [[
      'price_data' => [
        'currency' => $currencycode,
        'product_data' => [
          'name' => 'Invoice Total',
        ],
        'unit_amount' => $invoicetotal,
      ],
      'quantity' => 1,
    ]],
    'payment_intent_data' => [
      'application_fee_amount' => $timesavrfee,
      'receipt_email' => $payeremail
    ],
    'success_url' => $successurl.'?session_id={CHECKOUT_SESSION_ID}&cid='.$companyid,
    'cancel_url' => $cancelurl.'?session_id={CHECKOUT_SESSION_ID}&cid='.$companyid,
    'metadata' => ['familyid'=>$familyid,
                   'transactionreference'=>$transactionreference,
                   'companyid'=>$companyid,
                   'paymenttype'=>$paymenttype,
                   'payer'=>$primarypayer,
                   'invoicedate'=>$invoicedate,
                   'feecomment'=>$feecomment,
                   'feeamount'=>$feeamount,
                   'processingfeeschargeitem'=>$processingfeeschargeitem,
                   'passonprocessingfees'=>$passonprocessingfees]
  ],['stripe_account' => $accountid]);

我已通过日志确认所有参数均有值,但Stripe返回的checkout.session.completed事件Webhook仅包含其中6个元数据,另外4个完全不存在(并非为空)。查看Stripe仪表盘的Webhook历史,返回的metadata如下:

"metadata": {
    "payer": "M",
    "companyid": "2142",
    "invoicedate": "2024-01-26 00:00:00",
    "paymenttype": "ONL",
    "transactionreference": "1157",
    "familyid": "29764010"
  },

缺失的4个元数据为:

  • feecomment
  • feeamount
  • processingfeeschargeitem
  • passonprocessingfees

根据Stripe文档,元数据最多支持50个键(键名最长40字符,值最长500字符),我确认未违反该限制。请问为何仅能收到6个元数据,另外4个无法返回?

可能的原因与解决方案
  1. Connect场景下的元数据层级问题
    从代码里的stripe_account参数能看出你在使用Connect模式,根节点的metadata属于平台账户,而checkout.session.completed事件默认返回的是关联交易(Payment Intent)的元数据。你可以尝试把缺失的4个字段移到payment_intent_data下的metadata中,确保数据关联到实际交易:

    'payment_intent_data' => [
      'application_fee_amount' => $timesavrfee,
      'receipt_email' => $payeremail,
      'metadata' => [
        'feecomment'=>$feecomment,
        'feeamount'=>$feeamount,
        'processingfeeschargeitem'=>$processingfeeschargeitem,
        'passonprocessingfees'=>$passonprocessingfees
      ]
    ],
    
  2. Webhook事件的精简数据限制
    Stripe Webhook默认返回的是精简版对象,部分字段会被过滤。你可以登录Stripe仪表盘,找到对应的Webhook端点,把该事件的「数据包含」选项从「精简」改为「完整」,这样就能获取到全部元数据字段。

  3. 隐性格式问题导致字段丢弃
    虽然你确认键名长度合规,但如果缺失字段的键名或值包含换行、制表符等非打印字符,可能会被Stripe自动丢弃。检查这些字段的实际值,替换为纯文本后再测试。

  4. SDK版本兼容性bug
    若你使用的Stripe PHP SDK版本较旧,可能存在metadata字段处理的漏洞。尝试更新SDK到最新稳定版,再重新发起创建Session的请求测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 23:00:30