|
|
<?php
|
|
|
namespace LaneWeChat\Core;
|
|
|
|
|
|
/**
|
|
|
* 处理请求
|
|
|
* Created by Lane.
|
|
|
* User: lane
|
|
|
* Date: 13-12-19
|
|
|
* Time: 下午11:04
|
|
|
* Mail: lixuan868686@163.com
|
|
|
* Website: http://www.lanecn.com
|
|
|
*/
|
|
|
|
|
|
class WechatRequest{
|
|
|
/**
|
|
|
* @description 分发请求
|
|
|
* @param $request 请求数据
|
|
|
* @return array|string 返回处理结果
|
|
|
*/
|
|
|
public static function switchType(&$request){
|
|
|
$data = array();
|
|
|
switch ($request['msgtype']) {
|
|
|
//事件
|
|
|
case 'event':
|
|
|
$request['event'] = strtolower($request['event']);
|
|
|
switch ($request['event']) {
|
|
|
//关注
|
|
|
case 'subscribe':
|
|
|
//二维码关注
|
|
|
if(isset($request['eventkey']) && isset($request['ticket'])){
|
|
|
$data = self::eventQrsceneSubscribe($request);
|
|
|
//普通关注
|
|
|
}else{
|
|
|
$data = self::eventSubscribe($request);
|
|
|
}
|
|
|
break;
|
|
|
//扫描二维码
|
|
|
case 'scan':
|
|
|
$data = self::eventScan($request);
|
|
|
break;
|
|
|
//地理位置
|
|
|
case 'location':
|
|
|
$data = self::eventLocation($request);
|
|
|
break;
|
|
|
//自定义菜单 - 点击菜单拉取消息时的事件推送
|
|
|
case 'click':
|
|
|
$data = self::eventClick($request);
|
|
|
break;
|
|
|
//自定义菜单 - 点击菜单跳转链接时的事件推送
|
|
|
case 'view':
|
|
|
$data = self::eventView($request);
|
|
|
break;
|
|
|
//自定义菜单 - 扫码推事件的事件推送
|
|
|
case 'scancode_push':
|
|
|
$data = self::eventScancodePush($request);
|
|
|
break;
|
|
|
//自定义菜单 - 扫码推事件且弹出“消息接收中”提示框的事件推送
|
|
|
case 'scancode_waitmsg':
|
|
|
$data = self::eventScancodeWaitMsg($request);
|
|
|
break;
|
|
|
//自定义菜单 - 弹出系统拍照发图的事件推送
|
|
|
case 'pic_sysphoto':
|
|
|
$data = self::eventPicSysPhoto($request);
|
|
|
break;
|
|
|
//自定义菜单 - 弹出拍照或者相册发图的事件推送
|
|
|
case 'pic_photo_or_album':
|
|
|
$data = self::eventPicPhotoOrAlbum($request);
|
|
|
break;
|
|
|
//自定义菜单 - 弹出微信相册发图器的事件推送
|
|
|
case 'pic_weixin':
|
|
|
$data = self::eventPicWeixin($request);
|
|
|
break;
|
|
|
//自定义菜单 - 弹出地理位置选择器的事件推送
|
|
|
case 'location_select':
|
|
|
$data = self::eventLocationSelect($request);
|
|
|
break;
|
|
|
//取消关注
|
|
|
case 'unsubscribe':
|
|
|
$data = self::eventUnsubscribe($request);
|
|
|
break;
|
|
|
//群发接口完成后推送的结果
|
|
|
case 'masssendjobfinish':
|
|
|
$data = self::eventMassSendJobFinish($request);
|
|
|
break;
|
|
|
//模板消息完成后推送的结果
|
|
|
case 'templatesendjobfinish':
|
|
|
$data = self::eventTemplateSendJobFinish($request);
|
|
|
break;
|
|
|
default:
|
|
|
return Msg::returnErrMsg(MsgConstant::ERROR_UNKNOW_TYPE, '收到了未知类型的消息', $request);
|
|
|
break;
|
|
|
}
|
|
|
break;
|
|
|
//文本
|
|
|
case 'text':
|
|
|
$data = self::text($request);
|
|
|
break;
|
|
|
//图像
|
|
|
case 'image':
|
|
|
$data = self::image($request);
|
|
|
break;
|
|
|
//语音
|
|
|
case 'voice':
|
|
|
$data = self::voice($request);
|
|
|
break;
|
|
|
//视频
|
|
|
case 'video':
|
|
|
$data = self::video($request);
|
|
|
break;
|
|
|
//小视频
|
|
|
case 'shortvideo':
|
|
|
$data = self::shortvideo($request);
|
|
|
break;
|
|
|
//位置
|
|
|
case 'location':
|
|
|
$data = self::location($request);
|
|
|
break;
|
|
|
//链接
|
|
|
case 'link':
|
|
|
$data = self::link($request);
|
|
|
break;
|
|
|
default:
|
|
|
return ResponsePassive::text($request['fromusername'], $request['tousername'], '收到未知的消息,我不知道怎么处理');
|
|
|
break;
|
|
|
}
|
|
|
return $data;
|
|
|
}
|
|
|
|
|
|
// ... 其他方法 ...
|
|
|
}
|
|
|
类声明:class WechatRequest 定义了一个名为 WechatRequest 的类,用于处理微信公众号的请求。
|
|
|
switchType方法:用于分发请求。根据请求的类型(msgtype)和事件类型(event),调用相应的处理方法。
|
|
|
事件处理:对于不同类型的事件(如关注、取消关注、扫描二维码等),调用相应的事件处理方法。
|
|
|
消息处理:对于不同类型的消息(如文本、图像、语音等),调用相应的消息处理方法。
|
|
|
默认处理:如果收到未知类型的消息或事件,返回错误信息或默认响应。 |