求大神指教,不用tp5可以实现自动回复吗?

来源:3-2 接收事件订阅与回复响应消息(二)

qq_T_T若是人间四月天_0

2017-04-10 11:16


下面是代码,是哪里错了吗?
<?php
header('Content-type:text');
//验证服务器地址的有效性
function check(){
    //1.将timestamp,nonce,token按字典序排序
        $timestamp = $_GET['timestamp'];
        $nonce = $_GET['nonce'];
        $token = "weixin";
        $signature = $_GET['signature'];
        $echostr = $_GET['echostr'];
//$_GET 变量用于收集来自 method="get" 的表单中的值。从带有 GET 方法的表单发送的信息,对任何人都是可见的(会显示在浏览器的地址栏),并且对发送的信息量也有限制(最多 100 个字符)
        $array = array( $timestamp,$nonce,$token );
//创建名为 $array 的索引数组,向它赋三个元素
        sort($array);
        //2.将排序后的三个参数进行拼接之后再用sha1加密
        $tmpstr = implode('',$array);
//把数组元素按指定规则组合为字符串
        $tmpstr = sha1( $tmpstr );
        //3.将加密后的字符串与signature进行对比,判断该请求是否来自微信
        if( $tmpstr == $signature && $echostr){
            //第一次接入微信api
            echo $echostr;
            exit;
        } else{
            //之后接入api即用户关注公众号和发送消息
            responseMsg();
        }
}
    check();
//接收事件推送并回复
function responseMsg(){
    
    //1.获取微信推送过来的数据,即post数据(为xml格式)
    $postArr = file_get_contents('php://input');
    //2.处理推送数据,并设置回复类型和内容
    /*推送XML数据包示例:

        <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);//将xml数据转为对象
    //判断该数据包是否是订阅的事件推送
    if( strtolower( $postObj -> MsgType) == 'event'){
        
            //如果是关注事件即subscribe则回复消息
             if(strtolower( $postObj -> Event) == 'subscribe'){
                  $toUser = $postObj -> FromUserName;
                 $fromUser = $postObj -> ToUserName;
                 $createTime = time();
                 $msgType = 'text';
                 $content = '您已成功关注该平台';
                 $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,$createTime,$msgType,$content);//将xml数据包进行对应的变量赋值
                  echo $info;
             }
        }
}
?>

写回答 关注

3回答

  • chanson1216
    2017-04-10 14:06:06
    已采纳

    http://img.mukewang.com/58eb20bb00016e8d13210595.jpg
    你的中括号,检查下

    qq_T_T...

    非常感谢!谢谢

    2017-04-10 19:50:02

    共 1 条回复 >

  • 猪头6
    2018-04-28 17:35:52

    我使用yii2是没有任何问题的,和框架是没有关系的

  • 一个不确定
    2017-04-28 22:01:54

    我用tp5一直没有收到自动回复,不知道是什么回事

PHP实现微信公众平台开发—提升篇

本课程详细讲解了接收微信用户发送的消息和接收订阅关注的事件推送

64946 学习 · 371 问题

查看课程

相似问题