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

287 lines
13 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代码
```php
<?php
namespace LaneWeChat\Core;
class WechatRequest{
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;
}
public static function text(&$request){
$content = '收到文本消息';
return ResponsePassive::text($request['fromusername'], $request['tousername'], $content);
}
public static function image(&$request){
$content = '收到图片';
return ResponsePassive::text($request['fromusername'], $request['tousername'], $content);
}
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);
}
}
public static function video(&$request){
$content = '收到视频';
return ResponsePassive::text($request['fromusername'], $request['tousername'], $content);
}
public static function shortvideo(&$request){
$content = '收到小视频';
return ResponsePassive::text($request['fromusername'], $request['tousername'], $content);
}
public static function location(&$request){
$content = '收到上报的地理位置';
return ResponsePassive::text($request['fromusername'], $request['tousername'], $content);
}
public static function link(&$request){
$content = '收到连接';
return ResponsePassive::text($request['fromusername'], $request['tousername'], $content);
}
public static function eventSubscribe(&$request){
$content = '欢迎您关注我们的微信,将为您竭诚服务';
return ResponsePassive::text($request['fromusername'], $request['tousername'], $content);
}
public static function eventUnsubscribe(&$request){
$content = '为什么不理我了?';
return ResponsePassive::text($request['fromusername'], $request['tousername'], $content);
}
public static function eventQrsceneSubscribe(&$request){
$content = '欢迎您关注我们的微信,将为您竭诚服务';
return ResponsePassive::text($request['fromusername'], $request['tousername'], $content);
}
public static function eventScan(&$request){
$content = '您已经关注了哦~';
return ResponsePassive::text($request['fromusername'], $request['tousername'], $content);
}
public static function eventLocation(&$request){
$content = '收到上报的地理位置';
return ResponsePassive::text($request['fromusername'], $request['tousername'], $content);
}
public static function eventClick(&$request){
$eventKey = $request['eventkey'];
$content = '收到点击菜单事件您设置的key是' . $eventKey;
return ResponsePassive::text($request['fromusername'], $request['tousername'], $content);
}
public static function eventView(&$request){
$eventKey = $request['eventkey'];
$content = '收到跳转链接事件您设置的key是' . $eventKey;
return ResponsePassive::text($request['fromusername'], $request['tousername'], $content);
}
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);
}
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);
}
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);
}
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);
}
Key = $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);
}
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);
}
public static function eventMassSendJobFinish(&$request){
$status = $request['status'];
$totalCount = $request['totalcount'];
$filterCount = $request['filtercount'];
$sentCount = $request['sentcount'];
$errorCount = $request['errorcount'];
$content = '发送完成,状态是'.$status.'。计划发送总粉丝数为'.$totalCount.'。发送成功'.$sentCount.'人,发送失败'.$errorCount.'人。';
return ResponsePassive::text($request['fromusername'], $request['tousername'], $content);
}
public static function eventTemplateSendJobFinish(&$request){
$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");
}
}
}