thinkphp框架下的微信验证、关注回复图文,文本、向用户推送消息、首次登录入库或更新用户资料等

1.thinkphp框架下的微信验证、关注回复图文,文本、向用户推送消息、首次登录入库或更新用户资料等

2.代码很不规范,以后再改了,先实现了

多图文正在做。。。。。。。。。。。。。。。。。。。

<?php
/*
 * 微信端验证
 */
class WechatAction extends Action
{
    private $member_nums = 0;
    /*
     * 验证token | 关注提醒 
     */
    public function index(){ 
        //file_put_contents('/var/log/test.txt', date('Y-m-d H:i:s',time())."\n",FILE_APPEND);
        $store_id = $_GET['sid'];
        $this ->store_id =  $store_id;
	$wxshop_model = M('wxshop');	
        $token = $wxshop_model ->where("store_id = '$store_id'") ->getField('token');

        if(empty($token)) $token = "isempty";	
            $token = trim($token);
	if (!class_exists('SimpleXMLElement')) {
            die('SimpleXMLElement class not exist');
        }
        if (!function_exists('dom_import_simplexml')) {
            die('dom_import_simplexml function not exist');
        }
	import("ORG.Wechat.Wechat");
        $weixin = new Wechat($token);
        $data = $weixin->request();
        $this->data = $data;
	//file_put_contents('/var/log/test.txt', $data,FILE_APPEND);
        
        //===不为空则表示接收到微信Post过来的请求【用户关注或取消】
        if ($this->data) {           
            	
            list($content, $type) = $this->reply($data);//将数组赋给变量	 
//          $fp = fopen('/var/log/test.txt','w+');   
//	    fwrite($fp,var_export($content,true));   
//	    fclose($fp);  
            $weixin->response($content, $type);
        }
		
    }
    /*
     * 消息推送,用户关注时
     */
    private function reply($data)
    {
        $openid = $data['FromUserName']; //用户openid
        $store_id = $this ->store_id;//商家id
         //file_put_contents('/var/log/test.txt', $store_id.'\n',FILE_APPEND);
        //语音功能
        if (isset($data['MsgType'])) {
            if ('voice' == $data['MsgType']) {
                $data['Content'] = $data['Recognition'];
                $this->data['Content'] = $data['Recognition'];
            }
        }	
        //==监听事件,判断是否关注
        if (isset($data['Event'])) {
            if ('CLICK' == $data['Event']) {
                $data['Content'] = $data['EventKey'];
                $this->data['Content'] = $data['EventKey'];
            }
            if ($data['Event'] == 'SCAN') { //语音
                $data['Content'] = $this->getRecognition($data['EventKey']);
                $this->data['Content'] = $data['Content'];
				
            } elseif ($data['Event'] == 'MASSSENDJOBFINISH') {
               
				
            } elseif ('subscribe' == $data['Event']) { 
                //关注后
                //***********************************************/               
                //   表member_points,member_points_log,member_relation
                //1、推送关注提示信息,更改关注标识 
                //2、更改用户资料
                //3、关注时间、关注排名等
                //**********************************************/		

                $rr = $this->_get_appid_appsecret();
                $appid = $rr['appid'];
                $appsecret = $rr['appsecret'];		
                $access_token = $this->_get_access_token();
                //获取用户信息
                $url = 'https://api.weixin.qq.com/cgi-bin/user/info?access_token='.$access_token.'&openid='.$openid;
                $json=json_decode($this->curlGet($url));
                $data['is_subscribe'] = $json->subscribe;
                //$data['user_name'] = isset($json->nickname)?$json->nickname : '';
                $data['wx_name'] = isset($json->nickname)?$json->nickname : '';
                $data['sex'] = isset($json->sex)?$json->sex : '';
                $data['add_time'] = time();
                $data['headimgurl'] = isset($json->headimgurl)?$json->headimgurl : '';
                $data['store_id'] = $store_id;
                $data['openid'] = $openid;
                //==判断是否存在上下级,并推送下级关注提醒消息
               
                $member_mod = M('member');
                $member_relation_mod = M('member_relation');
                $member_info = $member_mod ->field('id,store_id,openid,is_subscribe') ->where("openid='$openid' AND store_id = '$store_id'") -> find();
                //==获取商铺设置的关注
                $wx_atteninfo_model = M("wx_atteninfo");         
                $atteninfo_res = $wx_atteninfo_model ->where("wxshop_id =".$store_id) ->find();

                if(empty($member_info) || $member_info === FALSE){//没有此用户则创建
                    $data['user_name'] = empty($member_info['user_name']) ? '':$json ->nickname;
                    file_put_contents('/var/log/test.txt', 'fc3'.PHP_EOL,FILE_APPEND);
                    $res_mem_add = $member_mod -> data($data) ->add();
                    //===更新关注数 [虚假,只为营销]
                   
                    $begin_num = $atteninfo_res['begin_num'];
                     file_put_contents('/var/log/test.txt', $begin_num.PHP_EOL,FILE_APPEND);
                    if(!empty($begin_num)){
                        $update['begin_num'] = $begin_num + 1;
                        $wx_atteninfo_model ->where('wxshop_id='.$data['store_id'])->save($update);
                         $atteninfo_res = $wx_atteninfo_model ->where("wxshop_id =".$store_id) ->find();

                    }
                }elseif($member_info['is_subscribe'] == '0'){//用户还没有关注则更新
                    unset($data['store_id']);
                    $res_mem_update = $member_mod ->where("store_id='$store_id' AND openid='$openid'")-> data($data) ->save();            
                    $uid = $member_info['id'];//当前用户id
                    //==好友关注三级提醒
                    for($i=0;$i<3;$i++)
                    {
                        $parent_uid = $member_relation_mod ->where("store_id = '$store_id' AND uid = ".$uid) ->getField('parent_uid');//获取用户上级id
                        if(!empty($parent_uid))
                        {//如果存在父id,则推送消息
                            
                            $parent_openid = $member_mod ->where('store_id='.$store_id.' AND id='.$parent_uid.'') ->getField('openid');//获取父类用户openid                      
                            $uid = $parent_uid;//查找上级父id
                            $friend_reply_url = 'http://'.$_SERVER['HTTP_HOST'].'/index.php?m=Member&a=index&sid='.$store_id.'';
                            if(!empty($atteninfo_res['friend_reply_url'])){
                                $friend_reply_url = $atteninfo_res['friend_reply_url'];
                            }
                            if(!empty($atteninfo_res['friend_reply'])){
                                $friend_replay = $atteninfo_res['friend_reply'];
                            }
                            $this->send(array('friend_reply'=>$friend_replay, 'friend_reply_url'=>$friend_reply_url, 'store_id'=>$store_id,'openid'=>$parent_openid,'appid'=>$appid,'appsecret'=>$appsecret,'nickname'=> $data['wx_name']),'guanzhudaili');
                        }                
                    }
                    /*if(!empty($parent_uid))
                    {//如果存在父id,则推送消息【一级】
                        $parent_openid = $member_mod ->where('store_id='.$store_id.' AND id='.$parent_uid.'') ->getField('openid');//获取父类用户openid
                        //file_put_contents('/var/log/test.txt', $member_mod->getLastSql().'\n',FILE_APPEND);
                        //file_put_contents('/var/log/test.txt', $parent_openid,FILE_APPEND);
                        
                        $this->send(array('store_id'=>$store_id,'openid'=>$parent_openid,'appid'=>$appid,'appsecret'=>$appsecret,'nickname'=> $data['wx_name']),'guanzhudaili');
                    }*/                    
                }
              
                
                //==推送关注公众号的提醒消息
               
                //file_put_contents('/var/log/test.txt', $wx_atteninfo_model->getLastSql().PHP_EOL,FILE_APPEND);
                		
               /* $fp = fopen('/var/log/test.txt','w+');   
                fwrite($fp,var_export($atteninfo_res,true));   
                fclose($fp);*/  
		$wxshop_mod = M('wxshop');
                $shop_name = $wxshop_mod ->where('store_id='.$store_id) ->getField('name');
                if($atteninfo_res !== FALSE){
                    //查找图文                  
                    $wx_article_model = M('wx_article');      
                    $rts = $wx_article_model ->where("wxshop_id ='$store_id'  AND is_subscribe ='1'") -> find();
                  //file_put_contents('/var/log/test.txt', $wx_article_model->getLastSql().PHP_EOL,FILE_APPEND);
                    
                    if($rts === FALSE || $rts['atteninfo_res']=='0'){
                            return array('感谢您关注('.$shop_name.')商城', 'text');
                    }else{
                        $type = $rts['type'];
                        if($type=="txt"){ //文本信息
                                $begin_num = $atteninfo_res['begin_num'];
                                if(!empty($begin_num) && is_numeric($begin_num) && $begin_num > 0){
                                    $rts['content'] = '亲,['.$data['wx_name'].']欢迎您关注['.$shop_name.'],您是第['. $atteninfo_res['begin_num'].']会员'. $atteninfo_res['atten_reply'];
                                }
                                return array($rts['content'], 'text');
                        }else{
                            //回复图文信息
                            //$url = $rts['art_url'];//文章的链接地址
                            $id = $rts['article_id'];
                            $url = "http://".$_SERVER["HTTP_HOST"]."/".'index.php?m=Index&a=WxArticle&article_id='.$id;//文章的链接地址
                           if(empty($atteninfo_res['atten_reply_url'])){
                                $data['url'] = $url;
                           }else{
                                $data['url'] = $atteninfo_res['atten_reply_url'];
                           }
                            $img = "http://".$_SERVER["HTTP_HOST"]."/".$rts['article_img'];
                            $about = $atteninfo_res['atten_reply'];
                            $title = $rts['article_title'];
                            $data['title'] = $title;
                            $data['keyword'] = $about;
                            $data['picurl'] = $img;
                           
                            $begin_num = $atteninfo_res['begin_num'];
                            //file_put_contents('/var/log/test.txt',$begin_num.PHP_EOL,FILE_APPEND);
                                if(!empty($begin_num) && is_numeric($begin_num) && $begin_num > 0){
                                    //file_put_contents('/var/log/test.txt',$begin_num.PHP_EOL,FILE_APPEND);
                                    $data['keyword'] =  '亲,['.$data['wx_name'].']欢迎您关注['.$shop_name.'],您是第['. $atteninfo_res['begin_num'].']会员,'.$data['keyword'];
                                }
                            return array(array(array($data['title'], $data['keyword'], $data['picurl'], $data['url'])), 'news');
                        }
                    }
                }else{
                     //file_put_contents('/var/log/test.txt', $wx_article_model->getLastSql().PHP_EOL,FILE_APPEND);
                        return array('感谢您关注('.$shop_name.')商城', 'text');
                }
				
                if ($follow_data['home'] == 1) {
                    return $this->keyword($follow_data['keyword']);
                } else {
                    return array(html_entity_decode($follow_data['content']), 'text');
                }  
				
            } elseif ('unsubscribe' == $data['Event']) { //取消关注
                $member_mod = M('member');
                $data['is_subscribe'] = '0';
                $member_mod ->where("store_id ='$store_id' AND openid='$openid'") -> data($data)->save();
            } elseif ($data['Event'] == 'LOCATION') { //自动获取位置回复
                //return array('LOCATION', 'text');
            }
        }		
	return $this->keyword($data['Content']);
    } 
        /*
         * 推送消息到公众号
         */
        public function send($rts=array(),$type="")
        {
            if(empty($rts['openid'])) return;
            $access_token = $this->_get_access_token();
             //==好友关注数(根据后台推广层级而定)只算三层
            $openid = $rts['openid'];
            $member_relation_mod = M('member_relation');
            $member_mod = M('member');
            $uid = $member_mod ->where("openid='$openid'") ->getField('id');//推送用户的id
            $one_level_list = $member_relation_mod ->field('parent_uid,uid,store_id') ->where("parent_uid ='$uid'") ->select();//一级朋友列表
            if(is_array($one_level_list) && count($one_level_list) >0){
                $one_level_nums = count($one_level_list);
                $this ->member_nums += $one_level_nums;//一级朋友数量
                if($one_level_nums >0){
                    foreach ($one_level_list as $key=>$val){
                        $nums_list = $member_relation_mod ->field('parent_uid,uid,store_id') ->where('parent_uid ='.$val['uid'])->select();
                       
                        $tuo_num_list = count($nums_list);//临时变量
                        if(is_array($nums_list) && count($nums_list) >0){
                            $this ->member_nums += count($nums_list);//二级朋友数量
                            foreach($nums_list as $key =>$val){
                                $three_list = $member_relation_mod ->field('parent_uid,uid,store_id') ->where('parent_uid='.$val['uid']) ->select();//三级朋友列表
                                if(is_array($three_list) && count($three_list) >0 ){
                                    $this ->member_nums +=count($three_list);//三级朋友数量
                                }
                            }
                        }
                    }           
                }            
            }
            $data = $this->_get_send_con($rts,$type);
            //file_put_contents('/var/log/test.txt', $data.'\n',FILE_APPEND);
            $rt=$this->curlPost('https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token='.$access_token,$data,0);
           
        }
        public function _get_send_con($rt=array(),$ty='')
        {
            /*$fp = fopen('/var/log/test.txt','w+');   
	    fwrite($fp,var_export($rt,true));   
	    fclose($fp); */
           
            $data = array();
            switch($ty){
                    case 'guanzhu':
                    $openid = $rt['openid'];
                    $str = '你的好友['.$rt['nickname'].']已经关注你啦;\n\n服务类型:关注已返积分\n提交时间:'.date('Y-m-d H:i:s').'\n\n备注:再接再厉哦!返积分详情点击进入查看!';
                    $data='{"touser": "'.$openid.'","msgtype": "news","news": {"articles": [{"title": "服务申请提交成功", "description": "'.$str.'","url":"'.str_replace('api','m',ADMIN_URL).'user.php?act=mypoints"}]}}';
                    break;
                    case 'guanzhudaili':
                    $openid = $rt['openid'];//服务类型:用户关注下级已返积分\n
                    //$str = '你的好友['.$rt['nickname'].']同学已经关注你啦;\n\n提交时间:'.date('Y-m-d H:i:s').'\n\n备注:他还需要购买你才有收入哦!';
                    //$str = '亲,【'.$rt['nickname'].'】欢迎您关注【'.$rt['name'].'】,您是第【'.$rt['begin_num'].'】个会员,【我们真诚的为您提供最优质的产品和服务】';
                    // $str = '恭喜您, 您的朋友['.$rt['nickname'].']已关注您,您共有['.$this->member_nums.']位朋友,[朋友越多,奖励越多1、超过100个朋友,奖励100元话费2、超过1000个奖励IWATCH3、超过10000个奖励一台IPHONE6,朋友加油]';  
                   $str = '恭喜您, 您的朋友['.$rt['nickname'].']已关注您,您共有['.$this->member_nums.']位朋友.'.$rt['friend_reply'].'';     
                    $data='{"touser": "'.$openid.'","msgtype": "news","news": {"articles": [{"title": "分享创造价值", "description": "'.$str.'","url":"'.$rt['friend_reply_url'].'"}]}}';
                    break;
            }
            //file_put_contents('/var/log/test.txt', $data.'\n',FILE_APPEND);
            return $data;
        }
        public function get_access_token()
	{
		$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wx86526eefe97f5541&secret=475c208e114c80684afaa2c19d74303e";
		$data = json_decode(file_get_contents($url),true);
		if($data['access_token'])
		{
			return $data['access_token'];
		}
		else
		{
	
			return "获取access_token错误";
		}
	}
	
	
	public function get_jsapi_ticket()
	{
		$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wx86526eefe97f5541&secret=475c208e114c80684afaa2c19d74303e";
		 
		$data = json_decode(file_get_contents($url),true);
		 
		if($data['access_token'])
		{
			$url="https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=".$data['access_token']."&type=jsapi";
			$data = json_decode(file_get_contents($url),true);
			if($data['ticket'])
			{
				return $data['ticket'];
			}
			else
			{
				return "获取jsapi_ticket错误";
			}
		}
		else
		{
	
			return "获取access_token错误";
		}
	}
	
