微信小程序 调用模板消息提示 data format error hint


在使用微信小程序调用模板消息时,感觉自己的数据格式应该没错,但一直提示 data format error hint (数据格式错误)

然后仔细看了下 官方手册 ,找到 请求示例

{
  "touser": "OPENID",
  "template_id": "TEMPLATE_ID",
  "page": "index",
  "form_id": "FORMID",
  "data": {
    "keyword1": {
      "value": "339208499"
    },
    "keyword2": {
      "value": "2015年01月05日 12:30"
    },
    "keyword3": {
      "value": "腾讯微信总部"
    },
    "keyword4": {
      "value": "广州市海珠区新港中路397号"
    }
  },
  "emphasis_keyword": "keyword1.DATA"
}

再看看自己写的请求数据跟代码发现了几个问题

一、代码提交格式

官方给的示例中,提交的代码格式是 json 格式的,而我却用了 http_build_query 函数格式了数据,所以提交 post 前要把代码格式改成 json 类型

$data = [
  'touser'        => $openId,
  'template_id'   => $tempId,
  'page'          => '/pages/index/index?param=XXX',
  'form_id'       => $formId,
  'data'          => [
    'keyword1'  => $voucher['items']['name'],
    'keyword2'  => $this->code,
    'keyword3'  => 1,
    'keyword4'  => date('Y年m月d日 H:i:s', $now),
  ]
];

$data = json_encode($data, JSON_UNESCAPED_UNICODE); // json_encode 第二个参数需要 php5.4 以后的版本

转完格式后再次提交数据,发现小程序还是报错 data format error hint,打印出上面的 $data 后比较官方示例,发现了第二个问题

二、传输数据字段中的 data 是二维数组

官方的示例节选

{
  "data": {
    "keyword1": {
      "value": "339208499"
    }
}

data 下的 keyword1 字段并不是直接复制,而是一个一维数组,所以修改数据

$data = [
  'touser'        => $openId,
  'template_id'   => $tempId,
  'page'          => '/pages/index/index?param=XXX',
  'form_id'       => $formId,
  'data'          => [
    'keyword1'  => ['value' => $voucher['items']['name']],
    'keyword2'  => ['value' => $this->code],
    'keyword3'  => ['value' => 1],
    'keyword4'  => ['value' => date('Y年m月d日 H:i:s', $now)],
  ]
];

$data = json_encode($data, JSON_UNESCAPED_UNICODE);

这样格式提交的参数就可以正常通过消息模板验证了


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM