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

个人订阅号: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()){                echoechoStr;  
            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 = "                                                                                                %s                                                                    							< ![CDATA[media_id] ]>  							< ![CDATA[Format] ]>  							  							1234567890123456                              0                                ";type = postObj->MsgType;//获取用户发来的消息类型(可能是文字,也可能是事件推送)customevent = postObj->Event;//获取用户是关注还是取消关注    //当消息类型为事件推送,并且customevent 为 subscribe(关注)的情况时    if(type == "event" and customevent == "subscribe")    {msgType = "text";  
    contentStr = "谢谢关注Emin.ink" ;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 = "在线DOS模拟";    }    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

评论已关闭。