微信开发日记——事件的推送

这样一来一个简单的收发消息就可以实现了,呃,不!这只是简单中的收发文本消息,对于图片、语音、视频、地理位置、链接等通过类似的方法,注意XML中的数据就行了。值得一提的是图文消息,也就是我们通常看到的腾讯新闻推送的类型,<ArticleCount>指的是图文消息个数,限制为10条以内,有多少个下面的<item>就需要有多少,<item></item>里包含<Title>图文消息的标题,<Description>图文消息描述,<PicUrl> 图片链接,<Url> 点击图文消息跳转链接。

除了收发普通消息外,高级一点的就是事件的推送了,这里面就包含关注/取消关注事件、扫面二维码事件、上报地理位置事件以及自定义菜单事件。这一环节了遇到了不少困难,开始时没注意自己的权限,只有下面几个。

而自己只是一个普通QQ号申请的公众账号,并不是什么企业拥有营业资格证等可以申请服务号,或者花钱申请认证从而获得更高的权限。唉,正当绝望无法走下去时,眼前出现了“申请测试账号”的字眼。测试账号拥有所有权限,但只是试用的,不能更改测试账号的名称,也就只能先这样用着了。

要实现这些功能就不得不提一个非常重要的ACCESS_TOKEN了,它是公众号的全局唯一票据,有效期只有7200秒,所以过一段时间就要重新获取。之所以不是每次调用函数都去获取,是因为它有着每天的次数限制,2000次。其它一些接口也是有次数限制的,只要是为了防止公众号的程序错误而引发微信服务器负载异常,当超过限制时服务器就会返回“api freq out of limit”的错误消息了。这里,我将获取ACCESS_TOKEN的过程封装成如下函数。

1
2
3
4
5
6
7
8
9
10
11
private function getACCESS_TOKEN()//获取access_taken
{
$APPID = "wxecb85db4b8db71f5";
$APPSECRECT = "ac96cc1c4b3016adba5251ea54e86fde";
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$APPID."&secret=".$APPSECRECT;
$responseArray = $this->getRequest($url);
$ACCESS_TOKEN = $responseArray[’access_token’];
return $ACCESS_TOKEN;
}

当用户初次扫描二维码关注时,事件类型为subscribe,这时可以返回给用户一个文本消息,也就是通常的欢迎信息。取消关注时事件类型为unsubscribe,呃,这时就不要返回什么消息好了。

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
private function receiveEvent($object)
{
$contentStr = "";
switch ($object->Event)
{
case "subscribe":
$contentStr = "欢迎关注如果明天过后小i为您服务!";
break;
case "unsubscribe":
$contentStr = "";
break;
case "CLICK":
switch ($object->EventKey)
{
default:
$contentStr = "你点击了菜单: ".$object->EventKey;
break;
}
break;
default:
$contentStr = "receive a new event: ".$object->Event;
break;
}
$resultStr = $this->transmitText($object, $contentStr);
return $resultStr;
}
Just a beginner.<br /><a href='https://github.com/yaoshanliang/about' target='_blank'>profile</a>