You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
git-test/core/wechatrequest.lib.php

138 lines
5.3 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?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;
}
// ... 其他方法 ...
}