为了账号安全,请及时绑定邮箱和手机立即绑定

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


下面的没用tp5,哪里错了呢

<?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;
             }
        }
}
?>

正在回答

1 回答

<?php
require('sdk.php');
define("TOKEN", "weixin");
$wechatObj = new wechatCallbackapiTest();
$wechatObj->valid();
//$wechatObj->getWxServerIp();

class wechatCallbackapiTest
{
    public function valid()
    {
        $echoStr = $_GET["echostr"];

        //valid signature , option
        if($this->checkSignature() && $echoStr){
            header('content-type:text');
            echo $echoStr;
            exit;
        }else{
            header('content-type:text');
            $this->responseMsg();
        }
    }

    public function responseMsg()
    {
        //get post data, May be due to the different environments
        $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
        $postObj = simplexml_load_string( $postStr );
        //$postObj->ToUserName = '';
        //$postObj->FromUserName = '';
        //$postObj->CreateTime = '';
        //$postObj->MsgType = '';
        //$postObj->Event = '';
        // gh_e79a177814ed
        //判断该数据包是否是订阅的事件推送
        if( strtolower( $postObj->MsgType) == 'event'){
            //如果是关注 subscribe 事件
            if( strtolower($postObj->Event == 'subscribe') ){
                //回复用户消息(纯文本格式)    
                $sdk=new sdk();
                $sdk->guanzhu($postObj);
            }
        }
          /*<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[你好]]></Content>
</xml>*/
        if(strtolower($postObj->MsgType) == 'text' && trim($postObj->Content)=='tuwen'){
            //图文回复
           
            $arr = array(
                array(
                    'title'=>'imooc',
                    'description'=>"imooc is very cool",
                    'picUrl'=>'http://www.imooc.com/static/img/common/logo.png',
                    'url'=>'http://www.imooc.com',
                ),
                array(
                    'title'=>'hao123',
                    'description'=>"hao123 is very cool",
                    'picUrl'=>'https://www.baidu.com/img/bdlogo.png',
                    'url'=>'http://www.hao123.com',
                ),
                array(
                    'title'=>'qq',
                    'description'=>"qq is very cool",
                    'picUrl'=>'http://www.imooc.com/static/img/common/logo.png',
                    'url'=>'http://www.qq.com',
                ),
            );
            $sdk=new sdk();
            $sdk->tuwen($postObj,$arr);
            
            
        }else{
            //纯文本回复
            switch( trim($postObj->Content) ){
                case 1:
                    $content = '您输入的数字是1';
                break;
                case 2:
                    $content = '您输入的数字是2';
                break;
                case 3:
                    $content = '您输入的数字是3';
                break;
                case 4:
                    $content = "<a href='http://www.imooc.com'>慕课</a>";
                break;
                case '英文':
                    $content = 'imooc is ok';
                break;

            }    
            $sdk=new sdk();
            $sdk->guanjianzi($postObj,$content);
        }
    }
    
    //token验证    
    private function checkSignature()
    {
        $signature = $_GET["signature"];
        $timestamp = $_GET["timestamp"];
        $nonce = $_GET["nonce"];    
                
        $token = TOKEN;
        $tmpArr = array($token, $timestamp, $nonce);
        sort($tmpArr);
        $tmpStr = implode( $tmpArr );
        $tmpStr = sha1( $tmpStr );
        
        if( $tmpStr == $signature ){
            return true;
        }else{
            return false;
        }
    }
    
    //获取accesstoken
    function getWxAccessToken(){
        //1.请求url地址
        $appid = 'wx99c1aced49601c8a';
        $appsecret =  'a722ca3ca9e7ffb093ec2758ec071176';
        $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$appsecret;
        //2初始化
        $ch = curl_init();
        //3.设置参数
        curl_setopt($ch , CURLOPT_URL, $url);
        curl_setopt($ch , CURLOPT_RETURNTRANSFER, 1);
        //4.调用接口
        $res = curl_exec($ch);
        //5.关闭curl
        curl_close( $ch );
        if( curl_errno($ch) ){
            var_dump( curl_error($ch) );
        }
        $arr = json_decode($res, true);
        var_dump( $arr );
    }
    
    //获取服务器ip
    function getWxServerIp(){
        $accessToken = "QFXsNxpeDci-EYiggO_AGr_QHd7tqZPT5MG5yBygiGgdlp4ZrkYO8VDKCZ5STRtBJaHk6GxBajsJFPm1QRGN8oabd9hSGJeHKg0JpkgvvCO8PoUBgFROkQ_8-hL9cevPTJHdAJAAQO";
        $url = "https://api.weixin.qq.com/cgi-bin/getcallbackip?access_token=".$accessToken;
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL,$url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
        $res = curl_exec($ch);
        curl_close($ch);
        if(curl_errno($ch)){
            var_dump(curl_error($ch));
        }
        $arr = json_decode($res,true);
        echo "<pre>";
        var_dump( $arr );
        echo "</pre>";


    }
}

0 回复 有任何疑惑可以回复我~
#1

qq_T_T若是人间四月天_0 提问者

感谢大神点评
2017-04-10 回复 有任何疑惑可以回复我~


用面向对象来写吧。

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

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

我要回答 关注问题
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号