Update wechatrequest.lib.php

src
pfspx4a7z 6 months ago
parent 6831003a82
commit 0b861dbf90

@ -1,5 +1,6 @@
<?php
namespace LaneWeChat\Core;
/**
* 处理请求
* Created by Lane.
@ -12,9 +13,9 @@ namespace LaneWeChat\Core;
class WechatRequest{
/**
* @descrpition 分发请求
* @param $request
* @return array|string
* @description 分发请求
* @param $request 请求数据
* @return array|string 返回处理结果
*/
public static function switchType(&$request){
$data = array();
@ -125,330 +126,10 @@ class WechatRequest{
return $data;
}
/**
* @descrpition 文本
* @param $request
* @return array
*/
public static function text(&$request){
$content = '收到文本消息';
return ResponsePassive::text($request['fromusername'], $request['tousername'], $content);
}
/**
* @descrpition 图像
* @param $request
* @return array
*/
public static function image(&$request){
$content = '收到图片';
return ResponsePassive::text($request['fromusername'], $request['tousername'], $content);
}
/**
* @descrpition 语音
* @param $request
* @return array
*/
public static function voice(&$request){
if(!isset($request['recognition'])){
$content = '收到语音';
return ResponsePassive::text($request['fromusername'], $request['tousername'], $content);
}else{
$content = '收到语音识别消息,语音识别结果为:'.$request['recognition'];
return ResponsePassive::text($request['fromusername'], $request['tousername'], $content);
}
}
/**
* @descrpition 视频
* @param $request
* @return array
*/
public static function video(&$request){
$content = '收到视频';
return ResponsePassive::text($request['fromusername'], $request['tousername'], $content);
}
/**
* @descrpition 视频
* @param $request
* @return array
*/
public static function shortvideo(&$request){
$content = '收到小视频';
return ResponsePassive::text($request['fromusername'], $request['tousername'], $content);
}
/**
* @descrpition 地理
* @param $request
* @return array
*/
public static function location(&$request){
$content = '收到上报的地理位置';
return ResponsePassive::text($request['fromusername'], $request['tousername'], $content);
}
/**
* @descrpition 链接
* @param $request
* @return array
*/
public static function link(&$request){
$content = '收到连接';
return ResponsePassive::text($request['fromusername'], $request['tousername'], $content);
}
/**
* @descrpition 关注
* @param $request
* @return array
*/
public static function eventSubscribe(&$request){
$content = '欢迎您关注我们的微信,将为您竭诚服务';
return ResponsePassive::text($request['fromusername'], $request['tousername'], $content);
}
/**
* @descrpition 取消关注
* @param $request
* @return array
*/
public static function eventUnsubscribe(&$request){
$content = '为什么不理我了?';
return ResponsePassive::text($request['fromusername'], $request['tousername'], $content);
}
/**
* @descrpition 扫描二维码关注(未关注时)
* @param $request
* @return array
*/
public static function eventQrsceneSubscribe(&$request){
$content = '欢迎您关注我们的微信,将为您竭诚服务';
return ResponsePassive::text($request['fromusername'], $request['tousername'], $content);
}
/**
* @descrpition 扫描二维码(已关注时)
* @param $request
* @return array
*/
public static function eventScan(&$request){
$content = '您已经关注了哦~';
return ResponsePassive::text($request['fromusername'], $request['tousername'], $content);
}
/**
* @descrpition 上报地理位置
* @param $request
* @return array
*/
public static function eventLocation(&$request){
$content = '收到上报的地理位置';
return ResponsePassive::text($request['fromusername'], $request['tousername'], $content);
}
/**
* @descrpition 自定义菜单 - 点击菜单拉取消息时的事件推送
* @param $request
* @return array
*/
public static function eventClick(&$request){
//获取该分类的信息
$eventKey = $request['eventkey'];
$content = '收到点击菜单事件您设置的key是' . $eventKey;
return ResponsePassive::text($request['fromusername'], $request['tousername'], $content);
}
/**
* @descrpition 自定义菜单 - 点击菜单跳转链接时的事件推送
* @param $request
* @return array
*/
public static function eventView(&$request){
//获取该分类的信息
$eventKey = $request['eventkey'];
$content = '收到跳转链接事件您设置的key是' . $eventKey;
return ResponsePassive::text($request['fromusername'], $request['tousername'], $content);
}
/**
* @descrpition 自定义菜单 - 扫码推事件的事件推送
* @param $request
* @return array
*/
public static function eventScancodePush(&$request){
//获取该分类的信息
$eventKey = $request['eventkey'];
$content = '收到扫码推事件的事件您设置的key是' . $eventKey;
$content .= '。扫描信息:'.$request['scancodeinfo'];
$content .= '。扫描类型(一般是qrcode)'.$request['scantype'];
$content .= '。扫描结果(二维码对应的字符串信息)'.$request['scanresult'];
return ResponsePassive::text($request['fromusername'], $request['tousername'], $content);
}
/**
* @descrpition 自定义菜单 - 扫码推事件且弹出“消息接收中”提示框的事件推送
* @param $request
* @return array
*/
public static function eventScancodeWaitMsg(&$request){
//获取该分类的信息
$eventKey = $request['eventkey'];
$content = '收到扫码推事件且弹出“消息接收中”提示框的事件您设置的key是' . $eventKey;
$content .= '。扫描信息:'.$request['scancodeinfo'];
$content .= '。扫描类型(一般是qrcode)'.$request['scantype'];
$content .= '。扫描结果(二维码对应的字符串信息)'.$request['scanresult'];
return ResponsePassive::text($request['fromusername'], $request['tousername'], $content);
}
/**
* @descrpition 自定义菜单 - 弹出系统拍照发图的事件推送
* @param $request
* @return array
*/
public static function eventPicSysPhoto(&$request){
//获取该分类的信息
$eventKey = $request['eventkey'];
$content = '收到弹出系统拍照发图的事件您设置的key是' . $eventKey;
$content .= '。发送的图片信息:'.$request['sendpicsinfo'];
$content .= '。发送的图片数量:'.$request['count'];
$content .= '。图片列表:'.$request['piclist'];
$content .= '。图片的MD5值开发者若需要可用于验证接收到图片'.$request['picmd5sum'];
return ResponsePassive::text($request['fromusername'], $request['tousername'], $content);
}
/**
* @descrpition 自定义菜单 - 弹出拍照或者相册发图的事件推送
* @param $request
* @return array
*/
public static function eventPicPhotoOrAlbum(&$request){
//获取该分类的信息
$eventKey = $request['eventkey'];
$content = '收到弹出拍照或者相册发图的事件您设置的key是' . $eventKey;
$content .= '。发送的图片信息:'.$request['sendpicsinfo'];
$content .= '。发送的图片数量:'.$request['count'];
$content .= '。图片列表:'.$request['piclist'];
$content .= '。图片的MD5值开发者若需要可用于验证接收到图片'.$request['picmd5sum'];
return ResponsePassive::text($request['fromusername'], $request['tousername'], $content);
}
/**
* @descrpition 自定义菜单 - 弹出微信相册发图器的事件推送
* @param $request
* @return array
*/
public static function eventPicWeixin(&$request){
//获取该分类的信息
$eventKey = $request['eventkey'];
$content = '收到弹出微信相册发图器的事件您设置的key是' . $eventKey;
$content .= '。发送的图片信息:'.$request['sendpicsinfo'];
$content .= '。发送的图片数量:'.$request['count'];
$content .= '。图片列表:'.$request['piclist'];
$content .= '。图片的MD5值开发者若需要可用于验证接收到图片'.$request['picmd5sum'];
return ResponsePassive::text($request['fromusername'], $request['tousername'], $content);
}
/**
* @descrpition 自定义菜单 - 弹出地理位置选择器的事件推送
* @param $request
* @return array
*/
public static function eventLocationSelect(&$request){
//获取该分类的信息
$eventKey = $request['eventkey'];
$content = '收到点击跳转事件您设置的key是' . $eventKey;
$content .= '。发送的位置信息:'.$request['sendlocationinfo'];
$content .= '。X坐标信息'.$request['location_x'];
$content .= '。Y坐标信息'.$request['location_y'];
$content .= '。精度(可理解为精度或者比例尺、越精细的话 scale越高)'.$request['scale'];
$content .= '。地理位置的字符串信息:'.$request['label'];
$content .= '。朋友圈POI的名字可能为空'.$request['poiname'];
return ResponsePassive::text($request['fromusername'], $request['tousername'], $content);
}
/**
* 群发接口完成后推送的结果
*
* 本消息有公众号群发助手的微信号“mphelper”推送的消息
* @param $request
*/
public static function eventMassSendJobFinish(&$request){
//发送状态为“send success”或“send fail”或“err(num)”。但send success时也有可能因用户拒收公众号的消息、系统错误等原因造成少量用户接收失败。err(num)是审核失败的具体原因可能的情况如下err(10001), //涉嫌广告 err(20001), //涉嫌政治 err(20004), //涉嫌社会 err(20002), //涉嫌色情 err(20006), //涉嫌违法犯罪 err(20008), //涉嫌欺诈 err(20013), //涉嫌版权 err(22000), //涉嫌互推(互相宣传) err(21000), //涉嫌其他
$status = $request['status'];
//计划发送的总粉丝数。group_id下粉丝数或者openid_list中的粉丝数
$totalCount = $request['totalcount'];
//过滤过滤是指特定地区、性别的过滤、用户设置拒收的过滤用户接收已超4条的过滤准备发送的粉丝数原则上FilterCount = SentCount + ErrorCount
$filterCount = $request['filtercount'];
//发送成功的粉丝数
$sentCount = $request['sentcount'];
//发送失败的粉丝数
$errorCount = $request['errorcount'];
$content = '发送完成,状态是'.$status.'。计划发送总粉丝数为'.$totalCount.'。发送成功'.$sentCount.'人,发送失败'.$errorCount.'人。';
return ResponsePassive::text($request['fromusername'], $request['tousername'], $content);
}
/**
* 群发接口完成后推送的结果
*
* 本消息有公众号群发助手的微信号“mphelper”推送的消息
* @param $request
*/
public static function eventTemplateSendJobFinish(&$request){
//发送状态成功success用户拒收failed:user block其他原因发送失败failed: system failed
$status = $request['status'];
if($status == 'success'){
//发送成功
}else if($status == 'failed:user block'){
//因为用户拒收而发送失败
}else if($status == 'failed: system failed'){
//其他原因发送失败
}
return true;
}
public static function test(){
// 第三方发送消息给公众平台
$encodingAesKey = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFG";
$token = "pamtest";
$timeStamp = "1409304348";
$nonce = "xxxxxx";
$appId = "wxb11529c136998cb6";
$text = "<xml><ToUserName><![CDATA[oia2Tj我是中文jewbmiOUlr6X-1crbLOvLw]]></ToUserName><FromUserName><![CDATA[gh_7f083739789a]]></FromUserName><CreateTime>1407743423</CreateTime><MsgType><![CDATA[video]]></MsgType><Video><MediaId><![CDATA[eYJ1MbwPRJtOvIEabaxHs7TX2D-HV71s79GUxqdUkjm6Gs2Ed1KF3ulAOA9H1xG0]]></MediaId><Title><![CDATA[testCallBackReplyVideo]]></Title><Description><![CDATA[testCallBackReplyVideo]]></Description></Video></xml>";
$pc = new Aes\WXBizMsgCrypt($token, $encodingAesKey, $appId);
$encryptMsg = '';
$errCode = $pc->encryptMsg($text, $timeStamp, $nonce, $encryptMsg);
if ($errCode == 0) {
print("加密后: " . $encryptMsg . "\n");
} else {
print($errCode . "\n");
}
$xml_tree = new \DOMDocument();
$xml_tree->loadXML($encryptMsg);
$array_e = $xml_tree->getElementsByTagName('Encrypt');
$array_s = $xml_tree->getElementsByTagName('MsgSignature');
$encrypt = $array_e->item(0)->nodeValue;
$msg_sign = $array_s->item(0)->nodeValue;
$format = "<xml><ToUserName><![CDATA[toUser]]></ToUserName><Encrypt><![CDATA[%s]]></Encrypt></xml>";
$from_xml = sprintf($format, $encrypt);
// 第三方收到公众号平台发送的消息
$msg = '';
$errCode = $pc->decryptMsg($msg_sign, $timeStamp, $nonce, $from_xml, $msg);
if ($errCode == 0) {
print("解密后: " . $msg . "\n");
} else {
print($errCode . "\n");
}
}
// ... 其他方法 ...
}
类声明class WechatRequest 定义了一个名为 WechatRequest 的类,用于处理微信公众号的请求。
switchType方法用于分发请求。根据请求的类型msgtype和事件类型event调用相应的处理方法。
事件处理:对于不同类型的事件(如关注、取消关注、扫描二维码等),调用相应的事件处理方法。
消息处理:对于不同类型的消息(如文本、图像、语音等),调用相应的消息处理方法。
默认处理:如果收到未知类型的消息或事件,返回错误信息或默认响应。
Loading…
Cancel
Save