sunlong88

 

 

 

 

 

 

服务器地址url

    public function callbackxinychuang(){
        if(I(\'get.echostr\')){//token验证
            echo I(\'get.echostr\');exit();
        }
        try{
            $wechat = new Wechat(C(\'WX_PUBLIC_XinYChuang.token\'), C(\'WX_PUBLIC_XinYChuang.appid\'), C(\'WX_PUBLIC_XinYChuang.key\'));
            //$wechat = new Wechat(\'weixin\', \'wx0078c0d21d19e76b\', \'\'); // 目前支付仅针对正式服务号
            $data = $wechat->request();
            \Think\Log::write(print_r($data,true));
            if($data && is_array($data)){
                file_put_contents(\'./data.json\', json_encode($data));
                \Think\Log::write(print_r($data,true));
                $this->responseXinYChuang($wechat, $data);
            }
        } catch(\Exception $e){
            file_put_contents(\'./error.json\', json_encode($e->getMessage()));
        }
    }

 

/**
     * 芯硬创
     */
    public function responseXinYChuang($wechat, $data){
        switch ($data[\'MsgType\']) {
            case Wechat::MSG_TYPE_EVENT:
                switch ($data[\'Event\']) {
                    case Wechat::MSG_EVENT_SUBSCRIBE://关注事件
                        \Think\Log::write($data);
                        // 裂变二维码关注

                        if (isset($data[\'EventKey\']) && $data[\'Event\'] == \'subscribe\' && strrpos($data[\'EventKey\'],"qrscene_liebian") !== false){
                            $EventKey = str_replace("qrscene_", "", $data[\'EventKey\']);
                            \Think\Log::write($EventKey);
                            $fromOpenid = "";
                            if(strrpos($EventKey,"_@_") === false){
                                $EventKey = $EventKey;
                            }else{
                                list($EventKey,$fromOpenid) = explode("_@_",$EventKey);
                            }

                            \Think\Log::write($EventKey);
                            $WxQrConfigModel = D(\'WxQrConfig\');

                            $openid = $data[\'FromUserName\']; //必须先赋值,不然获取不了值
                            $this->addScanCounts($EventKey, $openid); // 扫码统计处理

                            $this->addScanScribe($EventKey, $openid); // 扫码关注统计处理

                            $map = array();
                            $map[\'scene_id\'] = $EventKey;
                            $WxQrConfigModel->where($map)->setInc(\'count\');

                            $info = $WxQrConfigModel->where($map)->find();
                            \Think\Log::write(print_r($info,true));
                            if($info){
                                $this->liebian($info,$wechat,$data,$fromOpenid);
                            }

                        }


                        /**
                         * 普通二维码关注回复
                         */
                        if (isset($data[\'EventKey\'])){
                            $EventKey = str_replace("qrscene_", "", $data[\'EventKey\']);
                            $WxQrConfigModel = D(\'WxQrConfig\');

                            $openid = $data[\'FromUserName\']; //必须先赋值,不然获取不了值
                            $this->addScanCounts($EventKey, $openid); // 扫码统计处理

                            $this->addScanScribe($EventKey, $openid); // 扫码关注统计处理

                            $map = array();
                            $map[\'scene_id\'] = $EventKey;
                            $WxQrConfigModel->where($map)->setInc(\'count\');
                            //根据是否有首关元素
                            //replyText 文本
                            //replyNewsOnce 图文
                            $info = $WxQrConfigModel->where($map)->find();
                            if($info){
                                $title = $info[\'title\'];
                                $description = $info[\'description\'];
                                $url = $info[\'url\'];
                                $picture_url = $info[\'picture_url\'];
                                $info[\'tt\'] = 1;
                                // $this->logger($info);
                                if ($info[\'type\'] == \'3\') { // 单图输出
                                    $wechat->replyImage($title);die;
                                }
                                if ($info[\'url\'] && $info[\'title\'] && $info[\'description\'] && $info[\'picture_url\']) {
                                    $wechat->replyNewsOnce($title, $description, $url, $picture_url);die;
                                } else if ($description) {
                                    $wechat->replyText($description);die;
                                }
                            }

                        }



                        //首次关注推送信息
                        $wechat->replyText(C("WX_PUBLIC_XinYChuang.first_desc"));die;

                        //首次关注推送信息
                        $WxReplyModel = new \Wechat\Model\WxReplyModel(\'wx_keyword\',\'lie_\',\'MKTWX_DB_CONFIG\');
                        $res = $WxReplyModel->where("status = 1 and toUserType=2")->field("type,content")->limit(1)->order("create_time desc")->find();
                        if($res  && !empty($res)){
                            $content  = json_decode($res[\'content\'],true);
                            $this->autoReply($res[\'type\'],$wechat,$content,$data);
                        }else{
                            $wechat->replyText(\'欢迎关注芯硬件创客\');die;
                        }
                        die;

                        break;
                    case Wechat::MSG_EVENT_UNSUBSCRIBE:
                        //取消关注,记录日志
                        $openid = $data[\'FromUserName\']; //必须先赋值,不然获取不了值
                        $this->unsubscribe($openid);
                        break;
                    case Wechat::MSG_EVENT_CLICK:
                        // 自定义菜单点击事件
                        if (isset($data[\'EventKey\'])){
                            $EventKey = str_replace("qrscene_", "", $data[\'EventKey\']);
                            $WxQrConfigModel = D(\'WxQrConfig\');

                            $map = array();
                            $map[\'scene_id\'] = $EventKey;
                            $info = $WxQrConfigModel->where($map)->find();
                            $title = $info[\'title\'];
                            $description = $info[\'description\'];
                            $url = $info[\'url\'];
                            $picture_url = $info[\'picture_url\'];
                            if ($info[\'type\'] == \'3\') { // 单图输出
                                $wechat->replyImage($title);die;
                            }
                            if ($info[\'url\'] && $info[\'title\'] && $info[\'description\'] && $info[\'picture_url\']) {
                                $wechat->replyNewsOnce($title, $description, $url, $picture_url);die;
                            } else if ($description) {
                                $wechat->replyText($description);die;
                            }
                        }
                        break;
                    case Wechat::MSG_EVENT_SCAN:  // 二维码扫描事件
                        if (isset($data[\'EventKey\'])){
                            \Think\Log::write("----普通二维码扫描----");
                            //判断是否是裂变邀请二维码
                            $EventKey = str_replace("qrscene_", "", $data[\'EventKey\']);
                            \Think\Log::write($EventKey);

                            $fromOpenid = "";//分享二维码的用户openid
                            if(strrpos($EventKey,"_@_") === false){
                                $EventKey = $EventKey;
                            }else{
                                list($EventKey,$fromOpenid) = explode("_@_",$EventKey);
                            }

                            $WxQrConfigModel = D(\'WxQrConfig\');
                            // 扫码事件统计 wx_scan_history
                            $openid = $data[\'FromUserName\']; //必须先赋值,不然获取不了值
                            $this->addScanCounts($EventKey, $openid); // 扫码统计处理

                            $map = array();
                            $map[\'scene_id\'] = $EventKey;
                            $WxQrConfigModel->where($map)->setInc(\'count\');
                            $info = $WxQrConfigModel->where($map)->find();
                            $title = $info[\'title\'];
                            $description = $info[\'description\'];
                            $url = $info[\'url\'];
                            $picture_url = $info[\'picture_url\'];
                            if(strrpos($data[\'EventKey\'],"liebian_") !== false){
                                \Think\Log::write("----进入裂变----");
                                //如果是裂变扫码 邀请活动
                                $this->liebian($info,$wechat,$data,$fromOpenid,false);
                                die;
                            }



                            if ($info[\'type\'] == \'3\') { // 单图输出
                                $wechat->replyImage($title);die;
                            }
                            if ($info[\'url\'] && $info[\'title\'] && $info[\'description\'] && $info[\'picture_url\']) {
                                $wechat->replyNewsOnce($title, $description, $url, $picture_url);die;
                            } else if ($description) {
                                $wechat->replyText($description);die;
                            }

                        }
                        break;
                    default:
                        break;
                }
                break;
            case Wechat::MSG_TYPE_TEXT:
                $WxKeywordModel = new \Wechat\Model\WxKeywordModel(\'wx_keyword\',\'lie_\',\'MKTWX_DB_CONFIG\');
                $keyword = $data[\'Content\'];
                $map[\'keyword\'] = array(\'eq\', $keyword);
                $map[\'status\'] = array(\'eq\', \'1\');
                $map[\'toUserType\'] = array(\'eq\', \'1\');
                $field = \'keyword,content,type,status\';
                $res = $WxKeywordModel->field($field)->where($map)->find();
                if ($res) {
                    $content = json_decode($res[\'content\'], true);
                    switch (strval($res[\'type\'])) {
                        case \'1\': // 单文
                            $wechat->replyText($content[\'content\']);die;
                            break;
                        case \'2\': // 图文
                            $wechat->replyNewsOnce($content[\'title\'], $content[\'content\'], $content[\'link\'], $content[\'img\']);die;
                            break;
                        case \'3\': // 单图
                            $wechat->replyImage($content[\'img\']);die;
                            break;
                        case \'4\': // 复合
                            $wechatModel = wechat();
                            $openid = $data[\'FromUserName\']; //必须先赋值,不然获取不了值

                            if ($content[\'content\']) {
                                $redata = array(
                                    \'touser\' => $openid,
                                    "msgtype" => "text",
                                    "text" => array(
                                        \'content\' => $content[\'content\'],
                                    ),
                                );
                                $wechatModel->sendCustomMessage($redata);
                            }
                            if ($content[\'contentsec\']) {
                                $redata = array(
                                    \'touser\' => $openid,
                                    "msgtype" => "text",
                                    "text" => array(
                                        \'content\' => $content[\'contentsec\'],
                                    ),
                                );
                                $wechatModel->sendCustomMessage($redata);
                            }

                            if ($content[\'img\']) {
                                $redata[\'msgtype\'] = \'image\';
                                $redata[\'touser\'] = $openid;
                                $redata[\'image\'] = array(
                                    \'media_id\' => $content[\'img\'],
                                );
                                $wechatModel->sendCustomMessage($redata);
                            }


                            break;
                        default:
                            # code...
                            break;
                    }

                } else {
                    if($this->autoReplyLimit($data)) die;

                    $WxReplyModel = new \Wechat\Model\WxReplyModel(\'wx_keyword\',\'lie_\',\'MKTWX_DB_CONFIG\');
                    $res = $WxReplyModel->where("status = 1 and toUserType=3")->field("type,content")->limit(1)->order("create_time desc")->find();
                    if($res  && !empty($res)){
                        $content  = json_decode($res[\'content\'],true);
                        $this->SetAutoReplyLimit($data);
                        $this->autoReply($res[\'type\'],$wechat,$content,$data);
                    }
//                        $wechat->replyText(\'暂无此关键词相关信息~_~\');
                    $this->SetAutoReplyLimit($data);
                    die;
                }

                break;
            default:
                # code...
                break;
        }
    }

 

 

/**

* 事件类型常量

*/

const MSG_EVENT_SUBSCRIBE = \'subscribe\';

const MSG_EVENT_UNSUBSCRIBE = \'unsubscribe\';

const MSG_EVENT_SCAN = \'SCAN\';

const MSG_EVENT_LOCATION = \'LOCATION\';

const MSG_EVENT_CLICK = \'CLICK\';

const MSG_EVENT_VIEW = \'VIEW\';


/**

* 消息类型常量

*/

const MSG_TYPE_TEXT = \'text\';

const MSG_TYPE_IMAGE = \'image\';

const MSG_TYPE_VOICE = \'voice\';

const MSG_TYPE_VIDEO = \'video\';

const MSG_TYPE_SHORTVIDEO = \'shortvideo\';

const MSG_TYPE_LOCATION = \'location\';

const MSG_TYPE_LINK = \'link\';

const MSG_TYPE_MUSIC = \'music\';

const MSG_TYPE_NEWS = \'news\';

const MSG_TYPE_EVENT = \'event\';


本文中消息类型处理主要分 事件(event)和文本(text)




event分为:


    1,首次关注:

case Wechat::MSG_EVENT_SUBSCRIBE://关注事件

///临时代码 by long  抽奖
                            try{
                                \Think\Log::write(json_encode($data));
                                if(isset($data[\'Event\']) && $data[\'Event\'] == \'subscribe\' && strrpos($data[\'EventKey\'],"qrscene_choujiang-") !== false ){
                                    list(,$user_id,$lottery_id) = explode("-",$data[\'EventKey\']);
                                    $k1 = time();
                                    $res = post_curl(API_DOMAIN.\'/Activity/Lottery/increaseQualifyByFollow\', [
                                        \'lottery_id\'=>intval($lottery_id),
                                        \'pf\'=>3,
                                        \'user_id\'=>$user_id,
                                        \'k1\'=>$k1,
                                        "k2"=>md5(md5($k1).C(\'SUPER_AUTH_KEY\'))
                                    ]);
                                    \Think\Log::write($res);
                                    $choujiang_config = C(\'CHOU_JIANG\');
                                    \Think\Log::write(json_encode($choujiang_config));
                                    $wechat->replyNewsOnce($choujiang_config[\'title\'],
                                        $choujiang_config[\'des\'], $choujiang_config[\'url\'],
                                        $choujiang_config[\'img\']);
                                    die;
                                }
                            }catch(\Exception $e){

                            }


                            /**
                             * 普通二维码关注回复
                             */
                            if (isset($data[\'EventKey\'])){
                                $EventKey = str_replace("qrscene_", "", $data[\'EventKey\']);
                                $WxQrConfigModel = D(\'WxQrConfig\');

                                $openid = $data[\'FromUserName\']; //必须先赋值,不然获取不了值
                                $this->addScanCounts($EventKey, $openid); // 扫码统计处理

                                $this->addScanScribe($EventKey, $openid); // 扫码关注统计处理

                                $map = array();
                                $map[\'scene_id\'] = $EventKey;
                                $WxQrConfigModel->where($map)->setInc(\'count\');
                                //根据是否有首关元素
                                //replyText 文本
                                //replyNewsOnce 图文
                                $info = $WxQrConfigModel->where($map)->find();
                                if($info){
                                    $title = $info[\'title\'];
                                    $description = $info[\'description\'];
                                    $url = $info[\'url\'];
                                    $picture_url = $info[\'picture_url\'];
                                    $info[\'tt\'] = 1;
                                    // $this->logger($info);
                                    if ($info[\'type\'] == \'3\') { // 单图输出
                                        $wechat->replyImage($title);die;
                                    }
                                    if ($info[\'url\'] && $info[\'title\'] && $info[\'description\'] && $info[\'picture_url\']) {
                                        $wechat->replyNewsOnce($title, $description, $url, $picture_url);die;
                                    } else if ($description) {
                                        $wechat->replyText($description);die;
                                    }
                                }

                            }




                            //首次关注推送信息


                            $WxReplyModel = new \Wechat\Model\WxReplyModel(\'wx_keyword\',\'lie_\',\'MKTWX_DB_CONFIG\');
                            $res = $WxReplyModel->where("status = 1 and toUserType=2")->field("type,content")->limit(1)->order("create_time desc")->find();
                            if($res  && !empty($res)){
                                $content  = json_decode($res[\'content\'],true);
                                $this->autoReply($res[\'type\'],$wechat,$content,$data);
                            }else{
                                $wechat->replyText(\'欢迎关注猎芯网\');die;
                            }
                            die;

//                            $title = C(\'WX_PUBLIC.first_title\');
//                            $discription = C(\'WX_PUBLIC.first_desc\');
//                            $url = C(\'WX_PUBLIC.first_url\');
//                            $picurl = C(\'WX_PUBLIC.first_img\');
////                            $wechat->replyText($title);die;
//                            $wechat->replyNewsOnce($title, $discription, $url, $picurl);die;

                            break;
View Code

 

CREATE TABLE `lie_wx_qr_config` (
  `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT COMMENT \'ID\',
  `count` mediumint(8) unsigned NOT NULL DEFAULT \'0\' COMMENT \'渠道统计(每次关注后新增一次)\',
  `qrurl` varchar(255) NOT NULL DEFAULT \'\' COMMENT \'追踪二维码链接地址\',
  `qrurl_logo` varchar(255) DEFAULT \'\' COMMENT \'带logo的二维码\',
  `scene_id` varchar(255) NOT NULL DEFAULT \'\' COMMENT \'自定义追踪id(可为数字或字符串)\',
  `create_time` int(10) unsigned NOT NULL DEFAULT \'0\' COMMENT \'创建时间\',
  `expire_seconds` int(10) unsigned NOT NULL DEFAULT \'0\' COMMENT \'临时二维码有效期,最大为604800秒\',
  `type` tinyint(1) unsigned NOT NULL DEFAULT \'0\' COMMENT \'类型,0:临时二维码;1:数值型永久二维码(此时expire_seconds参数无效);2:字符串型永久二维码(此时expire_seconds参数无效) 3单图\',
  `title` varchar(255) NOT NULL DEFAULT \'\' COMMENT \'标题\',
  `media_id_url` varchar(200) NOT NULL DEFAULT \'\' COMMENT \'微信图片的url地址\',
  `url` varchar(255) NOT NULL DEFAULT \'\' COMMENT \'点击链接\',
  `picture_url` varchar(255) NOT NULL DEFAULT \'\' COMMENT \'图片链接地址\',
  `description` varchar(255) NOT NULL DEFAULT \'\' COMMENT \'描述文本\',
  `scene_desc` varchar(255) NOT NULL DEFAULT \'\' COMMENT \'渠道标识\',
  `status` tinyint(1) NOT NULL DEFAULT \'1\' COMMENT \'状态(-1已删除 1展示)\',
  `lottery_id` int(11) unsigned NOT NULL DEFAULT \'0\' COMMENT \'关联活动id\',
  `wetch_com_id` tinyint(3) unsigned NOT NULL DEFAULT \'1\' COMMENT \'1猎芯  2芯片硬创\',
  `qrcode_use` tinyint(1) unsigned NOT NULL DEFAULT \'1\' COMMENT \'1普通二维码  2裂变\',
  PRIMARY KEY (`id`),
  KEY `scene_id` (`scene_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=93 DEFAULT CHARSET=utf8 COMMENT=\'微信自定义追踪二维码\';

 

 

 

 

 改后台主要生成二维码事件记录表 主要通过事件scene_id来查找该二维码要触发的动作     单图,文本  图片等

 

 

 /**
                             * 普通二维码关注回复
                             */
                            if (isset($data[\'EventKey\'])){
                                $EventKey = str_replace("qrscene_", "", $data[\'EventKey\']);
                                $WxQrConfigModel = D(\'WxQrConfig\');

                                $openid = $data[\'FromUserName\']; //必须先赋值,不然获取不了值
                                $this->addScanCounts($EventKey, $openid); // 扫码统计处理

                                $this->addScanScribe($EventKey, $openid); // 扫码关注统计处理

                                $map = array();
                                $map[\'scene_id\'] = $EventKey;
                                $WxQrConfigModel->where($map)->setInc(\'count\');
                                //根据是否有首关元素
                                //replyText 文本
                                //replyNewsOnce 图文
                                $info = $WxQrConfigModel->where($map)->find();
                                if($info){
                                    $title = $info[\'title\'];
                                    $description = $info[\'description\'];
                                    $url = $info[\'url\'];
                                    $picture_url = $info[\'picture_url\'];
                                    $info[\'tt\'] = 1;
                                    // $this->logger($info);
                                    if ($info[\'type\'] == \'3\') { // 单图输出
                                        $wechat->replyImage($title);die;
                                    }
                                    if ($info[\'url\'] && $info[\'title\'] && $info[\'description\'] && $info[\'picture_url\']) {
                                        $wechat->replyNewsOnce($title, $description, $url, $picture_url);die;
                                    } else if ($description) {
                                        $wechat->replyText($description);die;
                                    }
                                }

                            }
View Code

 




2, 取消关注
case Wechat::MSG_EVENT_UNSUBSCRIBE:


3, 自定义菜单点击事件

case Wechat::MSG_EVENT_CLICK:
// 自定义菜单点击事件
                            if (isset($data[\'EventKey\'])){
                                $EventKey = str_replace("qrscene_", "", $data[\'EventKey\']);
                                $WxQrConfigModel = D(\'WxQrConfig\');

                                $map = array();
                                $map[\'scene_id\'] = $EventKey;
                                $info = $WxQrConfigModel->where($map)->find();
                                $title = $info[\'title\'];
                                $description = $info[\'description\'];
                                $url = $info[\'url\'];
                                $picture_url = $info[\'picture_url\'];
                                if ($info[\'type\'] == \'3\') { // 单图输出
                                    $wechat->replyImage($title);die;
                                }
                                if ($info[\'url\'] && $info[\'title\'] && $info[\'description\'] && $info[\'picture_url\']) {
                                    $wechat->replyNewsOnce($title, $description, $url, $picture_url);die;
                                } else if ($description) {
                                    $wechat->replyText($description);die;
                                }
                            }
                            break;
View Code

 




4,// 二维码扫描事件
case Wechat::MSG_EVENT_SCAN:  
if (isset($data[\'EventKey\'])){
                                $EventKey = str_replace("qrscene_", "", $data[\'EventKey\']);
                                $WxQrConfigModel = D(\'WxQrConfig\');
                                // 扫码事件统计 wx_scan_history
                                $openid = $data[\'FromUserName\']; //必须先赋值,不然获取不了值
                                $this->addScanCounts($EventKey, $openid); // 扫码统计处理

                                $map = array();
                                $map[\'scene_id\'] = $EventKey;
                                $WxQrConfigModel->where($map)->setInc(\'count\');
                                $info = $WxQrConfigModel->where($map)->find();
                                $title = $info[\'title\'];
                                $description = $info[\'description\'];
                                $url = $info[\'url\'];
                                $picture_url = $info[\'picture_url\'];
                                // $this->logger($info);


                                if ($info[\'type\'] == \'3\') { // 单图输出
                                    $wechat->replyImage($title);die;
                                }
                                if ($info[\'url\'] && $info[\'title\'] && $info[\'description\'] && $info[\'picture_url\']) {
                                    $wechat->replyNewsOnce($title, $description, $url, $picture_url);die;
                                } else if ($description) {
                                    $wechat->replyText($description);die;
                                }

                            }
                            break;
View Code

 




5,自动回复
case Wechat::MSG_TYPE_TEXT: //自动回复
$WxKeywordModel = new \Wechat\Model\WxKeywordModel(\'wx_keyword\',\'lie_\',\'MKTWX_DB_CONFIG\');
                    $keyword = $data[\'Content\'];
                    $map[\'keyword\'] = array(\'eq\', $keyword);
                    $map[\'status\'] = array(\'eq\', \'1\');
                    $map[\'toUserType\'] = array(\'eq\', \'1\');
                    $field = \'keyword,content,type,status\';
                    $res = $WxKeywordModel->field($field)->where($map)->find();
                    if ($res) {
                        $content = json_decode($res[\'content\'], true);
                        switch (strval($res[\'type\'])) {
                            case \'1\': // 单文
                                $wechat->replyText($content[\'content\']);die;
                                break;
                            case \'2\': // 图文
                                $wechat->replyNewsOnce($content[\'title\'], $content[\'content\'], $content[\'link\'], $content[\'img\']);die;
                                break;
                            case \'3\': // 单图
                                $wechat->replyImage($content[\'img\']);die;
                                break;
                            case \'4\': // 复合
                                $wechatModel = wechat();
                                $openid = $data[\'FromUserName\']; //必须先赋值,不然获取不了值

                                if ($content[\'content\']) {
                                    $redata = array(
                                        \'touser\' => $openid,
                                        "msgtype" => "text",
                                        "text" => array(
                                            \'content\' => $content[\'content\'],
                                        ),
                                    );
                                    $wechatModel->sendCustomMessage($redata);
                                }
                                if ($content[\'contentsec\']) {
                                    $redata = array(
                                        \'touser\' => $openid,
                                        "msgtype" => "text",
                                        "text" => array(
                                            \'content\' => $content[\'contentsec\'],
                                        ),
                                    );
                                    $wechatModel->sendCustomMessage($redata);
                                }

                                if ($content[\'img\']) {
                                    $redata[\'msgtype\'] = \'image\';
                                    $redata[\'touser\'] = $openid;
                                    $redata[\'image\'] = array(
                                        \'media_id\' => $content[\'img\'],
                                    );
                                    $wechatModel->sendCustomMessage($redata);
                                }


                                break;
                            default:
                                # code...
                                break;
View Code

 

 

 












 

分类:

技术点:

相关文章: