文章内容

PHP原生微信公众号开发之自定义菜单网站源码的实现分享
作者:admin | 时间:2018-07-11 09:53:54
打算开发微网站自定义菜单,搜索网上都是一些写死的例子,作为多用户网站管理系统“巅云建站系统”就需要根据不同用户设置生成不同的公众号菜单,包括一二级菜单,微网站开发中自定义菜单实现其实很简单,我们把我在我司“巅云智能建站系统”开发中的实现原理分享出来,希望对新手小白开发自定义菜单有帮助。

由于是多用户系统,当然比普通开发要多出获取用户的步骤。当然如果你也是网站建设从业者可以购买我司的建站系统平台版,可二次开发。
详情登陆: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.='}';
 }
}//whileover
if($rowNum2){
$jsonmenu.=']';
}
 if ($counter < $rowNum){
 $jsonmenu.='},';
 }
 else{
$jsonmenu.='}';
 }
}//whileover
 $jsonmenu.= ']}';
//menu create
echo $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; 
 }
?>