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

135 lines
5.6 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;
/**
* 处理请求
* 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调用相应的处理方法。
事件处理:对于不同类型的事件(如关注、取消关注、扫描二维码等),调用相应的事件处理方法。
消息处理:对于不同类型的消息(如文本、图像、语音等),调用相应的消息处理方法。
默认处理:如果收到未知类型的消息或事件,返回错误信息或默认响应。