CleverCode前一段时间想去接触一下微信开发,申请了一个人订阅号,发现暂不能申请个人认证,而且没有微信接口的很多权限,也没有自定义菜单的权限(开发模式下)。在开发模式下,只能到手公众号里面的回复信息,然后响应。
_interface();
}
/**
* 私有命令接口
*
* @return string 成功返回'OK',失败返回错误信息
*/
private function _interface(){
$request = array();
// 获取参数
$ret = $this->_getRequest($request);
if ($ret != 'OK') {
return $ret;
}
// 检查签名
if (!WeiXinCheck::checkSignature($request["signature"], $request["timestamp"], $request["nonce"])) {
return 'checkSignature retrun false!';
}
// 请求日志
if (!empty($GLOBALS["HTTP_RAW_POST_DATA"])) {
logMsg(HTTP_REQUEST_RESPONSE_LOG, 'REQUEST', $GLOBALS["HTTP_RAW_POST_DATA"]);
}
// 解析文本命令
$cmd = CmdCenter::findCmd($request);
$retArray = array();
$retArray['request'] = $request;
// 执行命令
switch ($cmd) {
// 校验
case 'validate' :
$retMessage = InfoCenter::validate($request, &$retArray);
if ($retMessage != 'OK') {
return;
}
$this->displayUTF8($retArray, 'thxl/validate.html');
break;
// 再来一个
case 'getOneAgain' :
$retMessage = InfoCenter::getOneAgain($request, &$retArray);
if ($retMessage != 'OK') {
return;
}
$this->displayUTF8($retArray, 'thxl/textMsg.html');
break;
// 查看帮助
case 'readHelp' :
$retMessage = InfoCenter::readHelp($request, &$retArray);
if ($retMessage != 'OK') {
return;
}
$this->displayUTF8($retArray, 'thxl/textMsg.html');
break;
// 账户详情
case 'accountDetail' :
$retMessage = InfoCenter::accountDetail($request, &$retArray);
if ($retMessage != 'OK') {
return;
}
$this->displayUTF8($retArray, 'thxl/textMsg.html');
break;
// 兑换奖品
case 'exchangePrizesDescribe' :
$retMessage = InfoCenter::exchangePrizesDescribe($request, &$retArray);
if ($retMessage != 'OK') {
return;
}
$this->displayUTF8($retArray, 'thxl/textMsg.html');
break;
// 挣取金币
case 'earnCoin' :
$retMessage = InfoCenter::earnCoin($request, &$retArray);
if ($retMessage != 'OK') {
return;
}
$this->displayUTF8($retArray, 'thxl/textMsg.html');
break;
// 点赞
case 'dianZan' :
$retMessage = InfoCenter::dianZan($request, &$retArray);
if ($retMessage != 'OK') {
return;
}
$this->displayUTF8($retArray, 'thxl/textMsg.html');
break;
// 我讲一个
case 'addJoke' :
$retMessage = InfoCenter::addJoke($request, &$retArray);
if ($retMessage != 'OK') {
return;
}
$this->displayUTF8($retArray, 'thxl/textMsg.html');
break;
// 我的笑话
case 'myJoke' :
$retMessage = InfoCenter::myJoke($request, &$retArray);
if ($retMessage != 'OK') {
return;
}
$this->displayUTF8($retArray, 'thxl/textMsg.html');
break;
// 金币记录
case 'tradeLog' :
$retMessage = InfoCenter::tradeLog($request, &$retArray);
if ($retMessage != 'OK') {
return;
}
$this->displayUTF8($retArray, 'thxl/textMsg.html');
break;
// 兑换奖品
case 'exchangePrizes' :
$retMessage = InfoCenter::exchangePrizes($request, &$retArray);
if ($retMessage != 'OK') {
return;
}
$this->displayUTF8($retArray, 'thxl/textMsg.html');
break;
// 给客服留言
case 'giveMessage' :
$retMessage = InfoCenter::giveMessage($request, &$retArray);
if ($retMessage != 'OK') {
return;
}
$this->displayUTF8($retArray, 'thxl/textMsg.html');
break;
// 关注
case 'subscribe' :
$retMessage = InfoCenter::subscribe($request, &$retArray);
if ($retMessage != 'OK') {
return;
}
$this->displayUTF8($retArray, 'thxl/textMsg.html');
break;
// 默认
default :
$retMessage = InfoCenter::cmdNotFound($request, &$retArray);
if ($retMessage != 'OK') {
return;
}
$this->displayUTF8($retArray, 'thxl/textMsg.html');
break;
}
}
/**
* 获取请求参数
*
* @param array $request 请求数组
* @return string 成功返回'OK',失败返回错误信息
*/
private function _getRequest(&$request){
// 本机平台
if (SYS_RELEASE == 0) {
$_GET["signature"] = '5b7b4a7c06b3bc4116a2fcbbbb2c887557cd07a6';
$_GET["timestamp"] = '1436056391';
$_GET["nonce"] = '1929760760';
// $_GET["echostr"] = 'this is from echostr';
$fp = fopen(HTTP_RAW_POST_DATA_TEST, "r");
$GLOBALS["HTTP_RAW_POST_DATA"] = fread($fp, filesize(HTTP_RAW_POST_DATA_TEST));
fclose($fp);
}
$request['signature'] = $_GET["signature"];
$request['timestamp'] = $_GET["timestamp"];
$request['nonce'] = $_GET["nonce"];
$request['echostr'] = $_GET["echostr"];
if (isset($GLOBALS["HTTP_RAW_POST_DATA"]) && !empty($GLOBALS["HTTP_RAW_POST_DATA"])) {
$request['post'] = array();
$request['post']['items'] = XmlCenter::xmlToArray($GLOBALS["HTTP_RAW_POST_DATA"]);
if (isset($request['post']['items']['Content'])) {
$request['post']['items']['Content'] = iconv('UTF-8', 'GBK', $request['post']['items']['Content']);
}
$request['post']['string'] = $GLOBALS["HTTP_RAW_POST_DATA"];
// 插入请求日志
UserLog::insertRequestLog($request);
}
return 'OK';
}
}
1436275541
6168756476849070426
'接口验证',
'subscribe' => '关注',
'readHelp' => '查看帮助',
'getOneAgain' => '发布一个',
'accountDetail' => '账户详情',
'earnCoin' => '挣取金币',
'dianZan' => '点赞',
'exchangePrizesDescribe' => '兑换奖品描述',
'addJoke' => '我讲一个',
'myJoke' => '我的笑话',
'tradeLog' => '交易记录',
'exchangePrizes' => '兑换奖品',
'giveMessage' => '给客服留言'
);
// 数字到字符串命令字典
public static $numToCmdStr = array(
'0' => 'readHelp',
'1' => 'getOneAgain',
'2' => 'exchangePrizesDescribe',
'3' => 'earnCoin',
'4' => 'accountDetail',
'5' => 'myJoke',
'6' => 'tradeLog',
'7' => 'addJoke',
'8' => 'dianZan',
'9' => 'giveMessage',
'100' => 'exchangePrizes'
);
/**
* 查找命令
*
* @param array $request 请求数组
* @return string cmd
*/
public static function findCmd($request){
// 验证cmd
$cmd = self::findValidateCmd($request);
if (strlen($cmd) > 0) {
return self::checkCmdValid($cmd);
}
// 查找文本命令
$cmd = self::findTextCmd($request);
if (strlen($cmd) > 0) {
return self::checkCmdValid($cmd);
}
// 查找事件命令
$cmd = self::findEventCmd($request);
if (strlen($cmd) > 0) {
return self::checkCmdValid($cmd);
}
}
/**
* 检查命令的有效性
*
* @param string $cmd 命令
* @return string 有效返回$cmd,否则为空
*/
public static function checkCmdValid($cmd){
if (isset(self::$cmdMap[$cmd])) {
return $cmd;
}
}
/**
* 验证命令
*
* @param array $request 请求数组
* @return string cmd
*/
public static function findValidateCmd($request){
if (isset($request['echostr']) && strlen($request['echostr']) > 0) {
return 'validate';
}
}
/**
* 查找文本命令
*
* @param array $request 请求数组
* @return string cmd
*/
public static function findTextCmd($request){
if (empty($request['post'])) {
return;
}
$msgType = $request['post']['items']['MsgType'];
if ($msgType != 'text') {
return;
}
$content = $request['post']['items']['Content'];
$cmd = trim($content);
$cmd = ltrim($cmd, '【');
$cmd = rtrim($cmd, '】');
if (strpos($cmd, "#") !== false) {
$cmd = substr($cmd, 0, strpos($cmd, "#"));
}
// 大写
$cmd = strtoupper($cmd);
if (!is_numeric($cmd)) {
return;
}
if (isset(self::$numToCmdStr[$cmd])) {
return self::$numToCmdStr[$cmd];
}
}
/**
* 查找事件命令
*
* @param array $request 请求数组
* @return string cmd
*/
public static function findEventCmd($request){
if (empty($request['post'])) {
return;
}
$msgType = $request['post']['items']['MsgType'];
if ($msgType != 'event') {
return;
}
return $request['post']['items']['Event'];
}
}
命令帮助:
********************
0.回复0,查看帮助!
1.回复1,再来一个!
2.回复2,兑换奖品!
3.回复3,挣取金币!
4.回复4,账户详情!
5.回复5,我的笑话!
6.回复6,金币记录!
7.回复7#笑话标题#笑
话正文,我讲一个!
8.回复8#笑话编号,点赞
!
9.回复9#留言内容,给客
服留言!
********************