>  기사  >  백엔드 개발  >  PHP对了,可是对接到微信只返回array

PHP对了,可是对接到微信只返回array

WBOY
WBOY원래의
2016-06-20 12:44:44947검색

$result = mysql_query($sql, $link); // 执行查询语句
 
$res=array();
while($row = mysql_fetch_array($result)){
    if(条件){
        $res[] = $row["title"].$row["answer"];
    }
}
return $res;
?>
用这个之后PHP是对,可是接到微信就变成单独的回复一个array


回复讨论(解决方案)

把数据连接成串,或编码成 json

return json_encode($res);

return json_encode($res);



这个个也不行啊,回复的是乱码

有人会吗,大师吗

在echo json_encode之前,加上:header('Content-type:application/json;charset=utf-8');

在echo json_encode之前,加上:header('Content-type:application/json;charset=utf-8');


 $sql = "select  * FROM `record` WHERE title like '%$keyword%'";
    $result = mysql_query($sql, $link); // 执行查询语句

            
     $res=array();
   
             while($row = mysql_fetch_array($result))
                      {
                 
                       
                  
                  $res[]=$row["title"];
                 
            
                      }
                header('Content-type:application/json;charset=utf-8');
                return json_encode($res);
               mysql_close($link);        
}                                  这次返回的值是[]

在echo json_encode之前,加上:header('Content-type:application/json;charset=utf-8');


会不会是这个有错误?


%s


0


在echo json_encode之前,加上:header('Content-type:application/json;charset=utf-8');


 $sql = "select  * FROM `record` WHERE title like '%$keyword%'";
    $result = mysql_query($sql, $link); // 执行查询语句

            
     $res=array();
   
             while($row = mysql_fetch_array($result))
                      {
                 
                       
                  
                  $res[]=$row["title"];
                 
            
                      }
                header('Content-type:application/json;charset=utf-8');
                return json_encode($res);
               mysql_close($link);        
}                                  这次返回的值是[]
返回值为空?那么直接return "hello world";是什么结果?


在echo json_encode之前,加上:header('Content-type:application/json;charset=utf-8');


会不会是这个有错误?


%s


0


你把0去掉试试。
另外:要返回信息,不应该用return,而是echo
    public function responseMsg(){               //get post data, May be due to the different environments        $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; //接收微信发来的XML数据        //extract post data        if(!empty($postStr)){                            //解析post来的XML为一个对象$postObj            $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);                    $fromUsername = $postObj->FromUserName; //请求消息的用户            $toUsername = $postObj->ToUserName; //"我"的公众号id            $keyword = trim($postObj->Content); //用户发送的消息内容            $time = time(); //时间戳            $msgtype = 'text'; //消息类型:文本            $textTpl = "<xml>                        <ToUserName><![CDATA[%s]]></ToUserName>                        <FromUserName><![CDATA[%s]]></FromUserName>                        <CreateTime>%s</CreateTime>                        <MsgType><![CDATA[%s]]></MsgType>                        <Content><![CDATA[%s]]></Content>                        </xml>";                $contentStr = "输入-h查看帮助吧(=・ω・=)";                $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgtype, $contentStr);                echo $resultStr;



在echo json_encode之前,加上:header('Content-type:application/json;charset=utf-8');


 $sql = "select  * FROM `record` WHERE title like '%$keyword%'";
    $result = mysql_query($sql, $link); // 执行查询语句

            
     $res=array();
   
             while($row = mysql_fetch_array($result))
                      {
                 
                       
                  
                  $res[]=$row["title"];
                 
            
                      }
                header('Content-type:application/json;charset=utf-8');
                return json_encode($res);
               mysql_close($link);        
}                                  这次返回的值是[]
返回值为空?那么直接return "hello world";是什么结果?
抱歉哈,刚才评论错了,
完整的是这个样子的,我压根不知道哪错了

/**
  * wechat php test
  */

//define your token
function chaxun($keyword){
$dbname = 'app_yqweixiaoxi';
//$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 ( SAE_MYSQL_HOST_M . ':' . SAE_MYSQL_PORT, SAE_MYSQL_USER, SAE_MYSQL_PASS );
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_query("set names GBK",$link); 

$sql = "select  * FROM `record` WHERE title like '%$keyword%'";
    $result = mysql_query($sql, $link); // 执行查询语句
     $res=array();
             while($row = mysql_fetch_array($result))
                      {
                  $res[]=$row["title"];
                      }
                header('Content-type:application/json;charset=utf-8');
            return json_encode($res);
               mysql_close($link);        
}                                  
define("TOKEN", "YQweixiaoxi");
$wechatObj = new wechatCallbackapiTest();
$wechatObj->responseMsg();
 

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 = "


