微信自定义菜单的创建/查询/取消php示例代码


Posted in PHP onAugust 05, 2016

微信公众帐号 服务号可以使用 自定义菜单功能。之前在创建菜单时一直失败,原因是$data 格式一直没有传正确,后来终于解决了。这里先记录下 顺便封装了一个类,便于自定义菜单的管理。此类仅仅是自定义菜单的管理类,并未涉及微信自定义回复和菜单事件的代码。

代码如下

/**
 * @author LSH 2013-09-06 
 * 
 * 微信自定义菜单的创建|查询|取消
 */
class weixinMenu {

 public static $appid = null;  // 申请得到的appid

 public static $secret = null; // 申请得到的secret 

 public static $getToken = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential";

 public static $createMenu = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=";

 public static $selMenu ="https://api.weixin.qq.com/cgi-bin/menu/get?access_token=";

 public static $delMenu = "https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=";

 public static $opt = array(
  CURLOPT_SSL_VERIFYPEER => false,
  CURLOPT_SSL_VERIFYHOST => false,
  CURLOPT_USERAGENT => 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)',
  CURLOPT_FOLLOWLOCATION => 1,
  CURLOPT_AUTOREFERER =>1,
  CURLOPT_RETURNTRANSFER => true
  );

 public $ACCESS_TOKEN = null;

 /**
 * 创建菜单
 */
 public function create()
 {

 $this->token();

 $strMeau = '{
   "button":[
   {
      "type":"click",
      "name":"菜单左",
      "key":"V_MENU_LEFT"
    },
    {
      "type":"click",
      "name":"菜单中",
      "key":"V_MENU_CENTER"
    },
    {
   "type":"click",
   "name":"菜单右",
   "key":"V_MENU_RIGHT"
  }]
 }';

 $ret = $this->HttpPost(self::$createMenu.$this->ACCESS_TOKEN,self::$opt, $strMeau);

 echo $ret;
 }

 /**
 * 查询菜单
 */
 public function sel()
 {
 $this->token();

 $ret = $this->HttpGet(self::$selMenu.$this->ACCESS_TOKEN,self::$opt);

 echo $ret;
 }

 /**
 * 取消菜单
 */
 public function del()
 {
 $this->token();

 $ret = $this->HttpGet(self::$delMenu.$this->ACCESS_TOKEN,self::$opt);

 echo $ret;
 }

 /**
 * 获取token
 */
 private function token()
 {
 $tokenUrl = self::$getToken."&appid=".self::$appid."&secret=".self::$secret;
 $ret = $this->HttpGet($tokenUrl,self::$opt);

 $arrRet = json_decode($ret,true);

 $this->ACCESS_TOKEN = $arrRet['access_token'];
 }

 /**
 * POST 模式
 * @param string $url    post 的地址
 * @param array $opt    post 选项
 * @param array $post_data post 数据
 * @return mixed
 */
 private function HttpPost($url, $opt = array(),$post_data) 
 {
 $setopt = array(
  CURLOPT_HEADER => 0,            
  CURLOPT_RETURNTRANSFER => 1,   
  CURLOPT_URL => $url,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POST => 1,             
  CURLOPT_POSTFIELDS => $post_data, 
 );

 if ( !empty($opt) ) {
  foreach ($opt as $key => $value) {
  $setopt[$key] = $value;
  }
 }

 $curl = curl_init($url);

 foreach ($setopt as $key => $value) {
  curl_setopt($curl, $key, $value );
 }

 $responseText = curl_exec($curl);

 curl_close($curl);

 return $responseText;
 }

 /**
 * GET 方式
 * @param stinrg $url GET 的url
 * @param array $opt GET 的选项
 * @return mixed 
 */
 private function HttpGet($url, $opt = array()) 
 {
 $setopt = array(
  CURLOPT_HEADER => 0,
  CURLOPT_RETURNTRANSFER => 1,
  CURLOPT_URL => $url
 );

 if ( !empty($opt) ) {
  foreach ($opt as $key => $value) {
  $setopt[$key] = $value;
  }
 }

 $curl = curl_init($url);

 foreach ($setopt as $key => $value) {
  curl_setopt($curl, $key, $value );
 }

 $responseText = curl_exec($curl);

 curl_close($curl);

 return $responseText;
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
解决phpmyadmin中文乱码问题。。。
Jan 18 PHP
php PDO中文乱码解决办法
Jul 20 PHP
PHP 基本语法格式
Dec 15 PHP
php学习之流程控制实现代码
Jun 09 PHP
php.ini-dist 和 php.ini-recommended 的区别介绍(方便开发与安全的朋友)
Jul 01 PHP
ThinkPHP的L方法使用简介
Jun 18 PHP
PHP date()函数警告: It is not safe to rely on the system解决方法
Aug 20 PHP
PHP register_shutdown_function()函数的使用示例
Jun 23 PHP
PHP判断字符串长度的两种方法很实用
Sep 22 PHP
PHP实现深度优先搜索算法(DFS,Depth First Search)详解
Sep 16 PHP
PHP堆栈调试操作简单示例
Jun 15 PHP
安装docker和docker-compose实例详解
Jul 30 PHP
Thinkphp微信公众号支付接口
Aug 04 #PHP
浅析Laravel5中队列的配置及使用
Aug 04 #PHP
PHP中如何判断exec函数执行成功?
Aug 04 #PHP
详解Laravel视图间共享数据与视图Composer
Aug 04 #PHP
yii的入口文件index.php中为什么会有这两句
Aug 04 #PHP
Laravel最佳分割路由文件(routes.php)的方式
Aug 04 #PHP
基于Swoole实现PHP与websocket聊天室
Aug 03 #PHP
You might like
php使用strtotime和date函数判断日期是否有效代码分享
2013/12/25 PHP
Document 对象的常用方法
2009/07/31 Javascript
js使用eval解析json实例与注意事项分享
2014/01/18 Javascript
原生js获取宽高与jquery获取宽高的方法关系对比
2014/04/04 Javascript
基于JS实现PHP的sprintf函数实例
2015/11/14 Javascript
JS实现把鼠标放到链接上出现滚动文字的方法
2016/04/06 Javascript
Javascript将JSON日期格式化
2016/08/23 Javascript
一个炫酷的Bootstrap导航菜单
2016/12/28 Javascript
javascript表单正则应用
2017/02/04 Javascript
Bootstrap标签页(Tab)插件使用方法
2017/03/21 Javascript
利用Mongoose让JSON数据直接插入或更新到MongoDB
2017/05/03 Javascript
JQuery实现table中tr上移下移的示例(超简单)
2018/01/08 jQuery
js使用formData实现批量上传
2020/03/27 Javascript
layui实现数据表格点击搜索功能
2020/03/26 Javascript
Vue-Ant Design Vue-普通及自定义校验实例
2020/10/24 Javascript
vue+Element-ui前端实现分页效果
2020/11/15 Javascript
[04:59]DOTA2-DPC中国联赛 正赛 Ehome vs iG 选手采访
2021/03/11 DOTA
Python遍历目录的4种方法实例介绍
2015/04/13 Python
Python 由字符串函数名得到对应的函数(实例讲解)
2017/08/10 Python
pandas系列之DataFrame 行列数据筛选实例
2018/04/12 Python
PyQt4实现下拉菜单可供选择并打印出来
2018/04/20 Python
Python操作mongodb的9个步骤
2018/06/04 Python
python3写的简单本地文件上传服务器实例
2018/06/04 Python
TensorFlow Session使用的两种方法小结
2018/07/30 Python
Python使用jsonpath-rw模块处理Json对象操作示例
2018/07/31 Python
谈一谈基于python的面向对象编程基础
2019/05/21 Python
Pytorch 实现sobel算子的卷积操作详解
2020/01/10 Python
python实现人工蜂群算法
2020/09/18 Python
澳大利亚首个在线预订旅游网站:Wotif
2017/07/19 全球购物
Emma Bridgewater官网:英国餐具制造商
2019/11/24 全球购物
Cecil Mode法国在线商店:女性时尚
2021/01/08 全球购物
简单英文演讲稿
2014/01/01 职场文书
纺织工程专业个人求职信范文
2014/01/27 职场文书
《千年梦圆在今朝》教学反思
2014/02/24 职场文书
优秀电子工程系毕业生求职信
2014/05/24 职场文书
Nginx的rewrite模块详解
2021/03/31 Servers