有时我们需要自定义公众号关注后的回复消息,除了使用官方后台设置,我们还可以使用代码来实现。以下是个demo,供大家参考
<?php
// 1.将token、timestamp、nonce三个参数进行字典序排序
$timestamp = $_GET['timestamp']; //timestamp其实就是一个时间戳
$nonce = $_GET['nonce']; //nonce其实就是一个随机参数
$token = 'weixin'; //必须要和微信公众平台的填写的token一样
$signature = $_GET['signature']; //signature其实就是在微信公众平台已经加密好的字串
$array = array($timestamp,$nonce,$token); //将三个参数放进临时数组里面
sort($array); //用sort对数组组进行排序
// 2.将三个参数字符串拼接成一个字符串进行shal加密
$tmpstr = implode('', $array); //将三个参数用inplode/或join拼接起来
$tmpstr = sha1($tmpstr); //进行sha1加密
// 3.将加密后的字符串与signature进行对比,判断该请求是否来自于微信
//判断是否相等,如果相等,输出从微信服务器中传出来的参数
if($tmpstr == $signature){
echo $_GET['echostr'];
exit;
}else{
//数据
// "<xml>
// <ToUserName><![CDATA[gh_bb86c5992fd8]]><\/ToUserName>\n
// <FromUserName><![CDATA[ojTmjwa0o63WAjWfbbkOUU-lr1IA]]><\/FromUserName>\n
// <CreateTime>1550115489<\/CreateTime>\n
// <MsgType><![CDATA[event]]><\/MsgType>\n
// <Event><![CDATA[subscribe]]><\/Event>\n
// <EventKey><![CDATA[]]><\/EventKey>\n
// <\/xml>"
//get post data, May be due to the different environments
// $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; //接收微信发来的XML数据 版本php7.0以上这个函数已经作废
$postStr = file_get_contents('php://input');//php7.0以上用这个接收参数
//extract post data
if(!empty($postStr)){
//解析post来的XML为一个对象$postObj
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
$fromUsername = $postObj->FromUserName; //请求消息的用户
$toUsername = $postObj->ToUserName; //"我"的公众号id
$keyword = trim($postObj->Content); //消息内容
$time = time(); //时间戳
$msgtype = 'text'; //消息类型:文本
$textTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<Content><![CDATA[%s]]></Content>
</xml>";
if(strtolower($postObj->MsgType == 'event' )){ //如果XML信息里消息类型为event
if($postObj->Event == 'subscribe'){ //如果是订阅事件
//如果是自定义生成二维码
$contentStrq = "欢迎订阅";
$resultStrq = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgtype, $contentStrq);
echo $resultStrq;
exit();
}
}
$contentStr=$keyword.'!';
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgtype, $contentStr);
echo $resultStr;
exit();
}else {
echo "error";
exit();
}
}上面单独建一个文件,放置上面代码,微信公众号后台配置服务器地址,然后就可以使用了。

关于简忆
简忆诞生的故事



粤ICP备16092285号
文章评论(0)