微信公众号,第三方回复服务器后台示例PHP代码

<?php
header("Content-type: application/xml");
header('Access-Control-Allow-Origin:*');
$echostr=$_GET["echostr"];

//写入文件,测试是否连接成功使用,后期删除就行
$myfile = fopen("log.txt", "a+") or die("Unable to open file!");
$txt = $token." |echostr:".$echostr;
fwrite($myfile, $txt);
fclose($myfile);

//确认来自微信
if(checkSignature()){
    //下面这句话这个在验证成功后删除了
    // echo $echostr;
    checkMesessage();
};


//检测是否来自微信的方法
function checkSignature()
{
    $signature = $_GET["signature"];
    $timestamp = $_GET["timestamp"];
    $nonce = $_GET["nonce"];
    
    
    $token = "12FHD90SJ0JM0J0FD";
    $tmpArr = array($token, $timestamp, $nonce);
    sort($tmpArr, SORT_STRING);
    $tmpStr = implode( $tmpArr );
    $tmpStr = sha1( $tmpStr );
    
    if( $tmpStr == $signature ){
        return true;
    }else{
        //false
        return  false;
    }
}


//本方法为接受用户文字信息并原样返回用户发送的文字
function checkMesessage(){
    //获取xml数据包
    $PostData=file_get_contents("php://input");
    if(!$PostData)
    {//未获取到数据包
            echo_server_log("wrong input! PostData is NULL\\n");
            
            echo "wrong input!";
            exit(0);
            
    }
    //转化为xml对象
    $xmlObj=simplexml_load_string($PostData,'SimpleXMLElement',LIBXML_NOCDATA);
    if(!$xmlObj)
    {//转化出错
            echo_server_log("wrong input! xmlObj is NULL\\n");
            echo "wrong input!";
            exit(0);
    }
    //从xml对象中取出
    $fromUserName=$xmlObj->FromUserName;
    $toUserName=$xmlObj->ToUserName;
    $msgType=$xmlObj->MsgType;
    $myfile = fopen("log.txt", "a+") or die("Unable to open file!");
    $txt = "msgType:".$msgType." |FromUserName:".$fromUserName."\n";
    fwrite($myfile, $txt);
    fclose($myfile);


    if('text'!=$msgType)
    {
            $retMsg='只支持文本消息';
            
    }
    else
    {
            $content=$xmlObj->Content;
            $retMsg=$content;
    }
    $timestamp=time();
    
    //返回的xml串,注意一定在代码开头设为返回xml格式

    $retTmp="<xml>
    <ToUserName><![CDATA[".$fromUserName."]]></ToUserName>
    <FromUserName><![CDATA[".$toUserName."]]></FromUserName>
    <CreateTime>".$timestamp."</CreateTime>
    <MsgType><![CDATA[".$msgType."]]></MsgType>
    <Content><![CDATA[".$retMsg."]]></Content>
    </xml>";
    
    echo $retTmp;
}

 

posted @ 2020-09-24 09:47  ggsmdaa  阅读(317)  评论(0编辑  收藏  举报