function createMenu(){
$obj=ModelFactory::M('MenuModel');
$data=$obj->getAllMenu();
foreach ($data as $key=>$value){
$data=array(
"button"=>array(
"type"=>$value['type'],
"name"=>$value['name'],
"url"=>$value['url']
)
);
}
//$data='{"button":[{"type":"view","name":"今日歌曲","url":"http:\/\/weiweiwei.free.ngrok.cc\/bui-bootstrap\/bui-bootstrap\/music\/123.mp3"}]}';
$data=json_encode($data,JSON_UNESCAPED_UNICODE);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".ACCESS_TOKEN);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$tmpInfo = curl_exec($ch);
if (curl_errno($ch)) {
return curl_error($ch);
}
else{
curl_close($ch);
return $tmpInfo;
}
}
通过数据库储存菜单,从数据库获取的数据是一个二维数组$data=$obj->getAllMenu();,为了得到json包,先放到数组中。最后通过json_encode($data,JSON_UNESCAPED_UNICODE)得到json包(JSON_UNESCAPED_UNICODE可以解决中文字符问题),结果出现errcode:40016;
正确代码如下;
foreach ($data as $key=>$value){
$data=array(
"button"=>[array(
"type"=>$value['type'],
"name"=>$value['name'],
"url"=>$value['url']
)]
);
}
虽然使用了json_encode()函数,但得到的json类型和使用的不一样,所以需要构造;