%s



";             
if(!empty($keyword ))


                {
$msgType = "text";
               
$contentStr= chaxun($keyword);
 
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
                 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;
}
}
}

?>



在echo json_encode之前,加上:header('Content-type:application/json;charset=utf-8');


 $sql = "select  * FROM `record` WHERE title like '%$keyword%'";
    $result = mysql_query($sql, $link); // 执行查询语句

            
     $res=array();
   
             while($row = mysql_fetch_array($result))
                      {
                 
                       
                  
                  $res[]=$row["title"];
                 
            
                      }
                header('Content-type:application/json;charset=utf-8');
                return json_encode($res);
               mysql_close($link);        
}                                  这次返回的值是[]
返回值为空?那么直接return "hello world";是什么结果?



在echo json_encode之前,加上:header('Content-type:application/json;charset=utf-8');


 $sql = "select  * FROM `record` WHERE title like '%$keyword%'";
    $result = mysql_query($sql, $link); // 执行查询语句

            
     $res=array();
   
             while($row = mysql_fetch_array($result))
                      {
                 
                       
                  
                  $res[]=$row["title"];
                 
            
                      }
                header('Content-type:application/json;charset=utf-8');
                return json_encode($res);
               mysql_close($link);        
}                                  这次返回的值是[]
返回值为空?那么直接return "hello world";是什么结果?
数据库的是这样的

你的表字段是UTF-8,所以应该 mysql_query("set names utf8",$link); 

另外,有个地方稍微改下(改不改都行,不过echo的数据都应该是XML格式的):

if(!empty($keyword )){	$msgType = "text";        	$contentStr = chaxun($keyword);	$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);    echo $resultStr;}else{	$msgType = "text";  	$contentStr = "input something...";    $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);    echo $resultStr;}

你的表字段是UTF-8,所以应该 mysql_query("set names utf8",$link); 

另外,有个地方稍微改下(改不改都行,不过echo的数据都应该是XML格式的):

if(!empty($keyword )){	$msgType = "text";        	$contentStr = chaxun($keyword);	$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);    echo $resultStr;}else{	$msgType = "text";  	$contentStr = "input something...";    $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);    echo $resultStr;}


都改了,还是不行,烦死了,用return返回array,用echo 回复公众号暂停服务

1、你是在做微信应用,而微信都是 utf-8 编码的
所以你 mysql_query("set names GBK",$link); 是不对的
要 mysql_query("set names utf8",$link);
2、你把传入的 utf-8 数据 $keyword 当做 gbk 解释
这就造成了 chaxun 函数返回空数组
当然确实不存在的时候,也是返回空数组的
3、由
$contentStr= chaxun($keyword); 
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
可知,$contentStr 应是一个字符串,而 chaxun 返回的是数组,所以可能需要
$contentStr = json_encode(chaxun($keyword));

$contentStr = join(',', chaxun($keyword));

1、用echo 回复公众号暂停服务====》可能是代码有语法错误或者error,在你的域名里运行这个脚本看看有没有报错。
2、试一下,不进行查找数据库,直接让$contentStr = "字符串";然后echo $resultStr;  看看是不是数据取出问题

1、用echo 回复公众号暂停服务====》可能是代码有语法错误或者error,在你的域名里运行这个脚本看看有没有报错。
2、试一下,不进行查找数据库,直接让$contentStr = "字符串";然后echo $resultStr;  看看是不是数据取出问题


问题解决了,谢谢你,大师傅

1、你是在做微信应用,而微信都是 utf-8 编码的
所以你 mysql_query("set names GBK",$link); 是不对的
要 mysql_query("set names utf8",$link);
2、你把传入的 utf-8 数据 $keyword 当做 gbk 解释
这就造成了 chaxun 函数返回空数组
当然确实不存在的时候,也是返回空数组的
3、由
$contentStr= chaxun($keyword); 
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
可知,$contentStr 应是一个字符串,而 chaxun 返回的是数组,所以可能需要
$contentStr = json_encode(chaxun($keyword));

$contentStr = join(',', chaxun($keyword));


大师啊,大师啊,解决了,佩服啊 
太感谢了
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.