微信开发之事件推送与被动回复

直接上代码,公众号后台基本配置:

设置URL、token、EncodingAESKey,并退出启用改配置,后上代码

class TestController extends Controller
{
//公众号后台的URL的接口
    public function index()
    {

        //将timestamp,nonce,token按字典序排序
        $timestamp = $_GET['timestamp'];
        $nonce = $_GET['nonce'];
        $token = 'weixin';
        $signature = $_GET['signature'];
        //将排序之后的三个参数拼接之后用sha1加密
        $array = array($timestamp, $nonce, $token);
        sort($array);
        $tmpstr = implode('', $array);
        $tmpstr = sha1($tmpstr);
        //将加密后的字符串与sianature进行对比,判断请求是否来自于微信
        if ($tmpstr == $signature && $_GET['echostr']) {//第一次接入微信Api
            echo $_GET['echostr'];
            exit;
        } else {
            $this->responseMsg();
        }
    }

    public function responseMsg()
    {
        //接收到的用户消息格式<xml>
        $postArr = $GLOBALS['HTTP_RAW_POST_DATA'];
//        接收到的消息格式
//          <xml>
//          <ToUserName><![CDATA[toUser]]></ToUserName>
//          <FromUserName><![CDATA[FromUser]]></FromUserName>
//          <CreateTime>123456789</CreateTime>
//          <MsgType><![CDATA[event]]></MsgType>
//          <Event><![CDATA[subscribe]]></Event>
//          </xml>
        //把接收到的xml格式数据包转化为对象格式
        $postObj = simplexml_load_string($postArr);
//        被动回复用户消息格式
//            <xml>
//            <ToUserName><![CDATA[toUser]]></ToUserName>
//            <FromUserName><![CDATA[fromUser]]></FromUserName>
//            <CreateTime>12345678</CreateTime>
//            <MsgType><![CDATA[text]]></MsgType>
//            <Content><![CDATA[你好]]></Content>
//            </xml>
        if (strtolower($postObj->MsgType) == 'event') {//判断是否为订阅的事件推送
            if (strtolower($postObj->Event) == 'subscribe') {//判断是否为关注的事件推送
                $toUser = $postObj->FromUserName;
                $fromUser = $postObj->ToUserName;
                $time = time();
                $msgType = 'text';
                $content = '你好:'.$postObj->FromUserName.'!欢迎关注我们的微信公众号';
                $template = "<xml>
                            <ToUserName><![CDATA[%s]]></ToUserNames>
                            <FromUserName><![CDATA[%s]]></FromUserName>
                            <CreateTime>%s</CreateTime>
                            <MsgType><![CDATA[%s]]></MsgType>
                            <Content><![CDATA[%s]]></Content>
                            </xml>";
                $info = sprintf($template, $toUser, $fromUser, $time, $msgType, $content);
                echo $info;
            }
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值