自定义菜单,很嗨皮!
需要json传递数据!
微信提供三个接口,一个是创建菜单,一个是查看菜单,一个是删除菜单!
_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' ] ] ] ]];