PHPweixin微信开发(创建带标签的二维码,并扫码实现分组)

       微信扫描二维码统计来源对每个公司市场分析有很大作用。而且微信为开发者提供了一个生成带参数的二维码的接口。我 研究了好久,终于搞定。现写成文档分享出来。希望对大家有帮助。

       首先是创建二维码,(现在创建出来的二维码还不能实现分组,只是实现一个关注订阅号的作用)下面为亲们提供代码

public function qrcodeAdd()
	{
		if (IS_GET) {
			$this->display('qrcode_add');
		}else{
			$mp = $this->mp;
			$arr = I('post.');//使用post方式提交
			$arr['mpid'] = $mp['id'];//获取mpid
			$id = M('qrcode')->add($arr);

			//$this->createTag($arr['scene_str']);//调用创建标签的方法

			include APP_PATH .'LaneWeChat/lanewechat.php';//引用文件LaneWeChat目录下的lanewechat.php文件
			$ret = Popularize::createTicket($arr['qr_type'],$arr['expire'],$arr['scene_str']);
			//引用静态方法createTicket
			if (isset($ret['ticket'])) {//获取Ticket
				$qrcodefile = Popularize::getQrcode($ret['ticket']);
				$ret['src'] = $qrcodefile;
				$ret['create_time'] = time();
				M('qrcode')->where("id=$id")->save($ret);//数据存入数据库
				$this->ajaxReturn(array('status'=>1,'msg'=>'ok','url'=>U('index')));//创建成功
			}else{
				$this->ajaxReturn(array('status'=>0,'msg'=>$ret));//创建失败
			}
		}

静态方法createTicket(此静态方法在文件Popularized文件内)

public static function createTicket($type, $expireSeconds, $sceneStr){
        $accessToken = getAccess_token();
        $queryUrl = 'https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token='.$accessToken;
        $queryAction = 'POST';
        $template = array();
        if($type == 1){
            //创建临时二维码
            $template['expire_seconds'] = $expireSeconds;
            $template['action_name'] = 'QR_STR_SCENE';//带字符串的形式
        }else{
            //创建永久二维码
            $template['action_name'] = 'QR_LIMIT_STR_SCENE';
        }
        $template['action_info']['scene']['scene_str'] = $sceneStr;
        $template = json_encode($template);
        // echo $template;
        // exit;
        return Curl::callWebServer($queryUrl, $template, $queryAction);
    }

创建标签的方法 示例代码如下:(调用此方法会自动创建名为“标签”的标签,并加入名为tag的数据表中,如果有不会重复创建)

public function createTag($tagname='')
	{
		$mp = $this->mp; 
		$tagname = "标签";
		$where['mpid'] = $mp['id'];
		$where['tag'] = $tagname;
		$data = M("tags")->where($where)->find();


		if(empty($data)){
			$api = "https://api.weixin.qq.com/cgi-bin/tags/create?access_token=".getAccess_token();
			$arr = array();
			$arr['tag']['name'] = $tagname;
			$json = json_encode($arr,JSON_UNESCAPED_UNICODE);


			include APP_PATH .'LaneWeChat/lanewechat.php';
			$ret=Curl::callWebServer($api,$json,'POST');
			if($ret['tag']){
				$row['mpid'] = $mp['id'];
				$row['tag_id'] = $ret['tag']['id'];
				$row['tag'] = $ret['tag']['name'];
				M('tags')->add($row);
			}
		}
	}

在创建二维码的代码中加入此行代码会调用创建标签代码

$this->createTag($arr['scene_str']);//调用创建标签的方法

下面为分组代码

public static function eventQrsceneSubscribe(&$request){
        /*
        *用户扫描带参数二维码进行自动分组
        *此处添加此代码是大多数需求是在扫描完带参数二维码之后对用户自动分组
        */
        $scene_str = str_replace("qrscene_","",$request['eventkey']);
        //移动用户到相应分组中去,此处的$sceneid依赖于之前创建时带的参数
        $ret = self::fansGroup($request['fromusername'],$scene_str);

        if($ret===true){
            $content = '欢迎关注,你被分配到:' . $scene_str;
        }else{
            $content = '失败了,' .json_encode($ret);
        }

        return ResponsePassive::text($request['fromusername'],$request['tousername'],$content);
    }

    /**
     * @descrpition 扫描二维码(已关注时)
     * @param $request
     * @return array
     */
    public static function eventScan(&$request){
      if(isset($request['eventkey']) && isset($request['ticket'])){
        $scene_str = $request['eventkey'];
        $ret = self::fansGroup($request['fromusername'],$scene_str);
        if($ret===true){
            $content = '分配到:' . $scene_str;
        }else{
            $content = '失败了,' .json_encode($ret);
        }
      }
    return ResponsePassive::text($request['fromusername'],$request['tousername'],$content);

    }

    private static function fansGroup($openid,$tagname){
        
        include APP_PATH . 'LaneWeChat/lanewechat.php';
        $id = $_GET['id'];

        $where['mpid']=$id;
        $where['tag'] = $tagname;
        $data = M("tags")->where($where)->find();
        if(!empty($data)){
            $api = "https://api.weixin.qq.com/cgi-bin/tags/members/batchtagging?access_token=".getAccess_token();
             $arr = array();
             $arr = ['openid_list'=>array($openid),'tagid'=>(int)$data['tag_id']];
             $json = json_encode($arr);

             $ret=\LaneWeChat\Core\Curl::callWebServer($api,$json,'POST');

             if(isset($ret['errcode']) && $ret['errcode']==0){
                return true;
             }else{
                return $ret;
             }
        }else{
            return '无此标签' . $tagname;
        }
    }

让用户扫描生成的带标签的二维码,会关注并自动分组。

感谢您的观看。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值