新增二维码,实现用户扫描二维码关注时被打上标签
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 '失败';
}
}
}