生成带参数的二维码

获取带参数的二维码的过程包括两步,首先创建二维码ticket,然后凭借ticket到指定URL换取二维码。

首先,创建二维码ticket

参考一下参数


临时二维码请求说明

http请求方式: POST
URL: https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=TOKEN
POST数据格式:json
POST数据例子:{"expire_seconds": 604800, "action_name": "QR_SCENE", "action_info": {"scene": {"scene_id": 123}}}

或者也可以使用以下POST数据创建字符串形式的二维码参数:
{"expire_seconds": 604800, "action_name": "QR_STR_SCENE", "action_info": {"scene": {"scene_str": "test"}}}

正确的Json返回结果:

{"ticket":"gQH47joAAAAAAAAAASxodHRwOi8vd2VpeGluLnFxLmNvbS9xL2taZ2Z3TVRtNzJXV1Brb3ZhYmJJAAIEZ23sUwMEmm
3sUw==","expire_seconds":60,"url":"http://weixin.qq.com/q/kZgfwMTm72WWPkovabbI"}

参考代码:

创建ticket

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);
    }

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);
            include APP_PATH.'LaneWeChat/lanewechat.php';
            $ret=Popularize::createTicket($arr['type'],$arr['expire'],$arr['scene_str']);
            if(isset($ret['ticket'])){
            	$qrcodefile=$this->downqrcode($ret['ticket']);
            	$ret['src']=$qrcodefile;
            	$ret['create_time']=time();
            	M('qrcode')->where("id=$id")->save($ret);
            	$this->ajaxReturn(array('status'=>1,'msg'=>'添加成功','url'=>U('index')));
            }else{
            	$this->ajaxReturn(array('status'=>0,'msg'=>$ret));
            }
		}
	}

	//下载二维码
	public function downqrcode($ticket){
        include APP_PATH.'LaneWeChat/lanewechat.php';
        $ret=Popularize::getQrcode($ticket);
        return $ret;
	}

通过ticket换取二维码

参考代码

 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 $result;
        return $filename;
        // echo $result;


    }

获取二维码ticket后,开发者可用ticket换取二维码图片。请注意,本接口无须登录态即可调用。

请求说明

HTTP GET请求(请使用https协议)https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=TICKET
提醒:TICKET记得进行UrlEncode

返回说明

ticket正确情况下,http 返回码是200,是一张图片,可以直接展示或者下载。

HTTP头(示例)如下:
Accept-Ranges:bytes
Cache-control:max-age=604800
Connection:keep-alive
Content-Length:28026
Content-Type:image/jpg
Date:Wed, 16 Oct 2013 06:37:10 GMT
Expires:Wed, 23 Oct 2013 14:37:10 +0800
Server:nginx/1.4.1

错误情况下(如ticket非法)返回HTTP错误码404。

注意:临时二维码,是有过期时间的,最长可以设置为在二维码生成后的30天(即2592000秒)后过期,但能够生成较多数量。临时二维码主要用于帐号绑定等不要求二维码永久保存的业务场景

这样,生成带参数的二维码就完成了。




你可能感兴趣的:(二维码)