PHP原生微信公众号开发之自定义菜单网站源码的实现分享
author:一佰互联 2018-07-11   click:2054

打算开发微网站自定义菜单,搜索网上都是一些写死的例子,作为多用户网站管理系统“巅云建站系统”就需要根据不同用户设置生成不同的公众号菜单,包括一二级菜单,微网站开发中自定义菜单实现其实很简单,我们把我在我司“巅云智能建站系统”开发中的实现原理分享出来,希望对新手小白开发自定义菜单有帮助。由于是多用户系统,当然比普通开发要多出获取用户的步骤。当然如果你也是网站建设从业者可以购买我司的建站系统平台版,可二次开发。详情登陆:http://www.yinxi.net/design/#websites-taocan 1880元起(单用户),多用户版(8000元,自助建站平台)<?php//前三行为巅云专用引入基础配置代码session_start();require_once("../common/common.php");$web=get_web();//获取当前网站用户名//数据库连接代码$con=mysql_connect(DB_SERVER,DB_LOGIN,DB_PW) or die("Unable to connect to the MySQL!");$db = mysql_select_db(DB_NAME,$con);//据不同网站读取数据库微信配置。$sql = "select * from wx_config where  user='$web' ";$rs  = mysql_query($sql);while($row_p=mysql_fetch_assoc($rs)){$appid=$row_p['appid'];$appsecret= $row_p['appsecret']; }////////////判断是不是网址,后边组装菜单JOSON 数据时用,如果是"key":"关键词" 否则 "url":"网址"function check_url($url){    if(!preg_match('/http:\/\/[\w.]+[\w\/]*[\w.]*\??[\w=&\+\%]*/is',$url)){        return false;    }    return true;} ///////////引入没有设置par_type(父级ID)限制三个一级菜单$sqlmenu = "select * from wx_menu where par_type='' and  user='$web' limit 3";$rsmenu  = mysql_query($sqlmenu);$rowNum = mysql_num_rows($rsmenu);//实际数量 $jsonmenu  = '{"button":[';//菜单头//两个记数器,一二级while循环自增,当循环次数等于实际数量时去除“,”号,限如果分别是一级菜单和每个一级菜单最后一个时不需要","号分隔了。 $counter = 0;  $counter2 = 0;//循环一级菜单while($row_menu=mysql_fetch_assoc($rsmenu)){//while$counter = $counter + 1;//查询是否有二级菜单$sqlmenu2 = "select * from wx_menu where par_type={$row_menu['id']} and  user='$web' limit 5";$rsmenu2  = mysql_query($sqlmenu2);$rowNum2 = mysql_num_rows($rsmenu2);$jsonmenu.='{';$jsonmenu.='"name":"'.$row_menu['name'].'",';if(!$rowNum2){if($row_menu['type']){$jsonmenu.='"type":"'.$row_menu['type'].'",';}if($row_menu['Key_url']){	$isurl=check_url($row_menu['Key_url']);if($isurl){   $keyt="url";}else{   $keyt='key';}if($rowNum2){$jsonmenu.='"'.$keyt.'":"'.$row_menu['Key_url'].'",';}else{$jsonmenu.='"'.$keyt.'":"'.$row_menu['Key_url'].'"';}}}if($rowNum2){$jsonmenu.='"sub_button":[';}while($row_menu2=mysql_fetch_assoc($rsmenu2)){//while$counter2 = $counter2 + 1;$jsonmenu.='{';$jsonmenu.='"name":"'.$row_menu2['name'].'",';if($row_menu2['type']){$jsonmenu.='"type":"'.$row_menu2['type'].'",';}if($row_menu2['Key_url']){	$isurl2=check_url($row_menu2['Key_url']);if($isurl2){   $keyt2="url";}else{   $keyt2='key';}$jsonmenu.='"'.$keyt2.'":"'.$row_menu2['Key_url'].'"';} if ($counter2 < $rowNum2){ $jsonmenu.='},'; } else{$jsonmenu.='}'; }}//whileoverif($rowNum2){$jsonmenu.=']';} if ($counter < $rowNum){ $jsonmenu.='},'; } else{$jsonmenu.='}'; }}//whileover $jsonmenu.= ']}';//menu createecho $jsonmenu;//创建菜单$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret=$appsecret"; $output = https_request($url); $jsoninfo = json_decode($output,true); $access_token=$jsoninfo["access_token"]; /*$jsonmenu = '{   "button":[   {    "name":"学校系统",    "sub_button":[     {      "type":"click",      "name":"课程表",      "key":"课程表"    },     {      "type":"click",      "name":"个人信息",      "key":"个人信息"    },     {      "type":"click",      "name":"平时成绩",      "key":"平时成绩"    },     {      "type":"click",      "name":"奖惩记录",      "key":"奖惩记录"    }    ]   },   {    "name":"技术分享",    "sub_button":[     {      "type":"click",      "name":"移动WEB开发",      "key":"移动WEB开发"    },     {      "type":"click",      "name":"J2EE框架",      "key":"J2EE框架"    },     {      "type":"click",      "name":"Android开发",      "key":"Android开发"    },     {      "type":"click",      "name":"PHP框架",      "key":"PHP框架"    }    ]   },{    "name":"技术支持",    "sub_button":[     {      "type":"click",      "name":"在线客服",      "key":"在线客服"    },     {      "type":"click",      "name":"技术分享",      "key":"技术分享"    },     {      "type":"view",      "name":"天气预报",      "url":"http://m.hao123.com/a/tianqi"    }    ]   }  ]  }';   */ //创建菜单实现  $url = 'https://api.weixin.qq.com/cgi-bin/menu/create?access_token='.$access_token;  $result = https_request($url,$jsonmenu);  var_dump($result);  function https_request($url,$data = null){   $curl = curl_init();   curl_setopt($curl,CURLOPT_URL,$url);   curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,0);   curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,0);   if(!empty($data)){    curl_setopt($curl,CURLOPT_POST,1);    curl_setopt($curl,CURLOPT_POSTFIELDS,$data);   }   curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);   $output = curl_exec($curl);   curl_close($curl);   return $output;  }?>