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%


