初试微信公众号开发+关注自动

今天试了试微信公众号的开发,整体下来都很简单,都坑在自己的不仔细上面了。
首先进行开发的服务器的基本配置

   public function index(Request $request){
        //获取timestamp nonce signature echostr
        $timestamp = $request->get('timestamp','');
        $nonce = $request->get('nonce','');
        $signature = $request->get('signature','');
        $echostr = $request->get('echostr','');
        $token = 'wxgzh';
        //形成字符串  字典排序
        $array = array($timestamp,$nonce,$token);
        sort($array,SORT_STRING);
        //拼接成字符串  sha1加密   并于$signature比较
        $tmp = implode('',$array);
        $tmp = sha1($tmp);
        if ($tmp == $signature && $echostr){
            echo $echostr;
            exit();
        }else{
            //关注自动回复
            $this->responseMsg();
        }
    }
初试微信公众号开发+关注自动
微信订阅号基本配置

点击提交即可。这样就完成了微信公众号的接入。完成之后别忘记点击启用服务器配置~ 查看微信微信关注取消事件。按照文档所示返回相应的数据即可。

初试微信公众号开发+关注自动
微信关注取消关注事件

初试微信公众号开发+关注自动
文本消息回复事件

public function responseMsg(){
        $postArr = file_get_contents("php://input");//不支持multipart/form-data类数据
//        $postArr = $GLOBALS['HTTP_RAW_POST_DATA'];//需要开启对应的php扩展
        $postObj = simplexml_load_string($postArr);
        if (strtolower($postObj->MsgType) == 'event'){
            if (strtolower($postObj->Event) == 'subscribe'){
                $toUser = $postObj->FromUserName;
                $fromUser = $postObj->ToUserName;
                $time = time();
                $MsgType = 'text';
                $content = '欢迎关注ache的公众号';
                $tmp = "<xml>
                        <ToUserName><![CDATA[%s]]></ToUserName>
                        <FromUserName><![CDATA[%s]]></FromUserName>
                        <CreateTime>%s</CreateTime>
                        <MsgType><![CDATA[%s]]></MsgType>
                        <Content><![CDATA[%s]]></Content>
                        </xml>";
                $info = sprintf($tmp, $toUser, $fromUser, $time, $MsgType, $content);
                echo $info;
            }
        }
        echo '';
    }

然后自己的公众号关注走一波。


初试微信公众号开发+关注自动
最终效果

在编写测试过程中需要注意的是返回微信的数据是不能带空格的。在测试失败之后找了好久才发现。另外在接收关注事件的数据的时候因为是post请求关系,如果是使用框架开发的可能需要关闭csrf验证。我就是用laravel5.5来写的。死活就是收不到数据。看了文档是post请求,脑补了下才想到。