|
|
<?php
|
|
|
namespace LaneWeChat\Core; // 定义命名空间为 LaneWeChat\Core,表示该类属于 LaneWeChat 模块的核心部分
|
|
|
|
|
|
/**
|
|
|
* 微信请求处理类
|
|
|
*
|
|
|
* 该类用于处理微信公众号接收到的各种请求,包括消息和事件。
|
|
|
*
|
|
|
* Created by Lane.
|
|
|
* User: lane
|
|
|
* Date: 13-12-19
|
|
|
* Time: 下午11:04
|
|
|
* Mail: lixuan868686@163.com
|
|
|
* Website: http://www.lanecn.com
|
|
|
*/
|
|
|
class WechatRequest {
|
|
|
|
|
|
/**
|
|
|
* 分发请求
|
|
|
*
|
|
|
* 根据请求的类型(msgtype)和事件类型(event),调用相应的处理方法。
|
|
|
*
|
|
|
* @param array $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;
|
|
|
}
|
|
|
|
|
|
// ... 其他方法 ...
|
|
|
} |