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

如何在WireMock响应模板中获取表单请求字段的最后n位字符?

解决WireMock响应中提取请求卡号最后四位的问题

针对你的需求,在WireMock 2.35.0版本中,可以通过response-template转换器结合字符串截取函数实现提取请求体card[number]的最后四位并赋值给响应的last4字段,具体修改如下:

关键修改点

把响应体中固定的"last4": "4242"替换为模板表达式,步骤如下:

  1. 用formData解析URL编码的请求体为表单对象
  2. 用lookup获取card[number]的值
  3. 用substring(-4)截取该字符串的最后四位(负数索引表示从末尾开始计数)

另外注意你原来的响应体JSON存在语法错误:{\"last4\": \"4242\",多了一个左大括号,需要删除,否则会导致JSON解析失败。

修正后的完整Stub

{
   "id":"86c2bb75-6de5-48aa-9c14-3cfc2483d12b",
   "name":"v1_payment_methods",
   "request":{
      "url":"/stripe/v1/payment_methods",
      "method":"POST",
      "bodyPatterns":[
         {
            "equalTo":"type=card&card[cvc]=890&card[number]=4242424242424242&card[exp_month]=1&card[exp_year]=2043",
            "caseInsensitive":false
         }
      ]
   },
   "response":{
      "status":200,
      "body":"{\n  \"id\": \"pm_{{randomValue length=24 type='ALPHANUMERIC'}}\",\n  \"object\": \"payment_method\",\n  \"billing_details\": {\n    \"address\": {\n      \"city\": null,\n      \"country\": null,\n      \"line1\": null,\n      \"line2\": null,\n      \"postal_code\": null,\n      \"state\": null\n    },\n    \"email\": null,\n    \"name\": null,\n    \"phone\": null\n  },\n  \"card\": {\n    \"brand\": \"visa\",\n    \"checks\": {\n      \"address_line1_check\": null,\n      \"address_postal_code_check\": null,\n      \"cvc_check\": \"unchecked\"\n    },\n    \"country\": \"US\",\n    \"exp_month\": {{formData request.body 'form' urlDecode=true}}{{lookup form 'card[exp_month]'}},\n    \"exp_year\": {{formData request.body 'form' urlDecode=true}}{{lookup form 'card[exp_year]'}},\n    \"fingerprint\": \"{{randomValue length=16 type='ALPHANUMERIC'}}\",\n    \"funding\": \"credit\",\n    \"generated_from\": null,\n    \"last4\": \"{{formData request.body 'form' urlDecode=true}}{{lookup form 'card[number]' | substring -4}}\",\n    \"networks\": {\n      \"available\": [\n        \"visa\"\n      ],\n      \"preferred\": null\n    },\n    \"three_d_secure_usage\": {\n      \"supported\": true\n    },\n    \"wallet\": null\n  },\n  \"created\": {{now format='unix'}},\n  \"customer\": null,\n  \"livemode\": false,\n  \"metadata\": {},\n  \"type\": \"{{formData request.body 'form' urlDecode=true}}{{lookup form 'type'}}\"\n}",
      "transformers":[
         "response-template"
      ]
   },
   "uuid":"86c2bb75-6de5-48aa-9c14-3cfc2483d12b",
   "persistent":true,
   "insertionIndex":7
}

说明

  • {{formData request.body 'form' urlDecode=true}}:解析URL编码的请求体为名为form的上下文对象
  • {{lookup form 'card[number]'}}:从form对象中取出card[number]的值
  • | substring -4:通过管道符调用substring函数,截取字符串的最后四位(WireMock模板函数支持这种管道式调用)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 05:37:07