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

167 lines
7.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调用相应的处理方法。
事件处理:对于不同类型的事件(如关注、取消关注、扫描二维码等),调用相应的事件处理方法。
消息处理:对于不同类型的消息(如文本、图像、语音等),调用相应的消息处理方法。
默认处理:如果收到未知类型的消息或事件,返回错误信息或默认响应。
'''
WechatRequest 类是微信公众号开发中的核心组件,负责接收和处理用户通过微信服务器发送的各种请求。以下是对该类主要功能的总结:
类概述:
WechatRequest 类定义在 LaneWeChat\Core 命名空间下,由开发者 Lane 创建,用于处理微信公众号的请求。
主要功能:
请求分发switchType 方法是类的入口点,它根据请求的 msgtype消息类型和 event事件类型来决定调用相应的处理函数。
事件处理:
对于事件类型的消息如用户关注、取消关注、扫描二维码等switchType 方法会进一步判断 event 类型,并调用相应的处理函数,如 eventSubscribe、eventUnsubscribe、eventScan 等。
消息处理:
对于非事件类型的消息如文本、图片、语音、视频等switchType 方法会直接调用对应的处理函数,如 text、image、voice、video 等。
默认响应:
如果收到的请求类型未知,即不匹配任何已定义的 msgtype 或 event 类型switchType 方法将返回一个默认的文本消息,告知用户收到了未知类型的消息。
错误处理:
在处理未知事件类型时switchType 方法会调用 Msg::returnErrMsg 函数返回一个错误信息,错误类型由 MsgConstant::ERROR_UNKNOW_TYPE 定义。
扩展性:
类中还预留了其他方法的占位符(// ... 其他方法 ...),这表明 WechatRequest 类可以根据需要进一步扩展,以处理更多的请求类型或业务逻辑。
代码组织:
类中的代码组织遵循了单一职责原则,每个处理函数负责一种特定类型的请求,使得代码易于维护和扩展。
命名规范:
类、方法和变量的命名都遵循了一定的规范,如 switchType 表示该方法用于切换处理不同类型的请求eventSubscribe 表示处理用户订阅事件的方法。
通过上述设计WechatRequest 类为微信公众号提供了一个灵活、可扩展且易于维护的消息和事件处理机制。
'''