微信自定义菜单的创建/查询/取消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 相关文章推荐
一个数据采集类
Feb 14 PHP
PHP clearstatcache()函数详解
Mar 02 PHP
PHP开发规范手册之PHP代码规范详解
Jan 13 PHP
php分页示例分享
Apr 30 PHP
dedecms函数分享之获取某一栏目所有子栏目
May 19 PHP
php中的ini配置原理详解
Oct 14 PHP
PHP查找数值数组中不重复最大和最小的10个数的方法
Apr 20 PHP
百度工程师讲PHP函数的实现原理及性能分析(一)
May 13 PHP
PHP中FTP相关函数小结
Jul 15 PHP
php 遍历目录,生成目录下每个文件的md5值并写入到结果文件中
Dec 12 PHP
PHP进程通信基础之信号
Feb 19 PHP
php中加密解密DES类的简单使用方法示例
Mar 26 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
与数据库连接
2006/10/09 PHP
验证用户是否修改过页面的数据的实现方法
2008/09/26 Javascript
js保存当前路径(cookies记录)
2010/12/14 Javascript
JS正则验证邮箱的格式详细介绍
2013/11/19 Javascript
Area 区域实现post提交数据的js写法
2014/04/22 Javascript
node.js中的fs.lchmodSync方法使用说明
2014/12/16 Javascript
jQuery基于排序功能实现上移、下移的方法
2016/11/26 Javascript
Angular2 Service实现简单音乐播放器服务
2017/02/24 Javascript
Node.js  事件循环详解及实例
2017/08/06 Javascript
通过V8源码看一个关于JS数组排序的诡异问题
2017/08/14 Javascript
微信小程序引用公共js里的方法的实例详解
2017/08/17 Javascript
微信小程序实现选项卡功能
2020/06/19 Javascript
vue2.0 父组件给子组件传递数据的方法
2018/01/15 Javascript
Js实现复选框的全选、全不选反选功能代码实例
2020/02/28 Javascript
JavaScript实现多文件下载方法解析
2020/08/07 Javascript
js实现有趣的倒计时效果
2021/01/19 Javascript
python中使用sys模板和logging模块获取行号和函数名的方法
2014/04/15 Python
用Python实现通过哈希算法检测图片重复的教程
2015/04/02 Python
python将文本转换成图片输出的方法
2015/04/28 Python
Python实现栈的方法
2015/05/26 Python
python实现泊松图像融合
2018/07/26 Python
python线程信号量semaphore使用解析
2019/11/30 Python
如何利用pygame实现简单的五子棋游戏
2019/12/29 Python
tensorboard显示空白的解决
2020/02/15 Python
Python读入mnist二进制图像文件并显示实例
2020/04/24 Python
台湾网购生鲜第一品牌:i3Fresh爱上新鲜
2017/10/26 全球购物
美国乒乓球设备、配件和服装品牌:Killerspin
2020/06/07 全球购物
杭州-飞时达软件有限公司.net笔面试
2012/04/28 面试题
vue+django实现下载文件的示例
2021/03/24 Vue.js
法学专业毕业生自荐信范文
2013/12/18 职场文书
国贸专业个人求职信范文
2014/01/08 职场文书
剪彩仪式主持词
2014/03/19 职场文书
捐款倡议书格式范文
2014/05/14 职场文书
校长一岗双责责任书
2015/05/09 职场文书
2016年党员创先争优公开承诺书
2016/03/25 职场文书
一篇文章带你学习Mybatis-Plus(新手入门)
2021/08/02 Java/Android