微信自定义菜单的创建/查询/取消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的控制语句
Oct 09 PHP
php图片验证码代码
Mar 27 PHP
PHP中将ip地址转成十进制数的两种实用方法
Aug 15 PHP
curl不使用文件存取cookie php使用curl获取cookie示例
Jan 26 PHP
PHP中使用Imagick操作PSD文件实例
Jan 26 PHP
php实现处理输入转义字符的代码
Nov 08 PHP
使用PHP实现下载CSS文件中的图片
Dec 06 PHP
php实现的双色球算法示例
Jun 20 PHP
php实现将二维关联数组转换成字符串的方法详解
Jul 31 PHP
yii2.0整合阿里云oss上传单个文件的示例
Sep 19 PHP
详解laravel安装使用Passport(Api认证)
Jul 27 PHP
关于laravel模板中生成URL的几种模式总结
Oct 18 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注销代码(session注销)
2012/05/31 PHP
解析web文件操作常见安全漏洞(目录、文件名检测漏洞)
2013/06/29 PHP
利用PHP绘图函数实现简单验证码功能的方法
2016/10/18 PHP
windows下的WAMP环境搭建图文教程(推荐)
2017/07/27 PHP
Laravel框架实现多个视图共享相同数据的方法详解
2019/07/09 PHP
window.location和document.location的区别分析
2008/12/23 Javascript
用方法封装javascript的new操作符(一)
2010/12/25 Javascript
JS实现清除指定cookies的方法
2014/09/20 Javascript
jQuery使用contains过滤器实现精确匹配方法详解
2016/02/25 Javascript
jQuery技巧之让任何组件都支持类似DOM的事件管理
2016/04/05 Javascript
微信小程序 省市区选择器实例详解(附源码下载)
2017/01/05 Javascript
Bootstrap模态框(Modal)实现过渡效果
2017/03/17 Javascript
vue中component组件的props使用详解
2017/09/04 Javascript
vue实现简单的日历效果
2020/09/24 Javascript
在vue-cli3.0 中使用预处理器 (Sass/Less/Stylus) 配置全局变量操作
2020/08/10 Javascript
[52:29]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#3Secret VS OG第三局
2016/03/03 DOTA
[01:06:19]DOTA2-DPC中国联赛定级赛 LBZS vs SAG BO3第二场 1月8日
2021/03/11 DOTA
Windows下安装python2和python3多版本教程
2017/03/30 Python
python2.7 json 转换日期的处理的示例
2018/03/07 Python
python如何为被装饰的函数保留元数据
2018/03/21 Python
详解Django之auth模块(用户认证)
2018/04/17 Python
python 获取sqlite3数据库的表名和表字段名的实例
2019/07/17 Python
Python 可变类型和不可变类型及引用过程解析
2019/09/27 Python
python  logging日志打印过程解析
2019/10/22 Python
keras自动编码器实现系列之卷积自动编码器操作
2020/07/03 Python
利用python实现后端写网页(flask框架)
2021/02/28 Python
CSS3动画之流彩文字效果+图片模糊效果+边框伸展效果实现代码合集
2017/08/18 HTML / CSS
美国生鲜及杂货电商:FreshDirect
2018/01/29 全球购物
土木工程专业自荐信
2013/10/04 职场文书
生物化工工艺专业应届生求职信
2013/10/08 职场文书
毕业生自我鉴定
2013/12/04 职场文书
文明寝室申报材料
2014/05/12 职场文书
高考励志标语
2014/06/05 职场文书
中队活动总结
2014/08/27 职场文书
员工聘用合同范本
2015/09/21 职场文书
详解Python如何批量采集京东商品数据流程
2022/01/22 Python