想着之前的二维码签到,寒假中过年之前学习了下微信的公众平台。在家的心总是静不下来,没有好好总结总结。现在来到学校了,离开学还有一个礼拜的时间,回过头来反思一下。
微信公众平台开发者文档(http://mp.weixin.qq.com/wiki/index.php?title=%E9%A6%96%E9%A1%B5)是主要的学习资料。当然,首先要注册开发者账号啦,进入管理页关闭编辑模式,选择开发模式。接下来就是服务器配置,URL填写服务器的网址,Token是签名,会和URL文件里的Token相匹对,一致的话才能通过验证,才能添加代码实现下面的功能,检验signature的PHP示例代码可以在接入指南里下载。
下面就是实际的收发消息了,微信的收发是通过XML实现的。当用户发送一段文字给公众账号时,服务器端收到的信息包括发送方的名称FromUserName、接收方的名称ToUserName、发送时间戳CreateTime、消息类型MsgType、消息内容Content以及消息的编号MsgId,返回消息时通过交换FromUserName与ToUserName就可以实现了。
responseMsg()函数通常是用户与公众账号交流的主入口,$postStr = $GLOBALS[“HTTP_RAW_POST_DATA”]总是产生 $HTTP_RAW_POST_DATA 变量包含有原始的 POST 数据,接下来的simplexml_load_string()函数是把XML字符串载入对象中,也就得到了用户的一个对象。
为了方便回复文本消息,写成transmitText()函数,第一个参数时用户对象,第二个是需要回复的文本内容。返回值是通过sprintf()函数合成字符串,这是一个字符串格式化命令,把格式化的数据写入字符串变量中。这样也就组合成一个返回的消息字符串,再echo一下就可以发出去了。
1 2 3 4 5 6 7 8 9 10 11 12 13
| private function transmitText($object, $content) { $textTpl = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[%s]]></Content> <FuncFlag>%d</FuncFlag> </xml>"; $resultStr = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $content, time()); return $resultStr; }
|
这边可以接入小黄鸡的聊天程序,私有函数如下
1 2 3 4 5 6 7
| private function chatWithSimsimi($object)//小黄鸡 { $keyword = trim($object->Content); include(’simsimi.php’); $contentStr = callSimsimi($keyword); return $contentStr; }
|
simsimi.php文件可以再小黄鸡的网站上下载到,就是callSimsimi()函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| function callSimsimi($keyword) { $params[’key’] = "c7b90c2f-1197-46db-8998-61fb738bb8e1"; $params[’lc’] = "ch"; $params[’ft’] = "1.0"; $params[’text’] = $keyword; $url = "http://sandbox.api.simsimi.com/request.p?".http_build_query($params); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $output = curl_exec($ch); curl_close($ch); $message = json_decode($output,true); $result = ""; if ($message[’result’] == 100){ $result = $message[’response’]; }else{ $result = $message[’result’]."-".$message[’msg’]; } return $result; }
|
在该文件里需要填写申请的密钥$params[’key’] ,而且申请只有7天的有效期,上面的那个已经过期了吧,长期的是要付费的。
这样一来一个简单的收发消息就可以实现了,呃,不!这只是简单中的收发文本消息,对于图片、语音、视频、地理位置、链接等通过类似的方法,注意XML中的数据就行了。值得一提的是图文消息,也就是我们通常看到的腾讯新闻推送的类型,指的是图文消息个数,限制为10条以内,有多少个下面的- 就需要有多少,
里包含图文消息的标题,图文消息描述, 图片链接, 点击图文消息跳转链接。