微信自定义菜单的创建/查询/取消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 正则匹配函数体
Aug 25 PHP
在php和MySql中计算时间差的方法
Apr 22 PHP
php中生成随机密码的自定义函数代码
Oct 21 PHP
php实现aes加密类分享
Feb 16 PHP
PHP递归删除目录几个代码实例
Apr 21 PHP
10个php函数实用却不常见
Oct 13 PHP
PHP面向对象程序设计高级特性详解(接口,继承,抽象类,析构,克隆等)
Dec 02 PHP
php的laravel框架快速集成微信登录的方法
Dec 12 PHP
老生常谈PHP面向对象之命令模式(必看篇)
May 24 PHP
Laravel框架验证码类用法实例分析
Sep 11 PHP
关于Laravel-admin的基础用法总结和自定义model详解
Oct 08 PHP
Thinkphp 框架基础之入口文件功能、定义与用法分析
Apr 27 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中的类-什么叫类
2006/11/20 PHP
整理的一些实用WordPress后台MySQL操作命令
2013/01/07 PHP
php5.3 注意事项说明
2013/07/01 PHP
使用PHP实现下载CSS文件中的图片
2015/12/06 PHP
PHP实现批量上传单个文件
2015/12/29 PHP
Zend Framework教程之MVC框架的Controller用法分析
2016/03/07 PHP
Input 特殊事件onpopertychange和oninput
2009/06/17 Javascript
location.href 在IE6中不跳转的解决方法与推荐使用代码
2010/07/08 Javascript
javscript对象原型的一些看法
2010/09/19 Javascript
原生javascript图片自动或手动切换示例附演示源码
2013/09/04 Javascript
Extjs中RowExpander控件的默认展开问题示例探讨
2014/01/24 Javascript
用jQuery实现的智能隐藏、滑动效果的返回顶部代码
2014/03/18 Javascript
thinkphp 表名 大小写 窍门
2015/02/01 Javascript
JS实现超过长度限制后自动跳转下一款文本框的方法
2015/02/23 Javascript
AngularJS使用ng-repeat指令实现下拉框
2016/08/23 Javascript
node.js中 stream使用教程
2016/08/28 Javascript
新手学习前端之js模仿淘宝主页网站
2016/10/31 Javascript
详解js的事件处理函数和动态创建html标记方法
2016/12/16 Javascript
图解Javascript——作用域、作用域链、闭包
2017/03/21 Javascript
详解react服务端渲染(同构)的方法
2017/09/21 Javascript
JQuery中queue方法用法示例
2019/01/31 jQuery
jQuery实现简易QQ聊天框
2020/02/10 jQuery
js在HTML的三种引用方式详解
2020/08/29 Javascript
Python paramiko模块的使用示例
2018/04/11 Python
Python3.5面向对象编程图文与实例详解
2019/04/24 Python
opencv python 图像轮廓/检测轮廓/绘制轮廓的方法
2019/07/03 Python
python设置随机种子实例讲解
2019/09/12 Python
pytorch动态网络以及权重共享实例
2020/01/06 Python
Python类class参数self原理解析
2020/11/19 Python
青春奉献演讲稿
2014/05/08 职场文书
中学生关于梦想的演讲稿
2014/08/22 职场文书
如何写股份合作协议书
2014/09/11 职场文书
2014年体育工作总结
2014/11/24 职场文书
2015年学校图书室工作总结
2015/05/19 职场文书
nginx 多个location转发任意请求或访问静态资源文件的实现
2021/03/31 Servers
OpenCV-Python使用cv2实现傅里叶变换
2021/06/09 Python