	/**
	 * 	作用:产生随机字符串,不长于32位
	 */
	public function createNoncestr( $length = 32 )
	{
		$chars = "abcdefghijklmnopqrstuvwxyz0123456789";
		$str ="";
		for ( $i = 0; $i < $length; $i++ )
		{
			$str.= substr($chars, mt_rand(0, strlen($chars)-1), 1);
		}
		 
		return $str;
	}
     /*
     * 获取appid、appsecret
     */
      public function _get_appid_appsecret(){
        $wxshop_model = M('wxshop');
        
        $store_id = $this -> store_id;
        //$store_id = '2';//测试
        $result = $wxshop_model -> where('store_id='.$store_id) ->field('store_id,appid,appsecret') ->find();

        $res['appid'] = $result['appid'];
        $res['appsecret'] = $result['appsecret'];     
        return $res;
     }
     /*
     * 获取access_token
     */
      public function _get_access_token(){

        $res = $this->_get_appid_appsecret();
        $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$res['appid'].'&secret='.$res['appsecret'];
        $con = $this->curlGet($url);
        $json=json_decode($con);
        $access_token = $json->access_token; //获取 access_token
       
        return $access_token;
    } 
    /*
     * curl提交
     */
    public function curlGet($url)
    {
            $ch = curl_init();
            $header = "Accept-Charset: utf-8";
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
            //curl_setopt($ch, CURLOPT_SSLVERSION, 3);
            curl_setopt($curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1);
            curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
            curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
            //curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
            curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
            curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            $temp = curl_exec($ch);
            return $temp;
    } 
       /*
     * post提交
     */
    public function curlPost($url, $data,$showError=1){
		$ch = curl_init();
		$header = "Accept-Charset: utf-8";
		curl_setopt($ch, CURLOPT_URL, $url);
		curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
		curl_setopt($curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1);
		curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
		curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
		$tmpInfo = curl_exec($ch);
		$errorno=curl_errno($ch);
		if ($errorno) {
			return array('rt'=>false,'errorno'=>$errorno);
		}else{
			$js=json_decode($tmpInfo,1);
			if (intval($js['errcode']==0)){
				return array('rt'=>true,'errorno'=>0,'media_id'=>$js['media_id'],'msg_id'=>$js['msg_id']);
			}else {
				if ($showError){
					return array('rt'=>true,'errorno'=>10,'msg'=>'发生了Post错误:错误代码'.$js['errcode'].',微信返回错误信息:'.$js['errmsg']);
				}
			}
		}
	}
}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值