微信自定义菜单的创建/查询/取消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 header()函数使用说明
Jul 10 PHP
解析PHP中$_FILES的使用以及注意事项
Jul 05 PHP
php实现cc攻击防御和防止快速刷新页面示例
Feb 13 PHP
mysql_connect localhost和127.0.0.1的区别(网络层阐述)
Mar 26 PHP
Laravel与CI框架中截取字符串函数
May 08 PHP
php分页原理 分页代码 分页类制作教程
Sep 23 PHP
php对接java现实加签验签的实例
Nov 25 PHP
php封装的mongodb操作类代码
Aug 06 PHP
PHP的mysqli_stat()函数讲解
Jan 23 PHP
php字符串截取函数mb_substr用法实例分析
Jun 25 PHP
laravel框架实现后台登录、退出功能示例
Oct 31 PHP
分享几种好用的PHP自定义加密函数(可逆/不可逆)
Sep 15 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 进程锁定问题分析研究
2009/11/24 PHP
基于php和mysql的简单的dao类实现crud操作功能
2014/01/27 PHP
php操作redis数据库常见方法实例总结
2020/02/20 PHP
List the UTC Time on a Computer
2007/06/11 Javascript
event.keyCode键码值表 附只能输入特定的字符串代码
2009/05/15 Javascript
javascript小数四舍五入多种方法实现
2012/12/23 Javascript
jquery插件实现鼠标经过图片右侧显示大图的效果(类似淘宝)
2013/02/04 Javascript
jquery滚动组件(vticker.js)实现页面动态数据的滚动效果
2013/07/03 Javascript
javascript学习笔记_浅谈基础语法,类型,变量
2016/09/19 Javascript
微信小程序微信支付接入开发实例详解
2017/04/12 Javascript
移动设备手势事件库Touch.js使用详解
2017/08/18 Javascript
详解使用angular的HttpClient搭配rxjs
2017/09/01 Javascript
angularJs提交文本框数据到后台的方法
2018/10/08 Javascript
10个最受欢迎的 JavaScript框架(推荐)
2019/04/24 Javascript
React精髓!一篇全概括小结(急速)
2019/05/23 Javascript
JavaScript解析JSON数据示例
2019/07/16 Javascript
JS函数参数的传递与同名参数实例分析
2020/03/16 Javascript
在Echarts图中给坐标轴加一个标识线markLine
2020/07/20 Javascript
[02:09:59]火猫TV国士无双dota2 6.82版本详解(下)
2014/09/29 DOTA
Python使用Socket(Https)Post登录百度的实现代码
2012/05/18 Python
python读取TXT到数组及列表去重后按原来顺序排序的方法
2015/06/26 Python
Python 实现文件的全备份和差异备份详解
2016/12/27 Python
对Python中type打开文件的方式介绍
2018/04/28 Python
python操作xlsx文件的包openpyxl实例
2018/05/03 Python
Python数据类型之Number数字操作实例详解
2019/05/08 Python
PyQt5创建一个新窗口的实例
2019/06/20 Python
对python 调用类属性的方法详解
2019/07/02 Python
tensorflow生成多个tfrecord文件实例
2020/02/17 Python
解决Python发送Http请求时,中文乱码的问题
2020/04/30 Python
Python开发入门——迭代的基本使用
2020/09/03 Python
纯CSS3代码实现switch滑动开关按钮效果
2016/08/30 HTML / CSS
Bealls Florida百货商店:生活服饰、家居装饰和鞋子
2018/02/23 全球购物
超市营业员岗位职责
2013/12/20 职场文书
通用求职信范文模板分享
2013/12/27 职场文书
诉讼代理人授权委托书
2014/04/08 职场文书
公共艺术专业自荐信
2014/09/01 职场文书