微信自定义菜单的创建/查询/取消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 相关文章推荐
PHP用GD库生成高质量的缩略图片
Mar 09 PHP
解决cPanel无法安装php5.2.17
Jun 22 PHP
PHP实现UTF-8文件BOM自动检测与移除实例
Nov 05 PHP
php通过function_exists检测函数是否存在的方法
Mar 18 PHP
PHP Opcache安装和配置方法介绍
May 28 PHP
Symfony2安装第三方Bundles实例详解
Feb 04 PHP
Zend Framework教程之请求对象的封装Zend_Controller_Request实例详解
Mar 07 PHP
使用ltrace工具跟踪PHP库函数调用的方法
Apr 25 PHP
CI框架源码解读之利用Hook.php文件完成功能扩展的方法
May 18 PHP
浅谈php中urlencode与rawurlencode的区别
Sep 05 PHP
php+jQuery递归调用POST循环请求示例
Oct 14 PHP
PHP面向对象程序设计之接口的继承定义与用法详解
Dec 20 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
用Zend Encode编写开发PHP程序
2010/02/21 PHP
WordPress分页伪静态加html后缀
2016/06/08 PHP
php mysql获取表字段名称和字段信息的三种方法
2016/11/13 PHP
CSS心形加载的动画源码的实现
2021/03/09 HTML / CSS
浅析Js(Jquery)中,字符串与JSON格式互相转换的示例(直接运行实例)
2013/07/09 Javascript
javascript使用isNaN()函数判断变量是否为数字
2013/09/21 Javascript
JavaScript实现url地址自动检测并添加URL链接示例代码
2013/11/12 Javascript
JavaScript中的style.cssText使用教程
2014/11/06 Javascript
JS实现向表格中动态添加行的方法
2015/03/30 Javascript
基于jquery实现简单的分页控件
2016/03/17 Javascript
nodejs和C语言插入mysql数据库乱码问题的解决方法
2017/04/14 NodeJs
vue父组件向子组件动态传值的两种方法
2017/11/11 Javascript
layui表格checkbox选择全选样式及功能的实例
2018/03/07 Javascript
浅谈vue引用静态资源需要注意的事项
2018/09/28 Javascript
Vuex模块化应用实践示例
2020/02/03 Javascript
JS实现盒子拖拽效果
2020/02/06 Javascript
JS实现鼠标按下拖拽效果
2020/07/23 Javascript
在Windows8上的搭建Python和Django环境
2014/07/03 Python
Python实现修改IE注册表功能示例
2018/05/10 Python
python线程定时器Timer实现原理解析
2019/11/30 Python
Python函数的默认参数设计示例详解
2019/12/01 Python
python数字类型math库原理解析
2020/03/02 Python
利用matplotlib为图片上添加触发事件进行交互
2020/04/23 Python
pycharm不以pytest方式运行,想要切换回普通模式运行的操作
2020/09/01 Python
Django ModelForm组件原理及用法详解
2020/10/12 Python
Python实现淘宝秒杀功能的示例代码
2021/01/19 Python
纯CSS实现右侧底部悬浮效果(悬浮QQ、微信、微博、邮箱等联系方式)
2015/04/24 HTML / CSS
英国领先的亚洲旅游专家:Wendy Wu Tours
2018/01/21 全球购物
美国值得信赖的婚恋交友网站:eHarmony
2018/10/04 全球购物
2019年Java面试必问之经典试题
2012/09/12 面试题
应届生人事助理求职信
2013/11/09 职场文书
函授毕业自我鉴定
2013/12/19 职场文书
地理信息科学专业推荐信
2014/09/08 职场文书
公司委托书格式范本
2014/09/16 职场文书
MySQL中你可能忽略的COLLATION实例详解
2021/05/12 MySQL
html+css实现环绕倒影加载特效
2021/07/07 HTML / CSS