PHP实现微信公众号关注后自定义消息回复

2021-11-29   阅读:168   分类:后端    标签: 微信开发

有时我们需要自定义公众号关注后的回复消息,除了使用官方后台设置,我们还可以使用代码来实现。以下是个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();
    }
  }


上面单独建一个文件,放置上面代码,微信公众号后台配置服务器地址,然后就可以使用了。

【腾讯云】热门云产品首单特惠秒杀,1核2G云服务器首年38元

‘简忆博客’微信公众号 扫码关注‘简忆博客’微信公众号,获取最新文章动态
转载:请说明文章出处“来源简忆博客”。http://www.tpxhm.com/adetail/858.html

×
觉得文章有用就打赏一下文章作者
微信扫一扫打赏 微信扫一扫打赏
支付宝扫一扫打赏 支付宝扫一扫打赏

文章评论(0)

登录
简忆博客壁纸 头像

简忆博客
勤于学习,乐于分享。

置顶推荐

打赏本站

如果你觉得本站很棒,可以通过扫码支付打赏哦!
微信扫码:你说多少就多少~
微信扫码
支付宝扫码:你说多少就多少~
支付宝扫码
×