放到SAE中 ,请问这是怎么回事? 出错地方如下:
$foreach($arr_item as $item) {
$item_str .=sprintf($itemTpl,$item['Title'],$item['Description'],$item['PicUrl'],$item['Url']);
}
代码贴到下面,望各位大神解决这个问题!
<?php
//define your token
define("TOKEN", "weixin");//这里填写的是你在微信上设置的TOKEN,但是必须保证与微信公众平台 接口配置信息一致
$wechatObj = new wechatCallbackapiTest();
$wechatObj->valid();//这里是测试网站配置信息和开发的是否一致。
$wechatObj->responseMsg();//新增加这一项,目的是调用responseMsg()这个功能。
class wechatCallbackapiTest
{
//若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,否则接入失败。
public function valid()
{
$echoStr = $_GET["echostr"];
//alid signature , option
if($this->checkSignature()){
echo $echoStr;
exit;
}
}
public function responseMsg()
{
$postStr = $GLOBALS["HTTP_RAW_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->receiveText($postObj);
break;
case "image":
$resultStr = $this->receiveImage($postObj);
break;
case "location":
$resultStr = $this->receiveLocation($postObj);
break;
case "voice":
$resultStr = $this->receiveVoice($postObj);
break;
case "video":
$resultStr = $this->receiveVideo($postObj);
break;
case "link":
$resultStr = $this->receiveLink($postObj);
break;
case "event":
$resultStr = $this->receiveEvent($postObj);
break;
default:
$resultStr = "unknow msg type: ".$RX_TYPE;
break;
}
echo $resultStr;
}else {
echo "";
exit;
}
}
/*文本消息->1*/
private function receiveText($object){
$keyword = trim($object->Content);
if(!empty($keyword)){
$url = "http://www.tuling123.com/openapi/api?key=a2fcd4181d8aa942ca2e078b1c479684&info=".$keyword;
$data = file_get_contents($url);
$text =json_decode($data,ture);
$content = $text['text'];
$result =$this->transmitText($object,$content);
}
else if($keyword=="图文"||$keyword=="单图文"){
$content = array();
$content[]=array("Title"=>"单图文标题",
"Descrption"=>"单图文内容",
"PicUrl"=>"http://v1.qzone.cc/pic/201602/12/15/12/56bd85d5cb22d067.jpg%21600x600.jpg",
"Url"=>"http://m.cnblogs.com/?u=txw1958");
$result = $this->transmitNews($object,$content);
}
else if($keyword=="多图文"){
$content = array();
$content[]=array("Title"=>"多图文标题1",
"Descrption"=>"图文内容",
"PicUrl"=>"http://v1.qzone.cc/pic/201602/12/15/12/56bd85d5cb22d067.jpg%21600x600.jpg",
"Url"=>"http://m.cnblogs.com/?u=txw1958");
$content[]=array("Title"=>"多图文标题2",
"Descrption"=>"图文内容",
"PicUrl"=>"http://v1.qzone.cc/pic/201602/12/15/12/56bd85d5cb22d067.jpg%21600x600.jpg",
"Url"=>"http://m.cnblogs.com/?u=txw1958");
$content[]=array("Title"=>"多图文标题3",
"Descrption"=>"图文内容",
"PicUrl"=>"http://v1.qzone.cc/pic/201602/12/15/12/56bd85d5cb22d067.jpg%21600x600.jpg",
"Url"=>"http://m.cnblogs.com/?u=txw1958");
$result = $this->transmitNews($object,$content);
}else if($keyword=="音乐"){
$content = array("Title"=>"七月上",
"Descrption"=>"jam",
"MusicUrl"=>"http://sc1.111ttt.com/2015/5/12/28/105281351446.mp3",
"HQMusicUrl"=>"http://sc1.111ttt.com/2015/5/12/28/105281351446.mp3");
$result = $this->transmitMusic($object,$content);
}
return $result;
}
/*图片消息->1*/
private function receiveImage($object){
$content=array("MediaId"=>$object->MediaId);
$result = $this->transmitImage($object,$content);
return $result;
}
/*回复语音消息->1*/
private function receiveVoice($object){
$content=array("MediaId"=>$object->MediaId);
$result =$this->transmitVoice($object,$content);
return $result;
}
/*回复视频消息->*/
private function receiveVideo($object){
$content=array("MediaId"=>$object->MediaId,
"ThumbMediaId"=>$object->ThumbMediaId,
"Title"=>"",
"Descrption"=>"");
$result=$this->transmitVideo($object,$content);
return $result;
}
/*回复文本消息->xml*/
private function transmitText($object,$content){
$textTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[%s]]></Content>
</xml>";
$result = sprintf($textTpl,$object->FromUserName,$object->ToUserName,time(),$content);
return $result;
}
/*回复图片消息xml*/
private function transmitImage($object,$imageArray){
$itemTpl = "<Image>
<MediaId><![CDATA[%s]]></MediaId>
</Image>";
$item_str = sprintf($itemTpl,$imageArray['MediaId']);
$textTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[image]]></MsgType>
$item_str
</xml>";
$result = sprintf($textTpl,$object->FromUserName,$object->ToUserName,time());
return $result;
}
/*回复语音消息xml*/
private function transmitVoice($object,$voiceArray){
$itemTpl = "<Voice>
<MediaId><![CDATA[%s]]></MediaId>
</Voice>";
$item_str = sprintf($itemTpl,$voiceArray['MediaId']);
$textTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[image]]></MsgType>
$item_str
</xml>";
$result = sprintf($textTpl,$object->FromUserName,$object->ToUserName,time());
return $result;
}
/*回复视频消息Xml*/
private function transmitVideo($object,$videoArray){
$itemTpl = "<Video>
<MediaId><![CDATA[%s]]></MediaId>
<ThumbMediaId><![CDATA[%s]]></ThumbMediaId>
<Title><![CDATA[%s]]></Title>
<Descrption><![CDATA[%s]]></Descrption>
</Video>";
$item_str = sprintf($itemTpl,$videoArray['MediaId'],$videoArray['ThumbMediaId'],$videoArray['Title'],$videoArray['Descrption']);
$textTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[image]]></MsgType>
$item_str
</xml>";
$result = sprintf($textTpl,$object->FromUserName,$object->ToUserName,time());
return $result;
}
/*回复图文消息xml*/
private function transmitNews($object,$arr_item){
if(!is_array($arr_item))
return;
$itemTpl = "<item>
<Title><![CDATA[%s]]></Title>
<Description><![CDATA[%s]]></Description>
<PicUrl><![CDATA[%s]]></PicUrl>
<Url><![CDATA[%s]]></Url>
</item>";
$item_str = "";
$foreach($arr_item as $item) {
$item_str .=sprintf($itemTpl,$item['Title'],$item['Description'],$item['PicUrl'],$item['Url']);
}
$newsTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[news]]></MsgType>
<ArticleCount>%s</ArticleCount>
<Articles>
$item_str
</Articles>
</xml>";
$result = sprintf($newsTpl,$object->FromUserName,$object->ToUserName,time(),count($arr_item));
return $result;
}
/*回复音乐xml*/
private function transmitMusic($object,$musicArray){
$itemTpl = "<Music>
<Title><![CDATA[%s]]></Title>
<Description><![CDATA[%s]]></Description>
<MusicUrl><![CDATA[%s]]></MusicUrl>
<HQMusicUrl><![CDATA[%s]]></HQMusicUrl>
</Music>";
$item_str = sprintf($itemTpl,$musicArray['Title'],$musicArray['Description'],$musicArray['MusicUrl'],$musicArray['HQMusicUrl']);
$textTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[music]]></MsgType>
$item_str
</xml>";
$result=sprintf($textTpl,$object->FromUserName,$object->ToUserName,time());
return $result;
}
// 开发者通过检验signature对请求进行校验
private function checkSignature() {
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];
$token = TOKEN;
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );
if( $tmpStr == $signature ){
return true;
}else{
return false;
}
}
}
?>
foreach
不是变量,为什么前面有个$
?