如何修复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),还是在请求中动态指定产品名称。
解决步骤
检查后端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', });验证数据库产品数据
确认传入的产品ID对应的数据库记录中,name字段存在且有有效值,且后端Resolver能正确读取该字段。检查GraphQL Schema定义(可选)
如果后端设计为需要前端传递产品名称,则需修改GraphQL查询的参数定义(比如将products从[ID]!改为包含名称的输入类型),但通常这类场景下前端仅需传递产品ID,后端负责从数据库获取名称。
内容的提问来源于stack exchange,提问作者Guadalupe Rocha
相关产品推荐
相关产品推荐

