我使用PHP做了一个微信公众号的根据关键字从数据库调用图片回复,但是只能回复一条图片信息。
求助大神怎么样修改可以回复多图片信息。
具体代码如下:class wechatCallbackapiTest
{
public function valid()
    {
        $echoStr = $_GET["echostr"];        //valid signature , option
        if($this->checkSignature()){
         echo $echoStr;
         exit;
        }
    }    public function responseMsg()
    {
//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);
                $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[news]]></MsgType>
 <ArticleCount>1</ArticleCount>
 <Articles>
 <item>
 <Title><![CDATA[%s]]></Title> 
 <Description><![CDATA[]]></Description>
 <PicUrl><![CDATA[%s]]></PicUrl>
 <Url><![CDATA[%s]]></Url>
 </item>
 </Articles>
 <FuncFlag>1</FuncFlag>
</xml>";             
if(!empty( $keyword ))
                {
             $host = getenv('HTTP_BAE_ENV_ADDR_SQL_IP');
            $port = getenv('HTTP_BAE_ENV_ADDR_SQL_PORT');
            $user = getenv('HTTP_BAE_ENV_AK');
            $pwd = getenv('HTTP_BAE_ENV_SK');
 
/*接着调用mysql_connect()连接服务器*/
$link = @mysql_connect("{$host}:{$port}",$user,$pwd,true);
if(!$link) {
die("Connect Server Failed: " . mysql_error($link));
}
/*连接成功后立即调用mysql_select_db()选中需要连接的数据库*/
if(!mysql_select_db($dbname,$link)) {
die("Select Database Failed: " . mysql_error($link));
}
 
/*至此连接已完全建立,就可对当前数据库进行相应的操作了*/
/*!!!注意,无法再通过本次连接调用mysql_select_db来切换到其它数据库了!!!*/
/* 需要再连接其它数据库,请再使用mysql_connect+mysql_select_db启动另一个连接*/
 
/**
 * 接下来就可以使用其它标准php mysql函数操作进行数据库操作
 */
 mysql_query("set names GBK",$link); 
$sql="SELECT * FROM `bebdy` WHERE `title`like'" . iconv("UTF-8","GBK","%".$keyword."%") . "'";
 $query=mysql_query($sql);
 $rs=mysql_fetch_array($query);
 $c= $rs['thumb'];
 $strthumb=iconv("GBK","UTF-8",$c);
 $d=$rs['url'];
 $strurl=iconv("GBK","UTF-8",$d);
 $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $keyword, $strthumb,$strurl);
                 echo $resultStr;

                }else{
                 echo "Input something...";
                }        }else {
         echo "";
         exit;
        }
    }

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;
}
}
}

解决方案 »

  1.   

      $textTpl = "<xml>
    <ToUserName><![CDATA[%s]]></ToUserName>
    <FromUserName><![CDATA[%s]]></FromUserName>
    <CreateTime>%s</CreateTime>
    <MsgType><![CDATA[news]]></MsgType>
     <ArticleCount>2</ArticleCount>
     <Articles>
     <item>
     <Title><![CDATA[%s]]></Title> 
     <Description><![CDATA[]]></Description>
     <PicUrl><![CDATA[%s]]></PicUrl>
     <Url><![CDATA[%s]]></Url>
     </item>
     <item>
     <Title><![CDATA[%s]]></Title> 
     <Description><![CDATA[]]></Description>
     <PicUrl><![CDATA[%s]]></PicUrl>
     <Url><![CDATA[%s]]></Url>
     </item>

     </Articles>
     <FuncFlag>1</FuncFlag>
    </xml>";    多个item就可以了。参考:http://mp.weixin.qq.com/wiki/1/6239b44c206cab9145b1d52c67e6c551.html#.E5.9B.9E.E5.A4.8D.E5.9B.BE.E6.96.87.E6.B6.88.E6.81.AF
      

  2.   

    是么,官网文档是这样写的,你可以联系下公众号的客服问问。ArticleCount 是 图文消息个数,限制为10条以内
    Articles 是 多条图文消息信息,默认第一个item为大图,注意,如果图文数超过10,则将会无响应