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

Terraform Mastercard/restapi提供程序如何配置json_data参数传参

解决方法

这个报错是因为你对接的接口不接受裸JSON格式的请求体,强制要求所有业务JSON内容必须放在名为json_data的请求参数中传递。你当前配置直接把业务JSON作为整个请求体发送,还全局设置了Content-Type: application/json,接口读不到json_data参数自然会抛错。

按以下两点调整配置即可:

  • 替换provider块里的Content-Type请求头,POST表单参数需要使用application/x-www-form-urlencoded类型,不要用JSON类型头
  • 调整restapi_object资源的data字段,将原本的业务JSON作为json_data参数的值传入,直接用Terraform内置的jsonencode和urlencode函数处理内容即可,不用手动转义引号、特殊字符,不容易出语法错。

修改后的可参考配置如下:

terraform {
  required_providers {
    restapi = {
      source  = "Mastercard/restapi"
      version = "1.17.0"
    }
  }
}

provider "restapi" {
  uri                  = var.uri
  debug                = true
  write_returns_object = true
  username             = var.auth_user
  password             = var.auth_passwd

  headers = {
    "Content-Type" = "application/x-www-form-urlencoded"
  }
  create_method = "POST"
}

resource "restapi_object" "post_request" {
  path = "/webservices/rest.php?version=1.2"
  data = "json_data=${urlencode(jsonencode({
    operation = "core/create"
    # 在此处补全你之前省略的其他业务JSON字段,按HCL键值对格式书写即可,函数会自动完成序列化转义
  }))}"
}

补充说明:如果你对接的接口要求json_data放在URL查询参数里而非POST表单中,只需要把Content-Type改回application/json,再把json_data=xxx的参数串拼接到path的查询部分即可。市面上绝大多数用rest.php做入口的老式接口都是要求POST表单传该参数,上面的配置可以直接适配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 21:27:46