后台接入-微信公众号服务器开发笔记

个人订阅号:Emin_ink,高三的时候申请的,不能认证,实现功能较少,于是尝试着连接到自己的阿里云服务器,记录一下笔记。

 

准备

首先需要有已备案的域名(可使用二级域名及二级域名的SSL证书)和服务器,以及一个申请好的公众号。(注意个人申请公众号有限制个数)

 

过程

在微信公众号后台,启用服务器配置,设置自己的令牌(Token),随机生成消息加解密密钥,先使用明文模式。

之后,在服务器中,新增网站,添加文件夹,将所使用的域名(或二级域名)跳转至新增的网站,在网站的文件夹中,放置如下php文件,代码如下:

<?php  
/** 
  * wechat php test 
  */  
header('content-type:text/html;charset=utf-8');  
//define your token  
//定义TOKEN密钥
define("TOKEN", "yourtoken");  

//实例化微信对象

 
$wechatObj = new wechatCallbackapiTest();  
if (isset($_GET['echostr'])) {  
    $wechatObj->valid();  
}else{  
    $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)){  
                   $request_xml = simplexml_load_string($xml_str, 'SimpleXMLElement', LIBXML_NOCDATA);
                $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[%s]]></MsgType>  
                            <Content><![CDATA[%s]]></Content>  
							<MediaId>< ![CDATA[media_id] ]></MediaId>
							<Format>< ![CDATA[Format] ]></Format>
							<Recognition><![CDATA[深圳天气怎么样]]></Recognition>
							<MsgId>1234567890123456</MsgId>
                            <FuncFlag>0</FuncFlag>  
                            </xml>";      
							
		
				$type = $postObj->MsgType;//获取用户发来的消息类型(可能是文字,也可能是事件推送)  
$customevent = $postObj->Event;//获取用户是关注还是取消关注  
//当消息类型为事件推送,并且customevent 为 subscribe(关注)的情况时  
if($type == "event" and $customevent == "subscribe")  
{  
    $msgType = "text";  
    $contentStr = "谢谢关注<a href='https://Emin.ink'>Emin.ink</a>" ;
    $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);  
    echo $resultStr;  
}  
if($msgType=="voice"){  
                       $msgType="text";  
                      $recognition = $postObj->Recognition;
					  $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);  
    echo $resultStr;
            } else{ 
		  
							         
               if(!empty( $keyword ))  
                {  
				
			//关键字回复-----关键字回复-----关键字回复-----关键字回复-----关键字回复-----关键字回复-----关键字回复-----关键字回复-----关键字回复-----关键字回复-----
                    $msgType = "text";  
					
					if($keyword == "ip" || $keyword == "ip查询" || $keyword == "IP查询" || $keyword == "Ip查询 " || $keyword == "Ip " || $keyword == "IP查询 " )  
{  
    $contentStr = "<a href='https://wx.api.emin.ink/whois/whois.php'>点击查询whois</a>";  
}  
                    else if($keyword == "Dos" || $keyword == "DOS查询" || $keyword == "dos" || $keyword == "DOS")  
{  
    $contentStr = "<a href='http://www.200yi.com/webdos/webdos.asp'>在线DOS模拟</a>";  
}  
else if($keyword == "吃什么" || $keyword == "吃饭" || $keyword == "抽奖" || $keyword == "吃")  
{  
    $contentStr = "<a href='http://eat.beats.red'>点这里决定吃什么</a>";  
}  

else  
{  
    $contentStr = "Welcome to wechat world!";  
}  
					
                   
                    $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;  
        }  
    }  
	
	
} 
?>  

 

并自定义命名文件名称,需要修改好默认启动主页(默认启动类似index.html)。访问后即可。

注*善用微信提供的接口调试功能

— 于 共码了3128个字
— 文内使用到的标签:
Emin.ink Emin.ink Emin.ink

评论已关闭。