PHP 接入微信公众号

<?php
//index.php 公众号后台配置的路径是这个index.php
$wechatObj = new wechat();
$wechatObj->responseMsg();
class wechat {
    //返回消息模板
    private $textTpl = [
            'text' => "<xml>
                      <ToUserName><![CDATA[%s]]></ToUserName>
                      <FromUserName><![CDATA[%s]]></FromUserName>
                      <CreateTime>%s</CreateTime>
                      <MsgType><![CDATA[%s]]></MsgType>
                      <Content><![CDATA[%s]]></Content>
                      <FuncFlag>0</FuncFlag>
                      </xml>",
            
        ];
    public function responseMsg() {
        // 验证 验证完注释
        // include 'Ruolin_network.php';
        //---------- 接 收 数 据 ---------- //
        $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; //获取POST数据
        //   $postStr = file_get_contents('php://input'); PHP7+ 
        
        //用SimpleXML解析POST过来的XML数据
        $postObj = simplexml_load_string($postStr,'SimpleXMLElement',LIBXML_NOCDATA);
        $fromUsername = $postObj->FromUserName; //获取发送方帐号(OpenID)
        $toUsername = $postObj->ToUserName; //获取接收方账号
        $keyword = trim($postObj->Content); //获取消息内容
        $time = time(); //获取当前时间戳
        //---------- 返 回 数 据 ---------- //
        $msgType = "text"; //消息类型 这里设置这个变量,没有设置不会返回订阅回复的消息
        
        switch($postObj->MsgType){
            case 'event':
                    if ($postObj->Event == 'subscribe') { //如果是订阅事件
                    
                        $contentStr = "欢迎订阅!";
                        $resultStr = sprintf($this->textTpl['text'],$fromUsername,$toUsername,$time,$msgType,$contentStr);
                        echo $resultStr; //输出结果
                        exit;
                    }
                break;
            case 'text':
                    $contentStr = urldecode($keyword);
                    $resultStr = sprintf($this->textTpl['text'],$fromUsername,$toUsername,$time,$msgType,$contentStr);
                    echo $resultStr; //输出结果
                    exit;
                break;
            
            
        }
        
       
    }
     

}
?>
<?php
//Ruolin_network.php

//define your token
define("TOKEN", "填写你的token,随意字符就行");
$wechatObj = new wechatCallbackapiTest();
$wechatObj->valid();
class wechatCallbackapiTest
{
    public function valid()
    {
        $echoStr = $_GET["echostr"];
        //valid signature , option
        if($this->checkSignature()){
            echo $echoStr;
            exit;
        }
    }
    
    private function checkSignature()
    {
        $signature = $_GET["signature"];
        $timestamp = $_GET["timestamp"];
        $nonce = $_GET["nonce"];
        $token = TOKEN;
        $tmpArr = array($token, $timestamp, $nonce);
        sort($tmpArr, SORT_STRING);
        $tmpStr = implode( $tmpArr );
        $tmpStr = sha1( $tmpStr );
        if( $tmpStr == $signature ){
            return true;
        }
        else{
            return false;
        }
    }
}

 

posted @ 2021-04-21 16:28  时间掉飞机  阅读(131)  评论(0编辑  收藏  举报