微信自定义菜单的创建/查询/取消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入门速成(2)
Oct 09 PHP
提升PHP执行速度全攻略(上)
Oct 09 PHP
PHP脚本中include文件出错解决方法
Nov 20 PHP
PHP file_get_contents设置超时处理方法
Sep 30 PHP
php读取csv实现csv文件下载功能
Dec 18 PHP
Codeigniter校验ip地址的方法
Mar 21 PHP
thinkPHP查询方式小结
Jan 09 PHP
Zend Framework实现多服务器共享SESSION数据的方法
Mar 22 PHP
php生成mysql的数据字典
Jul 07 PHP
ThinkPHP框架分布式数据库连接方法详解
Mar 14 PHP
php利用ffmpeg提取视频中音频与视频画面的方法详解
Jun 07 PHP
PHP后期静态绑定之self::限制实例分析
Dec 21 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 5.3.x 的strtotime() 时区设定 警告信息修复
2013/08/05 PHP
PHP缓存集成库phpFastCache用法
2014/12/15 PHP
关于PHP中interface的用处详解
2020/07/26 PHP
jQuery动画animate方法使用介绍
2013/05/06 Javascript
javascipt匹配单行和多行注释的正则表达式
2013/11/20 Javascript
javascript eval(func())使用示例
2013/12/05 Javascript
jQuery中[attribute!=value]选择器用法实例
2014/12/31 Javascript
jQuery中is()方法用法实例
2015/01/06 Javascript
html的DOM中document对象anchors集合用法实例
2015/01/21 Javascript
js中substr,substring,indexOf,lastIndexOf,split,replace的用法详解
2015/11/09 Javascript
ionic在开发ios系统微信时键盘挡住输入框的解决方法(键盘弹出问题)
2016/09/06 Javascript
JavaScript实现的搜索及高亮显示功能示例
2017/08/14 Javascript
百度地图去掉marker覆盖物或者去掉maker的label文字方法
2018/01/26 Javascript
Vue多种方法实现表头和首列固定的示例代码
2018/02/02 Javascript
vue webpack打包优化操作技巧
2018/02/22 Javascript
jQuery实现模拟搜索引擎的智能提示功能简单示例
2019/01/27 jQuery
javascript事件监听与事件委托实例详解
2019/08/16 Javascript
[43:18]NB vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.22
2019/09/05 DOTA
python网络编程学习笔记(九):数据库客户端 DB-API
2014/06/09 Python
使用Python监控文件内容变化代码实例
2018/06/04 Python
使用Python监视指定目录下文件变更的方法
2018/10/15 Python
从运行效率与开发效率比较Python和C++
2018/12/14 Python
python正则表达式匹配不包含某几个字符的字符串方法
2019/07/23 Python
基于python使用tibco ems代码实例
2019/12/20 Python
Python模拟登录requests.Session应用详解
2020/11/17 Python
如何用Python进行时间序列分解和预测
2021/03/01 Python
资深财务管理人员自我评价
2013/09/22 职场文书
销售员个人求职的自我评价
2014/02/10 职场文书
公证委托书
2014/08/01 职场文书
2014学生会工作总结报告
2014/12/02 职场文书
党员活动总结
2015/02/04 职场文书
留学推荐信英文范文
2015/03/26 职场文书
法院答辩状格式
2015/05/22 职场文书
贴吧吧主申请感言
2015/08/03 职场文书
Python集合set()使用的方法详解
2022/03/18 Python
MySQL外键约束(Foreign Key)案例详解
2022/06/28 MySQL