-
今天系统的说一说微信开发关于添加菜单最基本的这一块,首
p>
先还是打开开发文档看官方规定的规则是什么?
我们看到他是通过
htpp
post
方式
调用一个
URL
地址,在调
用的时候呢,同过
post
方式传入我们的值,再看看传入的值是什
么呢
?
没错,正如你就看到的
json<
/p>
数据格式。
我
们
往
上
面
看<
/p>
,
看
看
怎
么
规
定
创
建
菜
单
的
官方这样规定父菜单的个数为
3
个,
父菜单名称最多的汉字为
4
个
,
在父菜单下允许创建
5
个子菜单,<
/p>
子菜单名称最多字数不超过
7
个。
有了这个概念,
我们再来看这种
json
p>
数据,
首先最外层的花括号
这
是
json
数据的基本格
式。往里走首先是一个“
botton
”,在他的
里面包含了我们所有的菜单,继续往里走,又是一个花括号对吧,
但是请你注
意,这里总共有三个,每个之间以逗号隔开,那这是什
么意思呢?这就是我们的父菜单的
操作区域,我们继续往里走看他
都父菜单操作域些什么内容呢?
首先是一个“
type
”,这主要是定义父菜单的菜单类型,所有
的菜单类型有俩种,“
click
”
“<
/p>
view
”。“
click
”触发的是单
击事件,当你设置父菜单的
type<
/p>
是
click
时,用户一点击这个设
p>
置了的菜单,就会会触发单击事件,这个时候,我们一接受这种事
件
,就可以对他做出相应的回复,例如,可以回复六种基本消息类
型的任意一种。
“
view
”
触发的是
一个跳转链接,
当用户一点击时,
就会跳转到你指定的跳转地址
上。
接着是一个
name
值,这个不用多说,父菜单的菜单名称。
继续是一个
key
或者
view
这块你得注意了。前
面我们说如果
设置菜单类型
(type)
为
click.
我们可以对应做出消息回复。
可是你
有没没有想过,
如果你的三个父菜单都将类型设
置成了
click,
那么
问题来了系统
怎么去识别是哪个菜单,用过户点击不同菜单时,我
们怎样对应回复不同的消息。这个时
候我们就需要对三个类型为
type
的菜单进行区分。
用什么区分呢?就是我们的
key
值。
当我设
置第一个父菜单类型
(type)
是
click
时,我对应他的
key
值为
ABOUTME
。
那么也就相当于我用
key
等于
ABOUTME
对这个菜单进行了一个标<
/p>
记,当用户单击这个菜单时,我们就可以根据他的标记进行对应的
消息回复,
那么当我三个父菜单都将类型
(type)
设置成
click,
我可
以通过不同的
key
值,对他进行标识,在接收消息时,在根
据不同
的
KEY
值,做出不同的消息回
复。所以我们必须在
type
为
cli
ck
的时候定义
key
值,
它们是绑定在一块的。
刚也有说当类型是
view
的时候,他会进行一个链接跳转,可是跳转到哪呢?所以我们是不
是得模仿一下
click
单独给他一个
url
规定他的跳转地址呢?没错
就是这样的。
所以我们可以得出最后的结论当菜单类型是
cli
ck
时,他对应
的是
key
值。当类型是
view
时,他对应的是
url.
好了现在我们就
能很清楚的看懂这种数据
结构了。当你想改变菜单的时候,就知道
怎么改成你需要的菜单了。
接下来我们该就要用程序去处理了。首先你得访问这个
u
rl
对
吧,我们见到都是在地址栏输入访问的地址去访问,这回
你得写程
序访问
url,
这该怎么实现
?你别急,
php
为什么被称为世界上最好
的语言?这时候就是展示
php
功能的时候了,在
php
中有这样的一
个功能,
< br>curl
。
这功能类似于黑客技术,
可以模拟登陆去采集数据,
但是这个呢,我们用不到,我们只用它来访问
url
就可以了。他怎
么用呢?你可以打开手册具
体了解下,但是最基本的有这么几步:
首先初始化
curl_int()
然
后给赋值给一个变量比如
$$ch.
接下
来就可以对
$$ch
进行操作了。接着对
$$ch
进行执行并赋值具体语法:
$$output =
curl_exec();
最后我们将资源关闭。语法为
cu
rl_close($$ch)
。这么一看好像和
我们要访问的<
/p>
url
地址并没有多大的联系。
curl
中有一个特别重要
的参数叫做
curl
_setopt
主要用来各种设置,
curl
< br>中一切玄妙均在
此处。接下来我将代码粘过来并进行解释。
function
https_request($$url, $$data = null)
{
$$curl = curl_init();
curl_setopt($$curl,
CURLOPT_URL, $$url);
curl_setopt($$curl,
CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($$curl,
CURLOPT_SSL_VERIFYHOST, FALSE);
if (!empty($$data)){
curl_setopt($$curl, CURLOPT_POST, 1);
curl_setopt($$curl, CURLOPT_POSTFIELDS,
$$data);
}
curl_setopt($$curl,
CURLOPT_RETURNTRANSFER, 1);
$$output = curl_exec($$curl);
curl_close($$curl);
return $$output;
}
这块我主要是将他封装到
一个函数里面,并且通过
$$data
是否为空
< br>的判断,实现模拟
http
的
g
et
或
post
请求。以后微信所有的
接口
请求就都可以用这个函数访问了。
函数体内第一条代码
curl
初始化
接着用设置选项设置
他要访问的
url
。这块的
url
p>
由我们函数的参
数传进来。
由于微信都是用
https
比较安全的协议去传输,
需要对主机等进行
验证。我们这块用设置选项,将他设置不进行任何验证。
前面我们说这个可以实现
post
和
get
请求,这该怎么实现?首先
< br>得了解俩种传输方式是什么?是怎么传输数据的,
get
这种方式属
于简单暴力型,他会将你要的数据直接在地址栏上携带过去,而
post
呢属于委婉含蓄型,他这个比较安全,数据不会那么明显。知
道了这俩个特点我该怎么去用程序实现俩种呢?对于
get
我们不用
做处理因为他会自动把要传的值携带上,我们直接用
curl
访问携
带参数的
u
rl
地址就可以获得数据了。可是
post
呢?我们得把一
个数据包给扔过去吧?所以我用一个变量来存放我的所有
post
数
据,就用
$$d
ata
吧,如果他访问的地址方式是
post
< br>,我就将数据放
在
$$data
中
,可是
get
方式并不需要啊,所以我设置
$$data
初始值
为
null,<
/p>
只有当他需要访问
post
方式的
url
时,
我再将
这种数据传给
$$data
,他就将原来的
null
给替换成你需要传
入的数据了。这时候再访问,就可
以做到,
get
和
post
请求都能访
问得到。既然用
post
传值,肯定有和
get
不一样之处。所以这里
我给他来一个判断,当
$$data
的数据不为
空时,也就是我的传输方
式是
post
时,我要另加一些条件,加什么呢?
curl_setopt($$curl, CURLOPT_POST, 1);
curl_setopt($$curl, CURLOPT_POSTFIELDS,
$$data);
加入这俩段代码,这个主要是开启了
curl
的
post
功能,并且将传
来的数据
$$data
,
放在了
curl
自己的文件区域里。那么这俩段代码
都是在满足
$$data
不为空的时候执行的,
p>
所有他是放在
if
条件之内。
接下来是对
get
和<
/p>
post
返回页面的一个说明
curl_setopt($$curl,
CURLOPT_RETURNTRANSFER, 1);
如果为一的话,表示不会
返回页面内容,反之为
0
,则可以。
接
着
我
们
p>
对
初
始
化
的
curl
进
行
执
行
操
作
。
output
=
curl_exec($$curl);
最后关闭我们的资源
curl_close($$curl);
在函数的结尾将结果返回
return $$output,<
/p>
这样在调用函数出就可
以使用返回的结果。
我们函数传入的参数
<
/p>
有俩个,无论何种方式肯定都得访问相
应的
url
,所以
url,
是必须的,而
针对
post
方式,需要额外的传
入数
据,所以我们定义起始值为
null
,只有用
< br>post
传入数据时,
$$data
才会有值。