热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

php实现微信公众平台账号自定义菜单类

这篇文章主要介绍了php实现微信公众平台账号自定义菜单类的方法,涉及针对微信接口API的二次开发,是非常实用的技巧,需要的朋友可以参考下

这篇文章主要介绍了php实现微信公众平台账号自定义菜单类的方法,涉及针对微信接口API的二次开发,是非常实用的技巧,需要的朋友可以参考下

本文实例讲述了php实现微信公众平台账号自定义菜单类的方法。分享给大家供大家参考。具体分析如下:

微信公众平台服务号可申请自定义菜单了,其它的号暂时不支持自定义菜单了,这个不但可以使用api来操作,还可以直接在后台定义菜单与参数。

申请自定义菜单

服务号可以申请自定义菜单,使用QQ登录的公众号,可以升级为邮箱登录,使用邮箱登录的公众号,可以修改登录邮箱,群发消息可以同步到腾讯微博.

微信公众平台账号api程序

代码如下:

<&#63;php
//define your token
define("TOKEN", "chenxiang");//改成自己的TOKEN
define('APP_ID', '');//改成自己的APPID
define('APP_SECRET', '');//改成自己的APPSECRET

$wechatObj = new wechatCallbackapiTest(APP_ID,APP_SECRET);
$wechatObj->Run();

class wechatCallbackapiTest
{
private $fromUsername;
private $toUsername;
private $times;
private $keyword;
private $app_id;
private $app_secret;

public function __construct($appid,$appsecret)
{
# code...
$this->app_id = $appid;
$this->app_secret = $appsecret;
}
public function valid()
{
$echoStr = $_GET["echostr"];
if($this->checkSignature()){
echo $echoStr;
exit;
}
}
/**
* 运行程序
* @param string $value [description]
*/
public function Run()
{
$this->responseMsg();
$arr[]= "您好,这是自动回复,我现在不在,有事请留言,我会尽快回复你的^_^";
echo $this->make_xml("text",$arr);
}
public function responseMsg()
{
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];//返回回复数据
if (!emptyempty($postStr)){
$access_token = $this->get_access_token();//获取access_token
$this->createmenu($access_token);//创建菜单
//$this->delmenu($access_token);//删除菜单
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
$this->fromUsername = $postObj->FromUserName;//发送消息方ID
$this->toUsername = $postObj->ToUserName;//接收消息方ID
$this->keyword = trim($postObj->Content);//用户发送的消息
$this->times = time();//发送时间
$MsgType = $postObj->MsgType;//消息类型
if($MsgType=='event'){
$MsgEvent = $postObj->Event;//获取事件类型
if ($MsgEvent=='subscribe') {//订阅事件
$arr[] = "你好,我是xxx,现在我们是好友咯![愉快][玫瑰]";
echo $this->make_xml("text",$arr);
exit;
}elseif ($MsgEvent=='CLICK') {//点击事件
$EventKey = $postObj->EventKey;//菜单的自定义的key值,,可以根据此值判断用户点击了什么内容,从而推送不同信息
$arr[] = $EventKey;
echo $this->make_xml("text",$arr);
exit;
}
}
}else {
echo "this a file for weixin API!";
exit;
}
}
/**
* 获取access_token
*/
private function get_access_token()
{
$url = "https://api.weixin.qq.com/cgi-bin/token&#63;grant_type=client_credential&appid=".$this->app_id."&secret=".$this->app_secret;
$data = json_decode(file_get_contents($url),true);
if($data['access_token']){
return $data['access_token'];
}else{
return "获取access_token错误";
}
}
/**
* 创建菜单
* @param $access_token 已获取的ACCESS_TOKEN
*/
public function createmenu($access_token)
{
$url = "https://api.weixin.qq.com/cgi-bin/menu/create&#63;access_token=".$access_token;
$arr = array(
'button' =>array(
array(
'name'=>urlencode("生活查询"),
'sub_button'=>array(
array(
'name'=>urlencode("天气查询"),
'type'=>'click',
'key'=>'VCX_WEATHER'
),
array(
'name'=>urlencode("身份证查询"),
'type'=>'click',
'key'=>'VCX_IDENT'
)
)
),
array(
'name'=>urlencode("轻松娱乐"),
'sub_button'=>array(
array(
'name'=>urlencode("刮刮乐"),
'type'=>'click',
'key'=>'VCX_GUAHAPPY'
),
array(
'name'=>urlencode("幸运大转盘"),
'type'=>'click',
'key'=>'VCX_LUCKPAN'
)
)
),
array(
'name'=>urlencode("我的信息"),
'sub_button'=>array(
array(
'name'=>urlencode("关于我"),
'type'=>'click',
'key'=>'VCX_ABOUTME'
),
array(
'name'=>urlencode("工作信息"),
'type'=>'click',
'key'=>'VCX_JOBINFORMATION'
)
)
)
)
);
$jsOndata= urldecode(json_encode($arr));
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_POSTFIELDS,$jsondata);
curl_exec($ch);
curl_close($ch);
}
/**
* 查询菜单
* @param $access_token 已获取的ACCESS_TOKEN
*/

