求助,php貌似有语法错误
php吧
全部回复
仅看楼主
level 2
11n987 楼主
我最近在利用discuz和微信结合做查询作业的功能,但目前遇到在微信调接口时token验证过不去,用调试工具报请求失败,用Chrome访问报500.现在我该怎么办?用另一正常文件删去分号即报500,但是我检查过,分号一个不少,括号都完整,求大神帮助。
ps:这个php是按照微信公众平台的sample改的
2016年04月02日 00点04分 1
level 2
11n987 楼主
代码见:https://xas7.cn/wechat/api/wxapi5.php
<?php
/**
* wechat php test
*/
//define your token
define("TOKEN", "jq***********t");
$wechatObj = new wechatCallbackapiTest();
$echoStr = $_GET["echostr"];
$con = mysql_connect("localhost","r***","d*************************************");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}else{
mysql_query("SET NAMES UTF8");
mysql_query("set character_set_client=utf8");
mysql_query("set character_set_results=utf8");
}
if (!$echoStr){
echo "Hello world!";
$wechatObj->responseMsg();
}else{
$wechatObj->valid();
}
class wechatCallbackapiTest
{
public function valid()
{
//valid signature , option
if($this->checkSignature()){
echo $echoStr;
exit;
}
}
public function responseMsg()
{
if (!$this->check){
die(Access Denied!);
}
//get post data, May be due to the different environments
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
//extract post data
if (!empty($postStr)){
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
$RX_TYPE = trim($postObj->MsgType);
switch($RX_TYPE)
{
case "text":
$resultStr = $this->handleText($postObj);
break;
case "event":
$resultStr = $this->handleEvent($postObj);
break;
default:
$resultStr = "Unknow msg type: ".$RX_TYPE;
break;
}
echo $resultStr;
}else {
echo "";
exit;
}
}
public function handleText($postObj)
{
$fromUsername = $postObj->FromUserName;
$toUsername = $postObj->ToUserName;
$keyword = trim($postObj->Content);
$time = time();
$textTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<Content><![CDATA[%s]]></Content>
<FuncFlag>0</FuncFlag>
</xml>";
if(!empty( $keyword ))
{
$msgType = "text";
if($keyword=="语文作业"){
/*$sql = "SELECT message FROM (select max(position),message from ultrax.pre_forum_post where (tid=61 and first<>1)) temp WHERE (message<>'');";
$Chomework = mysql_query($sql,$con);*/
$sql = "SELECT message FROM ( select position,message from pre_forum_post where (tid=61 and position>1 and message<>'') ) temp order by position desc;";
mysql_select_db("ultrax", $con);
$result = mysql_query($sql);
if(!$result){die("Valid result!");}
$row = mysql_fetch_row($result, MYSQL_NUM);
if(!$row){die("Valid row!");}
  $contentStr = $row[0];
}elseif($keyword=="数学作业"){
/*$sql = "SELECT message FROM (select max(position),message from ultrax.pre_forum_post where (tid=60 and first<>1)) temp WHERE (message<>'');";
$Mhomework = mysql_query($sql,$con);*/
$sql = "SELECT message FROM ( select position,message from pre_forum_post where (tid=60 and position>1 and message<>'') ) temp order by position desc;";
mysql_select_db("ultrax", $con);
$result = mysql_query($sql);
if(!$result){die("Valid result!");}
$row = mysql_fetch_row($result, MYSQL_NUM);
if(!$row){die("Valid row!");}
  $contentStr = $row[0];
}elseif{$keyword=="英语作业"}{
/*$sql = "SELECT message FROM (select max(position),message from ultrax.pre_forum_post where (tid=59 and first<>1)) temp WHERE (message<>'');";
$Ehomework = mysql_query($sql,$con);*/
$sql = "SELECT message FROM ( select position,message from pre_forum_post where (tid=59 and position>1 and message<>'') ) temp order by position desc;";
mysql_select_db("ultrax", $con);
$result = mysql_query($sql);
if(!$result){die("Valid result!");}
$row = mysql_fetch_row($result, MYSQL_NUM);
if(!$row){die("Valid row!");}
  $contentStr = $row[0];
}else{
  $contentStr = "感谢您关注【CSBS107】"."\n"."微信订阅号:CSBS107"."\n"."我们为您提供相关信息查询,做最好的班级微信平台。"."\n"."目前平台功能如下:"."\n"."【1】 查当日作业,如输入:语文作业"."\n"."更多内容,敬请期待...";
}
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
echo $resultStr;
}else{
echo "Input something...";
}
}
public function handleEvent($object)
{
$contentStr = "";
switch ($object->Event)
{
case "subscribe":
$contentStr = "感谢您关注【CSBS107】"."\n"."微信订阅号:CSBS107"."\n"."我们为您提供相关信息查询,做最好的班级微信平台。"."\n"."目前平台功能如下:"."\n"."【1】 查当日作业,如输入:语文作业"."\n"."更多内容,敬请期待...";
break;
default :
$contentStr = "Unknow Event: ".$object->Event;
break;
}
$resultStr = $this->responseText($object, $contentStr);
return $resultStr;
}
public function responseText($object, $content, $flag=0)
{
$textTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[%s]]></Content>
<FuncFlag>%d</FuncFlag>
</xml>";
$resultStr = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $content, $flag);
return $resultStr;
}
/*private function checkSignature()
{
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];
$token = TOKEN;
//$tmpArr = array();
sort($token, $timestamp, $nonce);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );
if( $tmpStr == $signature ){
return true;
}else{
return false;
}
}*/
private function checkSignature()
{
// you must define TOKEN by yourself
if (!defined("TOKEN")) {
throw new Exception('TOKEN is not defined!');
}
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];
$token = TOKEN;
$tmpArr = array($token, $timestamp, $nonce);
// use SORT_STRING rule
sort($tmpArr, SORT_STRING);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );
if( $tmpStr == $signature ){
return true;
}else{
return false;
}
}
}
?>
2016年04月02日 00点04分 2
level 9
500是服务器端问题,贴代码看看
2016年04月11日 11点04分 10
代码已被恢复,问题找到了,有一处防止注入的地方字符串没带引号
2016年07月11日 10点07分
1