分享

三、微信开发:自定义菜单

 phpcoder_echo 2017-06-05
本章是系列教程第三篇。学习之前请确保了解了

微信公众号开发基础(上)

微信公众号开发基础(下)

本篇文章你能学到:用php为公众号增加,修改,替换,删除菜单。举一反三,你能用本文的简单例子写出适合自己工作的功能。
新建文件menu.php,把下面的代码复制到文件里。修改AppID(应用ID)与AppSecret(应用密钥,这两个作用下面会讲到)为自己公众号的。你将能得到如图的功能。点击菜单一会menu.php会收到XML消息,“王文晓,百度”会跳转到相应网页。

menu.php里面的代码



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<?php
  //获取微信access_token
 function getaccess_token(){
    //appid与appsecret改成你自己的
    $appid '自己的appid';
    $appsecret '自己的appsecret';
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
    $data = curl_exec($ch);
    curl_close($ch);
    $data = json_decode($data,true);
    return $data['access_token'];
 }
  //把菜单传给微信服务器,传入菜单的json
 function setmenu($menu){
    $access_token = getaccess_token();
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch, CURLOPT_POST,1);
    curl_setopt($ch, CURLOPT_POSTFIELDS,$menu);
    $data = curl_exec($ch);
    curl_close($ch);
    return $data;
 }
  $menu = '{
      "button":[
      
           "type":"click",
           "name":"菜单一",
           "key":"wwx_one"
       },
       {
            "name":"连接菜单",
            "sub_button":[
            
                "type":"view",
                "name":"王文晓",
                "url":"http://www."
             },
             {
                "type":"view",
                "name":"百度",
                "url":"http://www.baidu.com"
             }
             ]
        }]
  }';
 echo setmenu($menu);

AppID(应用ID)、AppSecret(应用密钥)与access_token

AppID(应用ID)与AppSecret(应用密钥)每个公众号都是唯一的,它俩组合能获取access_token,在与微信服务器接口交互时,微信验证access_token才知道你要改哪个公众号的设置。
access_token每天只允许获取1000次,但每次获取的access_token的有效期目前为2个小时,所以可以把获取的token存到数据库或者文本文件里,两小时后再次获取。

(中午十二点了,先吃饭,下午在写)

AppID(应用ID)、AppSecret(应用密钥)在哪查询

登录mp.weixin.qq.com选择基本配置,即可看到

学习 CURL 函数

curl功能很强大,可以做模拟登录、刷票、代理、表单上传......本篇文章只讲要用到的功能:curl模拟get、模拟post获取网页数据。

php中curl总的流程

1
2
3
4
$ch = curl_init();   //初始化一个curl会话到$ch
curl_setopt($ch, CURLOPT_“相关配置”,“配置的值”);//$ch中设置相关的配置
$data = curl_exec($ch);//执行curl会话,返回的结果放到$data
curl_close($ch);//关闭curl会话
curl_setopt常用配置项
配置项 作用 配置值
CURLOPT_URL 要获取的地址 String类型的地址
CURLOPT_RETURNTRANSFER 返回的网页数据是否直接显示在网页上 bool,1为不显示0为显示
CURLOPT_POST 是否使用post bool,0为不用1为用
CURLOPT_POSTFIELDS 访问地址时带过去的post值 string或者array类型的值
CURLOPT_HEADER 返回的网页头信息是否直接显示在网页上 bool,0为不显示1为显示
CURLOPT_SSL_VERIFYPEER 访问https网址时检查证书是否有效 bool

例1、get获取www.网页数据


1
2
3
4
5
6
7
    $url "http://www.";
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    $data = curl_exec($ch);
    curl_close($ch);
    var_dump($data);

获得的网页数据放在$data变量里,然后打印出来$data,原本是显示出网页的字符串,但是是html语言,所以又变成网页了
结果图如下


例2、带post获取www.网页数据


1
2
3
4
5
6
7
8
    $url "http://www.";
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch, CURLOPT_POSTFIELDS,"who=wangwenxiao");
    $data = curl_exec($ch);
    curl_close($ch);
    var_dump($data);

结果:跟get方式得到的结果一样,只不过请求时请求头会带着post数据who=wangwenxiao

获取access_token流程


获取地址:https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
把红色的字改成自己公众号的AppID(应用ID)、AppSecret(应用密钥)即可
相应代码讲解:
5-6行改成自己的appid与appsecret
7-13行根据上面讲解是模拟get请求获取上面网址显示的数据。

返回的数据为json数据{"access_token":"ACCESS_TOKEN的值(512个字节)","expires_in":7200}
14行将上面得到的json格式数据转化为数组。
15行获取数据中的access_token的值。
制作菜单详解
(吃晚饭去,吃完晚饭继续写)

上面代码设置的菜单为例,当用户点击click类型按钮时,我们的服务器接收到如下XML格式的信息

1
2
3
4
5
6
7
8
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[FromUser]]></FromUserName>
<CreateTime>123456789</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[CLICK]]></Event>
<EventKey><![CDATA[wwx_one]]></EventKey>
</xml>

接收菜单信息

把下面的代码命名为menureply.php放在服务器上,并与微信公众号建立对接。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<?php
define("TOKEN""xiao");
//用于回复用户
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 = trim($postObj->Event);
        $eventkey = trim($postObj->EventKey);
        $time = time();
        $textTpl = "<xml>
                    <ToUserName><![CDATA[%s]]></ToUserName>
                    <FromUserName><![CDATA[%s]]></FromUserName>
                    <CreateTime>%s</CreateTime>
                    <MsgType><![CDATA[%s]]></MsgType>
                    <Content><![CDATA[%s]]></Content>
                    </xml>";             
        if(!empty$event )&&$event=="CLICK")
        {
            $msgType "text";
            $contentStr "您点击了按钮菜单,key值为:".$eventkey;
            $resultStr = sprintf($textTpl$fromUsername$toUsername$time$msgType$contentStr);
            echo $resultStr;
            exit;
        }
    }else{
            echo "";
            exit;
    }
}
  
    $echoStr $_GET["echostr"];
    if (!empty($echoStr)) {
        //对接规则
        $signature $_GET["signature"];
        $timestamp $_GET["timestamp"];
        $nonce $_GET["nonce"];
                          
        $token = TOKEN;
        $tmpArr array($token$timestamp$nonce);
        sort($tmpArr, SORT_STRING);
        $tmpStr = implode( $tmpArr );
        $tmpStr = sha1( $tmpStr );
                  
        if$tmpStr == $signature ){
            echo $echoStr;
        }else{
            echo "";
            exit;
        }
    }else{
        responseMsg();
    }
?>

对接后的图(对接方法请看微信公众号开发基础上

再点击公众号的菜单会收到如下信息

我们设置的eventkey值就是wwx_one。
menureply.php的代码不详细解释,仔细看开头写出的那两篇文章就能理解了
能返回文本消息,你也就可以做视频,图文,语音消息。。。。。。。

本章结束语

学到这里,其实你也就可以自己看微信文档开发了。后面我会把微信的九大高级接口怎么使用详细介绍一遍,有问题欢迎留言。

本文写作用时14小时

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多