新增二维码,实现用户扫描二维码关注时被打上标签
public function qrcodeAdd(){ if(IS_GET){ $this->display('qrcode_add'); }else{ $mp = $this->mp; $arr = I('post.'); $arr['mp_id'] = $mp['id']; $id = M('qrcode')->add($arr); // print_r($id); // exit; //调用创建标签 $this->createTag($arr['scene_str']); include APP_PATH . 'LaneWeChat/lanewechat.php'; $ret = Popularize::createTicket($arr['qr_type'],$arr['expire'],$arr['scene_str']); if(isset($ret['ticket'])){ $qrcodefile = Popularize::getQrcode($ret['ticket']); // echo $qrcodefile; // exit; $ret['src'] = ltrim($qrcodefile,'.'); $ret['create_time'] = time(); M('qrcode')->where("id=$id")->save($ret); $this->ajaxReturn(array('status'=>1,'msg'=>'Ok','url'=>U('qrcode'))); }else{ $this->ajaxReturn(array('status'=>0,'msg'=>$ret)); } } }
调用事先写好的框架
生成带参数的二维码 - 第一步 创建二维码ticket
获取带参数的二维码的过程包括两步,首先创建二维码ticket,然后凭借ticket到指定URL换取二维码。
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 if($type == 2){ //永久 $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); }第二步 通过ticket换取二维码
/** * 生成带参数的二维码 - 第二步 通过ticket换取二维码 * @param $ticket Popularize::createTicket()获得的 * @param $filename String 文件路径,如果不为空,则会创建一个图片文件,二维码文件为jpg格式,保存到指定的路径 * @return 直接echo本函数的返回值,并在调用页面添加header('Content-type: image/jpg');,将会展示出一个二维码的图片。 */ public static function getQrcode($ticket){ $queryUrl = 'https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket='.urlencode($ticket); $queryAction = 'GET'; $result = Curl::callWebServer($queryUrl, '', $queryAction, 0); $filename = './Public/qrcode/'.time().'.jpg'; file_put_contents($filename, $result); // if(!empty($filename)){ // file_put_contents($filename, $result); // } return $filename; }
创建标签
//创建标签 public function createTag($tagname=''){ $mp = $this->mp; // $tagname = '上课'; //查询数据库中是否有$tagname,没有则创建并将tag和tag_id写入数据库中 $where['mp_id'] = $mp['id']; $where['tag'] = $tagname; $data = M('tags')->where($where)->find(); if(empty($data)){ $accessToken = getAccess_token(); $api = 'https://api.weixin.qq.com/cgi-bin/tags/create?access_token='.$accessToken; $arr = array(); $arr['tag']['name'] = $tagname; $json = json_encode($arr,JSON_UNESCAPED_UNICODE); // echo $json; // exit; include APP_PATH . 'LaneWeChat/lanewechat.php'; $ret = \LaneWeChat\Core\Curl::callWebServer($api,$json,'POST'); // print_r($ret); // exit; if($ret['tag']){ $row['mp_id'] = $mp['id']; $row['tag_id'] = $ret['tag']['id']; $row['tag'] = $ret['tag']['name']; M('tags')->add($row); }else{ echo '失败'; } } }