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

WebMock返回Hash语法问题:Rails控制器Stub响应体配置报错

解决WebMock Stub Stripe PaymentIntent.create的返回体配置问题

正确配置步骤

  • 构造符合Stripe格式的Ruby哈希
    把Stripe返回的null对应成Ruby的nil,比如目标响应的哈希示例:

    stub_response = {
      id: "pi_123456789",
      client_secret: "pi_123456789_secret_abcdef",
      status: "succeeded",
      some_null_field: nil # 对应Stripe返回的null
    }
    
  • 转JSON字符串并设置响应头
    WebMock要求返回体为字符串,同时必须指定Content-Type为application/json,否则Stripe SDK无法正确解析响应,会出现“Stub无返回”的假象。完整Stub代码如下:

    stub_request(:post, "https://api.stripe.com/v1/payment_intents")
      .with(
        headers: {
          "Authorization" => "Bearer #{ENV['STRIPE_SECRET_KEY']}",
          "Content-Type" => "application/x-www-form-urlencoded"
        }
      )
      .to_return(
        status: 200,
        body: stub_response.to_json,
        headers: { "Content-Type" => "application/json" }
      )
    

常见问题排查

  • 直接用哈希当返回体:WebMock不支持,必须转成JSON字符串
  • 转JSON但未设置Content-Type:Stripe SDK无法解析响应,导致控制器无法获取正确的client_secret,看似Stub未生效
  • 手动写null:Ruby会将其识别为变量,触发NameError,需用Ruby的nil替代,to_json会自动转为JSON的null

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 08:39:51