//$result = https_request($url); $result = httpRequest($url);
$user = json_decode($result, true);
return $user; }
echo $result;
基于微信的辅助教学系统的设计与实现
\
函数首先获取用户的access_token ,,然后根据access_token及appid请求接口,获得 json数据后进行解析。
4.3.3 客服发送
基于关键词的回复往往是一种被动的和按照规则设定的,当我们需要对最近与公众号进行过交互的用户主动发送消息时,需要调用客服接口。用户向服务起发送信息,并不是另一个客户直接收到,而是转发给客服接口,由客服接口转发给相应的用户。客服接口为:https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token={$access_token}。客服接口需要用https协议的post方法进行请求。具体实现如下:
function sendtext($openid,$text){
$access_token =get_token();
$url=\$textarr = array('touser'=>$openid,\$jsontext = my_json_encode($textarr,\$result =https_request($url, $jsontext); return $result; }
4.3.4 自定义菜单
自定义菜单是微信公众号为用户提供的一个功能,用户可以定义最多不超过3个一级菜单,一级菜单下可以含有不超过5个二级菜单。建立自定义菜单的接口为https://api.weixin.qq.com/cgi-bin/menu/create?access_token=\;需要用https的post方法请求。在定义二级菜单时,传输的数据必须为接送格式。具体实现如下:
include 'func.inc.php'; $arr = array(
'button' =>array( array(
'name'=>urlencode(\教师\
17
'sub_button'=>array( array(
'name'=>urlencode(\开始签到\ 'type'=>'click', 'key'=>'startqiandao' ), array(
'name'=>urlencode(\结束签到\ 'type'=>'click', 'key'=>'stopqiandao' ) ,
array(
'name'=>urlencode(\教师绑定\ 'type'=>'click',
'key'=>'teacherbangding' ) ,
array(
'name'=>urlencode(\作业与出题\ 'type'=>'click', 'key'=>'work' ) ,
array(
'name'=>urlencode(\在线答疑\ 'type'=>'click', 'key'=>'jieda' ) ,
基于微信的辅助教学系统的设计与实现
) ), array(
'name'=>urlencode(\学生\ 'sub_button'=>array( array(
'name'=>urlencode(\签到\ 'type'=>'click', 'key'=>'qiandao' ), array(
'name'=>urlencode(\在线答题\ 'type'=>'click', 'key'=>'dati' ) ,
18
array(
基于微信的辅助教学系统的设计与实现
'name'=>urlencode(\在线提问\ 'type'=>'click', 'key'=>'tiwen' ) ,
array(
'name'=>urlencode(\学生绑定\ 'type'=>'click',
'key'=>'studentbangding' ) ,
array(
'name'=>urlencode(\查看作业\ 'type'=>'click', 'key'=>'viewwork' ) ,
) ), array(
'name'=>urlencode(\我的\ 'sub_button'=>array( array(
'name'=>urlencode(\关键词帮助\ 'type'=>'view',
'url'=>'http://1.mywxfzjxxt.applinzi.com/html/keywordhelp.html' ), array(
'name'=>urlencode(\校历\ 'type'=>'view',
'url'=>'http://202.195.67.106/AppCalendar/Home/?nsukey=c1QQ9RxX0eDQY1QW+eCg2Umk7PPrLvC9MxEaCANTyqI2tvv/c/xa3MLhyKJJOHmO9QHJHmD8C+HSg+01P1ujSg==' ) ) ) ) );
$jsonmenu = my_json_encode($arr,'text');
//转换为json数据 echo $jsonmenu; // echo $jsonmenu;
19
// $jsonmenu = urldecode($jsonmenu);
$access_token = get_token();
$url = \//调用创建自定义菜单的接口 $result = https_request($url, $jsonmenu); echo $result;
基于微信的辅助教学系统的设计与实现
我在定义自定义菜单时,为了方便书写,首先将菜单写为了层次的数组格式,然后调用my_json_encode函数将数组转化为json格式,传送那个给服务器接口,完成自定义菜单创建。外层的数组定义了一级菜单,内层数组定义了二级菜单。菜单的种类包括链接及模拟关键词。定义type为view时菜单为链接,当定义菜单属性为click时,代表了菜单为模拟关键词,key定义了关键词的值。如:
array(
'name'=>urlencode(\查看作业\ 'type'=>'click', 'key'=>'viewwork' ) ,
定义了一个类型为模拟关键词,关键词为viewwork,显示的名称为查看作业的二级菜单。定义了教师、学生、我的,三个一级菜单,定义了其中的二级2菜单。如图4-4所示。
图 4-4自定义菜单
4.3.5 基本的框架和消息处理接口
微信公众账号的直接交互是通过消息的相应和处理来完成的。主要通过responseMsg(),receviveText(),receiveEvent(),等函数来实现对信息或事件的处理相应以及对点击菜单的相应。主要的实现如下:
public function responseMsg() {//echo \
//接收微新传过来的xml消息数据
$postStr = $GLOBALS[\TA\
//如果接收到了就处理并回复
20
if (!empty($postStr)){
//将接收到的XML字符串写入日志, 用R标记表示接收消息 $this->logger(\ //将接收的消息处理返回?
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
//从消息对象中获取消息的类text image location voice vodeo link $RX_TYPE = trim($postObj->MsgType);
//消息类型分离, 通过RX_TYPE类型作为判断每个方法都需要将对象$postObj传入 switch ($RX_TYPE) {
case \消息为事件类型
$result = $this->receiveEvent($postObj); break;
基于微信的辅助教学系统的设计与实现
case \消息为文本类型
$result = $this->receiveText($postObj); //接收文本消息 break;
case \消息为链接类型
$result = $this->receiveLink($postObj); //接收链接消息 break; default:
$result = \ //未知的消息类型 break; }
//输出消息给微信 echo $result; }else {
//如果没有消息则输出空,并推出 echo \ exit; } }
//接收事件消息
private function receiveEvent($object) { //包含函数
//include \
//临时定义1个变量, 不同的事件发生给用户反馈不同的内容
21