微信自定义菜单的创建/查询/取消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 操作excel文件的方法小结
Dec 31 PHP
解析isset与is_null的区别
Aug 09 PHP
php根据一个给定范围和步进生成数组的方法
Jun 19 PHP
php基本函数汇总
Jul 09 PHP
PHP YII框架开发小技巧之模型(models)中rules自定义验证规则
Nov 16 PHP
解析WordPress中函数钩子hook的作用及基本用法
Dec 22 PHP
Symfony核心类概述
Mar 17 PHP
php分页原理 分页代码 分页类制作教程
Sep 23 PHP
php防止sql注入的方法详解
Feb 20 PHP
PHP实现批量删除(封装)
Apr 28 PHP
php在windows环境下获得cpu内存实时使用率(推荐)
Feb 08 PHP
php设计模式之备忘模式分析【星际争霸游戏案例】
Mar 24 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 IDE phpstorm 常用快捷键
2015/05/18 PHP
Zend Framework连接Mysql数据库实例分析
2016/03/19 PHP
thinkphp框架下实现登录、注册、找回密码功能
2016/04/06 PHP
Smarty分页实现方法完整实例
2016/05/11 PHP
php利用gd库为图片添加水印
2016/11/09 PHP
ExtJS 2.0实用简明教程之应用ExtJS
2009/04/29 Javascript
javascript通过navigator.userAgent识别各种浏览器
2013/10/25 Javascript
JavaScript中setInterval的用法总结
2013/11/20 Javascript
js获取日期:昨天今天和明天、后天
2014/06/11 Javascript
给angular加上动画效遇到的问题总结
2016/02/17 Javascript
javascript实现平滑无缝滚动
2020/08/09 Javascript
JS加载器如何动态加载外部js文件
2016/05/26 Javascript
javascript的几种写法总结
2016/09/30 Javascript
JavaScript版经典游戏之扫雷游戏完整示例【附demo源码下载】
2016/12/12 Javascript
初探nodeJS
2017/01/24 NodeJs
Angular 4依赖注入学习教程之ValueProvider的使用(七)
2017/06/04 Javascript
关于vue.extend和vue.component的区别浅析
2017/08/16 Javascript
JS实现将链接生成二维码并转为图片的方法
2018/03/17 Javascript
node.js调用C++函数的方法示例
2018/09/21 Javascript
搭建一个Koa后端项目脚手架的方法步骤
2019/05/30 Javascript
微信小程序实现拼图小游戏
2020/10/22 Javascript
[01:03:54]Liquid vs IG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
Python3 能振兴 Python的原因分析
2014/11/28 Python
Python 的描述符 descriptor详解
2016/02/27 Python
在Django下测试与调试REST API的方法详解
2019/08/29 Python
python GUI编程(Tkinter) 创建子窗口及在窗口上用图片绘图实例
2020/03/04 Python
学python最电脑配置有要求么
2020/07/05 Python
美国玩具公司:U.S.Toy
2018/05/19 全球购物
mysql的最长数据库名,表名,字段名可以是多长
2014/04/21 面试题
JRE、JDK、JVM之间的关系怎样
2012/05/16 面试题
怎么处理XML的中文问题
2015/03/26 面试题
领班岗位职责范文
2014/02/06 职场文书
机械设计及其自动化求职推荐信
2014/02/17 职场文书
历史学专业求职信
2014/06/19 职场文书
2014年社区教育工作总结
2014/12/02 职场文书
小学家长意见怎么写
2015/06/03 职场文书