在使用微信小程序調用模板消息時,感覺自己的數據格式應該沒錯,但一直提示 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);
這樣格式提交的參數就可以正常通過消息模板驗證了