这次说的是通过生成一个二维码,用户进行扫码之后对用户打标签分成若干个组,方便对用户的管理。
首先了解下二维码的类型:
1、临时二维码,是有过期时间的,最长二维码生成后的30天(即2592000秒)后过期,能够生成较多数量。临时二维码主要用于帐号绑定等不要求二维码永久保存的业务场景。
2、永久二维码,是无过期时间的,但数量较少(目前为最多10万个)。永久二维码主要用于适用于帐号绑定、用户来源统计等场景。
用户扫描带场景值二维码时,可能推送以下两种事件:
如果用户还未关注公众号,则用户可以关注公众号,关注后微信会将带场景值关注事件推送给开发者。
如果用户已经关注公众号,在用户扫描后会自动进入会话,微信也会将带场景值扫描事件推送给开发者。
接下来获取带参数的二维码的过程包括两步,首先创建二维码ticket,然后凭借ticket到指定URL换取二维码。(部分代码)
public function qrcodeAdd()
{
$mp = $this->mp;//获取正在使用的公众号id
$data = I('post.');
$data['mp_id'] = $mp['id'];
$id = M('qrcode')->add($data);//表单中的信息获取之后插入数据表
$this->createTag($data['scene_str']);//调用创建标签(createTag())方法
include APP_PATH . 'LaneWeChat/lanewechat.php';//调用lanewechat框架
$ret = \LaneWeChat\Core\popularize::createTicket($data['qr_type'],$data['expire'],$data['scene_str']);//获取到接口中的信息
if (isset($ret['ticket'])) {判断ticket是否存在
$qrcodename = \LaneWeChat\Core\popularize::getQrcode($ret['ticket']);//凭借ticket换取二维码
$ret['src'] = $qrcodename;//存入数据库
$ret['create_time'] = time();
$result = M('qrcode')->where("id=$id")->save($ret);
if ($result) {
$this->ajaxReturn(array('msg'=>'生成成功'));
}else{
$this->ajaxReturn(array('msg'=>'生成失败'));
}
}
}
二维码生成成功之后创建标签,下面是部分代码:
public function createTag($tagname='')//$data['scene_str']的值给了$tagname
{
$mp = $this->mp;
$where['mp_id'] = $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);//获取josn数据
include APP_PATH . 'LaneWeChat/lanewechat.php';
$ret = Curl::callWebServer($api,$json,'POST');//lanewechat框架执行接口
if ($ret['tag']) {//存入信息
$row['mp_id'] = $mp['id'];
$row['tag_id'] = $ret['tag']['id'];
$row['tag'] = $ret['tag']['name'];
M('tags')->add($row);
}
}
}
最后就是和微信的连接(部分代码):
private static function fansGroup($openid,$tagname){//获取到$openid和$ragname
include APP_PATH . 'LaneWeChat/lanewechat.php';
$id = $_GET['id'];
$where['mp_id']=$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;
}
}
现在基本就能实现功能了!