生成带参数的二维码

        为了满足用户渠道推广分析和用户帐号绑定等场景的需要(我们主要学习用户帐号绑定等场景),公众平台提供了生成带参数二维码的接口。使用该接口可以获得多个带不同场景值的二维码,用户扫描后,公众号可以接收到事件推送。

目前有2种类型的二维码:

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

2、永久二维码,是无过期时间的,但数量较少(目前为最多10万个)。永久二维码主要用于适用于帐号绑定、用户来源统计等场景。

用户扫描带场景值二维码时,可能推送以下两种事件:

如果用户还未关注公众号,则用户可以关注公众号,关注后微信会将带场景值关注事件推送给开发者。

如果用户已经关注公众号,在用户扫描后会自动进入会话,微信也会将带场景值扫描事件推送给开发者。

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

临时二维码请求说明

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"}}}

参数 说明
expire_seconds 该二维码有效时间,以秒为单位。 最大不超过2592000(即30天),此字段如果不填,则默认有效期为30秒。
action_name 二维码类型,QR_SCENE为临时的整型参数值,QR_STR_SCENE为临时的字符串参数值,QR_LIMIT_SCENE为永久的整型参数值,QR_LIMIT_STR_SCENE为永久的字符串参数值
action_info 二维码详细信息
scene_str 场景值ID(字符串形式的ID),字符串类型,长度限制为1到64

返回说明

正确的Json返回结果:

{"ticket":"gQH47joAAAAAAAAAASxodHRwOi8vd2VpeGluLnFxLmNvbS9xL2taZ2Z3TVRtNzJXV1Brb3ZhYmJJAAIEZ23sUwMEmm
3sUw==","expire_seconds":60,"url":"http://weixin.qq.com/q/kZgfwMTm72WWPkovabbI"}
参数 说明
ticket 获取的二维码ticket,凭借此ticket可以在有效时间内换取二维码。
expire_seconds 该二维码有效时间,以秒为单位。 最大不超过2592000(即30天)。
url 二维码图片解析后的地址,开发者可根据该地址自行生成需要的二维码图片

// 增加二维码
	public function qrcode_add(){
		if (IS_GET) {
			$this->display();
		}else{
			$mp = $this->mp;
			$arr = I('post.');
			$arr['mp_id'] = $mp['id'];
			$id = M('qrcode')->add($arr);
			// 调用创建标签
			$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']);
				$ret['src'] = ltrim($qrcodefile,'.');
				$ret['create_time'] = time();
				M('qrcode')->where("id=$id")->save($ret);
			// 		echo $data;
			// exit;
				$this->ajaxReturn(array('status'=>1,'msg'=>'ok','url'=>U('qrcode')));
			}else{
				$this->ajaxReturn(array('status'=>0,'msg'=>$ret));
			}
		}
	}

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,JSON_UNESCAPED_UNICODE);
        // echo $template;
        // exit;
        return Curl::callWebServer($queryUrl, $template, $queryAction);
    }



你可能感兴趣的:(生成带参数的二维码)