码迷,mamicode.com
首页 > 微信 > 详细

[转载]微信公众平台二次开发之自定义菜单接口

时间:2015-05-22 16:30:19      阅读:327      评论:0      收藏:0      [点我收藏+]

标签:

今天在SAE上运行代码时出现了一个小问题,所以发一篇博客与大家分享,这也是我第一次写关于技术上的博客,希望大家帮忙顶顶
步骤1.
你要有一个公众号,自己申请,过程略,很简单的。
步骤2.
登陆进去->高级功能,这时候要想开发必须要输入url和token,这里方法我引一下别人的文章http://www.cnblogs.com/txw1958/p/wechat-tutorial.html。
步骤3.
如果上面的工作完成了,这个时候你会在高级功能中看到
技术分享
点击编辑模式,这个时候要需要获取开发菜单权限
步骤4.
这里我再一次引一下别人的http://kf.qq.com/faq/120911VrYVrA130807m22MVB.html,*注:一般理由合理再过了一天就可以看到消息,点通知
技术分享
于此同时还可以看到,点击开发模式
技术分享

注意,appid和appsecret千万不能被别人知道,如果别人知道了就等于你把菜单的控制权交给了他!!!
步骤5.
在这里我们有两种方式来建立菜单,一种是编辑模式,那个是傻瓜式操作所以这里就不在讲了,我们重点讲第二种开发模式。
进入开发模式。在服务其中新建一个php文件,注意一定要是新建的,不是以前我们链接url的那个地址。
步骤6.
我们要获取access_token
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=你的appid&secret=你的secret
输入后会得到{"access_token":"BWGjR6KafrmbPEYOaocez56RZwVj7pIVpmf1p6RqgVoGKJhfKVD3hkX2YfLOHYyJouocwnup9sGB23HBOkWKAaFqsyePW4-TKa-7SaAZXksMtMeqH2boDAoDrsWEj251bZYQct6IU9l6th4WHB5_6g","expires_in":7200}这样的一个代码access_token就是你需要的access_token,7200是access_token这个的过期时间
步骤7.
在我们刚刚新建的php文件中写入这样的代码
<?php
$xjson = ‘{
"button":[
{
"name":"业务办理",
"sub_button":[
{
"type":"view",
"name":"新车上户",
 "url":"http://www.ixp86.com:808/"
},
{
"type":"view",
"name":"爱车保养",
 "url":"http://www.ixp86.com:808/"
}]
 
},
{
"name":"信息查询",
"sub_button":[
{
"type":"click",
"name":"进度查询",
"key":"jdcx"
},
{
"type":"click",
"name":"违章查询",
"key":"wzcx"
},
{
"type":"click",
"name":"保养查询",
"key":"bycx""
}]
}]
}‘;
 
 
$result = vpost($url,$xjson);
var_dump($result);
 
function vpost($url,$data){ // 模拟提交数据函数
    $curl = curl_init(); // 启动一个CURL会话
    curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); // 对认证证书来源的检查
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); // 从证书中检查SSL加密算法是否存在
    curl_setopt($curl, CURLOPT_USERAGENT, ‘Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)‘); // 模拟用户使用的浏览器
    // curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转
    // curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer
    curl_setopt($curl, CURLOPT_POST, 1); // 发送一个常规的Post请求
    curl_setopt($curl, CURLOPT_POSTFIELDS, $data); // Post提交的数据包x
    curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循环
    curl_setopt($curl, CURLOPT_HEADER, 0); // 显示返回的Header区域内容
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
    $tmpInfo = curl_exec($curl); // 执行操作
    if (curl_errno($curl)) {
       echo ‘Errno‘.curl_error($curl);//捕抓异常
    }else {
    }
    curl_close($curl); // 关闭CURL会话
    return $tmpInfo; // 返回数据
}
?>
上面的json就是菜单了,让这个页面上线,再预览{"errcode":0,"errmsg":"ok"}这样就是成功了,等大约10秒钟看手机就有效果
如果是string(49) "{"errcode":42001,"errmsg":"access_token expired"}"说明
access_token过期了重新运行
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=你的appid&secret=你的secret再替换掉access_token就行了。
然后再试捕捉菜单点击事件
在消息处理页面中也就是最开始要求我们写入url和token 的那个页面在处理消息的函数
public function responseMsg()
    {
        $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
 
       if (!empty($postStr)){
               $postObj = simplexml_load_string($postStr, ‘SimpleXMLElement‘, LIBXML_NOCDATA);
                $fromUsername = $postObj->FromUserName;//游客的账号
                $toUsername = $postObj->ToUserName;//开发者的账号
           $event = $postObj->Event;//事件这里我也要的是click,
           $eventKey = $postObj->EventKey;//这个事件对应的名称,如我这里就有jdcx等
                $keyword = trim($postObj->Content);
                $time = time();
                $textTpl = "<xml>
       <ToUserName><![CDATA[%s]]></ToUserName>
       <FromUserName><![CDATA[%s]]></FromUserName>
       <CreateTime>%s</CreateTime>
       <MsgType><![CDATA[%s]]></MsgType>
       <Content><![CDATA[%s]]></Content>
       <FuncFlag>0</FuncFlag>
       </xml>";
           if($event == "CLICK"){//判断事件类型
                   $contentStr="";
                   switch($eventKey){//这个事件的名称
                     case "jdcx":
                      $contentStr=$postObj->FromUserName;
                     break;
                     case "wzcx":
                      $contentStr="违章查询前请输入手机号";
                     break;
                      case "bycx":
                      $contentStr="保养查询前请输入手机号";
                     break;
                    
                   }
                   $msgType = "text";
                 $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
                   echo $resultStr;
                 }
第一次发微博,第一发布了只显示出了一部分,真郁闷,写了二次希望对大家有帮助

[转载]微信公众平台二次开发之自定义菜单接口

标签:

原文地址:http://www.cnblogs.com/suixue/p/4522358.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!