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

如何修复GraphQL中「missing required param: name」错误

解决Stripe结账会话生成时的「Missing required param: name.」错误

问题背景

使用Apollo Studio Explorer执行以下GraphQL查询生成Stripe结账会话:

query checkout($products: [ID]!) {
  checkout(products: $products) {
    session
  }
}

查询变量:

{
 "products": ["642362420f73e51550e9ff65",
    "642362420f73e51550e9ff66"]
}

执行后收到Stripe返回的错误:

"errors": [
    {
      "message": "Missing required param: name.",
      "locations": [
        {
          "line": 2,
          "column": 3
        }
      ],
      "path": [
        "checkout"
      ],
      "extensions": {
        "code": "INTERNAL_SERVER_ERROR",
        "exception": {
          "type": "StripeInvalidRequestError",
          "raw": {
            "code": "parameter_missing",
            "message": "Missing required param: name.",
            "param": "name",
            "type": "invalid_request_error"
          }
        }
      }
    }
  ]

问题原因

该错误直接来自Stripe API,说明后端在调用Stripe创建结账会话时,没有为每个订单项提供必填的name参数。Stripe要求每个订单项必须关联产品名称——无论是关联Stripe后台已创建的产品(通过Price ID),还是在请求中动态指定产品名称。

解决步骤

  1. 检查后端Resolver逻辑
    找到处理checkout查询的后端代码,确认构建Stripe会话请求时,每个订单项都包含产品名称:

    • 若使用预创建的Stripe Price ID:确保数据库中存储的产品ID对应有效的Stripe Price ID,且该Price关联的Stripe产品已设置名称。
    • 若动态创建产品/价格:在line_items的price_data.product_data中明确添加name字段,值从数据库对应产品的名称字段获取。

    示例Node.js后端代码片段:

    const session = await stripe.checkout.sessions.create({
      payment_method_types: ['card'],
      line_items: products.map(product => ({
        price_data: {
          currency: 'usd',
          product_data: {
            name: product.name, // 确保此处product.name存在且不为空
          },
          unit_amount: product.price * 100,
        },
        quantity: 1,
      })),
      mode: 'payment',
      success_url: 'https://your-domain.com/success',
      cancel_url: 'https://your-domain.com/cancel',
    });
    
  2. 验证数据库产品数据
    确认传入的产品ID对应的数据库记录中,name字段存在且有有效值,且后端Resolver能正确读取该字段。

  3. 检查GraphQL Schema定义(可选)
    如果后端设计为需要前端传递产品名称,则需修改GraphQL查询的参数定义(比如将products从[ID]!改为包含名称的输入类型),但通常这类场景下前端仅需传递产品ID,后端负责从数据库获取名称。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 05:53:25