php如何接受公众号用户消息并处理?
网友回复
<?php /** * 微信公众平台操作类 */ class WeChat { private $_appid; private $_appsecret; //微信公众平台请求开发者的服务器需要token private $_token; //标识qrcodeticket的类型,是永久还是临时 const QRCODE_TYPE_TEMP = 1; const QRCODE_TYPE_TEMP_STR = 2; const QRCODE_TYPE_LIMIT = 3; const QRCODE_TYPE_LIMIT_STR = 4; /** * 构造函数 * @param string $id appid * @param string $secret app秘钥 */ public function __construct($id, $secret, $token) { $this->_appid = $id; $this->_appsecret = $secret; $this->_token = $token; } /** * 用于第一次验证URl合法性 */ public function firstValid() { //校验签名的合法性 if ($this->_checkSignature()) { //签名合法,告知微信服务器 echo $_GET['echostr']; } } /** * 验证签名 * @return [type] [description] */ private function _checkSignature() { //获取由微信服务器发过来的数据 $signature = $_GET['signature']; $timestamp = $_GET['timestamp']; $nonce = $_GET['nonce']; //开始验证数据 $tmp_arr = array($this->_token, $timestamp, $nonce); sort($tmp_arr, SORT_STRING); $tmp_str = implode($tmp_arr); $tmp_str = sha1($tmp_str); //对比数据 if ($signature == $tmp_str) { return true; } else { return false; } } /** * 消息类型判断 * @return array */ public function responseMsg() { //因为很多都设置了register_globals禁止,不能用$GLOBALS["HTTP_RAW_POST_DATA"] 改用file_get_contents("php://input")即可 $postStr = file_get_contents("php://input"); if (!empty($postStr)) { $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); $RX_TYPE = trim($postObj->MsgType); //用户发送的消息类型判断 switch ($RX_TYPE) { case "text": //文本消息 return array('type' => 'text', 'msg' => '文本', 'obj' => $postObj); break; case "image": //图片消息 return array('type' => 'image', 'msg' => '图片', 'obj' => $postObj); break; case "voice": //语音消息 return array('type' => 'voice', 'msg' => '语音', 'obj' => $postObj); break; case "video": //视频消息 return array('type' => 'video', 'msg' => '视频', 'obj' => $postObj); break; case "location"://位置消息 return array('type' => 'location', 'msg' => '位置', 'obj' => $postObj); break; case "link": //链接消息 return array('type' => 'link', 'msg' => '链接', 'obj' => $postObj); break; case "event": //事件消息 return array('type' => 'event', 'msg' => $postObj->Event, 'obj' => $postObj); break; default: return array('type' => 'unknow msg type', 'msg' => '未知', 'obj' => $postObj); break; } } else { echo ""; exit; } } /** * 获取 access_tonken值 * @param string $token_file 用来存储的文件 * @return access_token */ public function getAccessToken($token_file = 'access_token_file') { //处理是否过期问题,将access_token存储到文件 $life_time = 7200; if (file_exists($token_file) && time() - filemtime($token_file) < $life_time) { // 存在有效的access_token 直接返回文件内容 return f...
点击查看剩余70%
DLNA与UPnP的区别和不同?
苏超自建抢票app,通过先预约再抽签化解高并发抢票?
python如何让给电脑在局域网中伪装成电视接收手机的投屏图片视频播放?
如何结合python+js如何自己的视频编码与加密播放直播?
python如何在电脑上通过局域网将本地视频或m3u8视频投屏电视播放?
腾讯视频爱奇艺优酷vip电影电视剧视频如何通过python绕过vip收费直接观看?
有没有可免费观看全球电视台直播m3u8地址url的合集?
有没有实现观影自由的免vip影视苹果 CMS V10 API的可用url?
python如何实时检测电脑usb插入检测报警?
如何判断真人操作的鼠标移动直线轨迹与机器操作的轨迹?