php关注微信服务号回复

环境:新浪SAE+ThinkPHP5.0.12

注:代码留存用

坑点:新浪SAE一定记得实名认证,不然token验证不让过
URL填写TP5入口文件的路径,token自己设置(和自己的代码对接),key随机生成

控制器文件代码(功能:关注公众号回复文字):

<?php
namespace app\index\controller;

class Index {
    public function __construct() {

    }

    public function Index() {
        if (isset($_GET['echostr'])) {
            //获得参数 signature,nonce,timestamp,token
            $nonce = $_GET['nonce'];
            $token = 'TzxWeiXin';
            $timestamp = $_GET['timestamp'];
            $echostr = $_GET['echostr'];
            $signature = $_GET['signature'];
            //形成数组,然后案字典序排序
            $array = array();
            $array = array($nonce, $timestamp, $token);
            sort($array);
            //拼接字符串,sha1加密,然后与signature进行校验
            $str = sha1(implode($array));
            if ($str == $signature) {
                echo $echostr;
                exit ;
            }
        } else {
            $this -> responseMsg();
        }

    }

    //接受事件推送并回复
    public function responseMsg() {
        //获取微信post过来的xml数据(不能用$_POST,因为PHP不识别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>
        $postObj = simplexml_load_string($postArr);
        //      ToUserName  开发者微信号
        //      FromUserName    发送方帐号(一个OpenID)
        //      CreateTime  消息创建时间 (整型)
        //      MsgType 消息类型,event
        //      Event   事件类型,subscribe(订阅)、unsubscribe(取消订阅)
        if (strtolower($postObj -> MsgType) == 'event') {
            //如果是关注事件subcribe
            if (strtolower($postObj -> Event) == 'subscribe') {
                //回复用户消息
                $toUser = $postObj -> FromUserName;
                $fromUser = $postObj -> ToUserName;
                $time = time();
                $msgType = 'text';
                $content = '欢迎关注我们的微信';
                //              回复用户消息格式
                //              <xml>

                //              <ToUserName><![CDATA[toUser]]></ToUserName>
                //              <FromUserName><![CDATA[fromUser]]></FromUserName>
                //              <CreateTime>12345678</CreateTime>
                //              <MsgType><![CDATA[text]]></MsgType>
                //              <Content><![CDATA[你好]]></Content>
                //              </xml>
                $template = "<xml>
                            <ToUserName><![CDATA[%s]]></ToUserName>
                            <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、付费专栏及课程。

余额充值