private function getmenu($access_token)
{
# code...
$url = "https://api.weixin.qq.com/cgi-bin/menu/get&#63;access_token=".$access_token;
$data = file_get_contents($url);
return $data;
}
/**
* 删除菜单
* @param $access_token 已获取的ACCESS_TOKEN
*/

private function delmenu($access_token)
{
# code...
$url = "https://api.weixin.qq.com/cgi-bin/menu/delete&#63;access_token=".$access_token;
$data = json_decode(file_get_contents($url),true);
if ($data['errcode']==0) {
# code...
return true;
}else{
return false;
}
}

/**
*@param type: text 文本类型, news 图文类型
*@param value_arr array(内容),array(ID)
*@param o_arr array(array(标题,介绍,图片,超链接),...小于10条),array(条数,ID)
*/

private function make_xml($type,$value_arr,$o_arr=array(0)){
//=================xml header============
$con="
fromUsername}]]>
toUsername}]]>
{$this->times}
";

//=================type cOntent============
switch($type){

case "text" :
$con.="
{$o_arr}";
break;

case "news" :
$con.="{$o_arr[0]}
";
foreach($value_arr as $id=>$v){
if($id>=$o_arr[0]) break; else null; //判断数组数不超过设置数
$con.="




";
}
$con.="

{$o_arr[1]}";
break;
} //end switch
//=================end return============
$con.="
";
return $con;
}

private function checkSignature()
{
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nOnce= $_GET["nonce"];

$token = TOKEN;
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );

if( $tmpStr == $signature ){
return true;
}else{
return false;
}
}
}
&#63;>

希望本文所述对大家基于PHP的微信开发有所帮助。

推荐阅读
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 本文详细介绍了PHP中与URL处理相关的三个函数:http_build_query、parse_str和查询字符串的解析。通过示例和语法说明,讲解了这些函数的使用方法和作用,帮助读者更好地理解和应用。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • 企业数据应用挑战及元数据管理的重要性
    本文主要介绍了企业在日常经营管理过程中面临的数据应用挑战,包括数据找不到、数据读不懂、数据不可信等问题。针对这些挑战,通过元数据管理可以实现数据的可见、可懂、可用,帮助业务快速获取所需数据。文章提出了“灵魂”三问——元数据是什么、有什么用、又该怎么管,强调了元数据管理在企业数据治理中的基础和前提作用。 ... [详细]
  • 小程序自动授权和手动接入的方式及操作步骤
    本文介绍了小程序支持的两种接入方式:自动授权和手动接入,并详细说明了它们的操作步骤。同时还介绍了如何在两种方式之间切换,以及手动接入后如何下载代码包和提交审核。 ... [详细]
  • 华为鸿蒙系统官网2.0报名方法及适用设备
    本文介绍了华为鸿蒙系统官网2.0报名的适用设备、报名方法以及三种方式,包括在应用商店下载开发者联盟app、在官网中进行报名、在微信公众号中申请体验HarmonyOS 2.0 手机开发者Beta版本。同时提醒错过测试机会的用户可以等待后续的正式版发布。 ... [详细]
author-avatar
人丁红星
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有