微信公众号 获取推送消息
程序员文章站
2024-03-15 14:32:11
...
1. 第一次验签
2. 关注或取消关注后就会推送消息
3. 一定要开启服务器配置,开启后需要过会儿生生效
<?php
/**
* Created by IntelliJ IDEA.
* User: mzc
* Date: 2019-11-09
* Time: 20:28
*/
//ini_set("display_errors", "On");
//error_reporting(E_ALL | E_STRICT);
//exit("22222");
class wx {
private $_token = "dxxw";
/*
用于第一次验证我们网站url合法性
*/
public function firstValid(){
$this->log(1111);
//检验签名的合法性
if($this->_checkSignature()){
//签名合法,告知微信公众平台服务器
echo $_GET['echostr'];
}
}
/**
* 验证签名
* @return bool
*/
private function _checkSignature()
{
$this->log(2222);
//获得由微信公众平台请求的验证数据
$signature = $_GET['signature'];
$timestamp = $_GET['timestamp'];
$nonce = $_GET['nonce'];
//将时间戳,随机字符串,token按照字母顺序排序,病并连接
$tmp_arr = array($this->_token, $timestamp, $nonce);
sort($tmp_arr, SORT_STRING);//字典顺序
$tmp_str = implode($tmp_arr);//连接
$tmp_str = sha1($tmp_str);//sha1加密
if ($signature == $tmp_str) {
$this->log("验证成功");
return true;
} else {
$this->log("验证失败");
return false;
}
}
public function responseMsg(){
/*
获得请求时POST:XML字符串
不能用$_POST获取,因为没有key
*/
mkdir(111,0777);
$xml_str = !empty($GLOBALS['HTTP_RAW_POST_DATA'])?$GLOBALS['HTTP_RAW_POST_DATA']:$_POST;
if(empty($xml_str)){
$xml_str = file_get_contents('php://input');
}
$this->log($xml_str);
// if(!empty($xml_str)){
// // 解析该xml字符串,利用simpleXML
// libxml_disable_entity_loader(true);
// //禁止xml实体解析,防止xml注入
// $request_xml = simplexml_load_string($xml_str, 'SimpleXMLElement', LIBXML_NOCDATA);
// //判断该消息的类型,通过元素MsgType
// switch ($request_xml->MsgType){
// case 'event':
// //判断具体的时间类型(关注、取消、点击)
// $event = $request_xml->Event;
// if ($event=='subscribe') { // 关注事件
// $this->_doSubscribe($request_xml);
// }elseif ($event=='CLICK') {//菜单点击事件
// $this->_doClick($request_xml);
// }elseif ($event=='VIEW') {//连接跳转事件
// $this->_doView($request_xml);
// }else{
//
// }
// break;
// case 'text'://文本消息
// $this->_doText($request_xml);
// break;
// case 'image'://图片消息
// $this->_doImage($request_xml);
// break;
// case 'voice'://语音消息
// $this->_doVoice($request_xml);
// break;
// case 'video'://视频消息
// $this->_doVideo($request_xml);
// break;
// case 'shortvideo'://短视频消息
// $this->_doShortvideo($request_xml);
// break;
// case 'location'://位置消息
// $this->_doLocation($request_xml);
// break;
// case 'link'://链接消息
// $this->_doLink($request_xml);
// break;
// }
// }
}
public function log($content){
$logFile = "1.log";
if(is_array($content)){
$content = var_export($content,true);
}
$newLog = date('Y-m-d H:i:s').":".$content;
file_put_contents($logFile, $newLog.PHP_EOL, FILE_APPEND);
}
}
$wx = new wx();
if(!empty($_GET['echostr'])){
$wx->firstValid(); //验签
}else{
$wx->responseMsg();//接收关注或取消关注后的推送消息
}
上一篇: 微信公众号开发,java实现微信公众号模版消息推送
下一篇: tensorflow(5)过拟合