自定义菜单,很嗨皮!
https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141013
需要json传递数据!
微信提供三个接口,一个是创建菜单,一个是查看菜单,一个是删除菜单!
<?php
/**
* Created by PhpStorm.
* User: jiqing
* Date: 18-7-19
* Time: 下午9:15
*/
class MenuAction extends BaseAction
{
// 创建自定义菜单
const API_CREATE_MENU = \'https://api.weixin.qq.com/cgi-bin/menu/create\';
// 查询自定义菜单
const API_GET_MENU = \'https://api.weixin.qq.com/cgi-bin/menu/get\';
// 删除自定义菜单
const API_DELETE_MENU = \'https://api.weixin.qq.com/cgi-bin/menu/delete\';
public function create() {
$access_token = $this->_get_access_token();
$uri = self::API_CREATE_MENU.\'?access_token=\'.$access_token;
$params = [
\'button\' => [
[
\'type\'=>\'click\',
\'name\'=>\'今日歌曲\',
\'key\'=>\'V1001_TODAY_MUSIC\'
],
[
\'name\'=> \'菜单\',
\'sub_button\' => [
[
\'type\' => \'view\',
\'name\' => \'百度\',
\'url\' => \'http://www.baidu.com/\'
],
[
\'type\' => \'view\',
\'name\' => \'Bing\',
\'url\' => \'http://www.bing.com/\'
],
[
\'type\' => \'view\',
\'name\' => \'搜搜\',
\'url\' => \'http://www.soso.com/\'
],
]
]
]
];
$res_data = Http::doPostJson($uri, $params);
vendor("Log.Clog");
Clog::setLog($res_data);
$res_data = json_decode($res_data, true);
if ($res_data[\'errcode\'] != 0) {
$this->ajaxReturn($this->jsonError(10001, \'接口请求失败\'));
}
$this->ajaxReturn($this->jsonSuccess(1, \'成功\', $res_data));
}
public function get() {
$access_token = $this->_get_access_token();
$params = [
\'access_token\' => $access_token
];
$res_data = Http::newDoGet(self::API_GET_MENU, $params);
$res_data = json_decode($res_data, true);
if ($res_data[\'errcode\'] != 0) {
$this->ajaxReturn($this->jsonError(10001, \'接口请求失败\'));
}
$this->ajaxReturn($this->jsonSuccess(1, \'成功\', $res_data));
}
public function delete() {
$access_token = $this->_get_access_token();
$params = [
\'access_token\' => $access_token
];
$res_data = Http::newDoGet(self::API_DELETE_MENU, $params);
$res_data = json_decode($res_data, true);
if ($res_data[\'errcode\'] != 0) {
$this->ajaxReturn($this->jsonError(10001, \'接口请求失败\'));
}
$this->ajaxReturn($this->jsonSuccess(1, \'成功\', $res_data));
}
private function _get_access_token() {
vendor(\'Func.Http\');
if (preg_match(\'/(http:\/\/)|(https:\/\/)/i\', C(\'SELF_HOSTNAME\'))) {
$uri = C(\'SELF_HOSTNAME\').\'/AccessToken/get\';
} else {
$uri = \'http://\'.C(\'SELF_HOSTNAME\').\'/AccessToken/get\';
}
// 获取access_token
$access_token_result = Http::doGet($uri);
$access_token_result = json_decode($access_token_result, true);
$access_token = $access_token_result[\'data\'][\'access_token\'];
return $access_token;
}
}
创建的时候会失败!
// 通过POST方式发送json数据
static public function doPostJson($url = \'\', $param = [] ,$contentType = \'json\') {
$ch = curl_init();
// 请求地址
curl_setopt($ch, CURLOPT_URL, $url);
// 请求参数类型
$param = $contentType == \'json\' ? urldecode(json_encode($param,JSON_UNESCAPED_UNICODE)) : http_build_query($param);
// 关闭https验证
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
// post提交
if($param){
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $param);
}
// 返回的数据是否自动显示
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 执行并接收响应结果
$output = curl_exec($ch);
// 关闭curl
curl_close($ch);
return $output !== false ? $output : false;
}
这里的
$param = $contentType == \'json\' ? urldecode(json_encode($param,JSON_UNESCAPED_UNICODE)) : http_build_query($param);
是关键!!!
很有意思!!!
可以结合自动回复来实现更加复杂的功能!!!
菜单还可以跳转到小程序!!!
模板消息也可以跳转到小程序!!!
再来一个小案例,
$params = [
\'button\' => [
[
\'name\'=> \'从"新"出发\',
\'sub_button\' => [
[
\'type\' => \'view\',
\'name\' => \'甜蜜新品\',
\'url\' => \'http://www.breadtalk.com.cn/\'
],
[
\'type\' => \'view\',
\'name\' => \'送!月饼券\',
\'url\' => \'http://www.breadtalk.com.cn/\'
],
[
\'type\' => \'view\',
\'name\' => \'新语之旅\',
\'url\' => \'http://www.breadtalk.com.cn/\'
]
]
],
[
\'type\'=>\'miniprogram\',
\'name\'=>\'甜蜜商城\',
\'url\'=>\'http://mp.weixin.qq.com\',
\'appid\'=>\'xxx\',
\'pagepath\'=>\'pages/index/index\'
],
[
\'name\'=> \'我的新语\',
\'sub_button\' => [
[
\'type\'=>\'miniprogram\',
\'name\'=>\'我的订单\',
\'url\'=>\'http://mp.weixin.qq.com\',
\'appid\'=>\'xxx\',
\'pagepath\'=>\'pages/order/index\'
],
[
\'type\'=>\'miniprogram\',
\'name\'=>\'优惠券\',
\'url\'=>\'http://mp.weixin.qq.com\',
\'appid\'=>\'xxx\',
\'pagepath\'=>\'pages/coupon/my_coupon\'
],
[
\'type\'=>\'miniprogram\',
\'name\'=>\'会员充值\',
\'url\'=>\'http://mp.weixin.qq.com\',
\'appid\'=>\'xxx\',
\'pagepath\'=>\'pages/balance/add_balance\'
]
]
]
]
];