在微信公众号公众平台接口文档中,有一个接口是为了满足用户渠道推广分析及功能等场景的需要而开放的接口就是带参数二维码的接口。
目前有两种二维码类型:
1.临时二维码
有过期时间,最长30天(2592000s),能够生成较多数量,主要用于账号绑定等不要求二维码永久保存的业务场景。
2.永久二维码
无过期时间,数量较少(最多10万个),适用于账号绑定、用户来源统计等业务场景。
当用户扫描带有场景值的二维码时,会推送下面两种事件:
1.当用户位关注公众号时,用户可以关注公众号,关注后微信将场景值关注事件推送给开发者;
2.当用户已经关注过公众号时,在用户扫描二维码,会自动进入会话界面,微信也会将场景值扫描时间推送给开发者。
操作步骤
1.创建二维码ticket
每次创建二维码ticket需要提供开发者自行设定的参数scene_id.
临时二维码
http请求方式: POST
URL: https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=TOKENPOST数据格式: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”}}}
永久二维码
http请求方式: POST
URL: https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=TOKENPOST数据格式:json
POST数据例子:{“action_name”: “QR_LIMIT_SCENE”, “action_info”: {“scene”: {“scene_id”: 123}}}或者也可以使用以下POST数据创建字符串形式的二维码参数:
{“action_name”: “QR_LIMIT_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_id | 场景值ID,临时二维码时为32位非0整型,永久二维码时最大值为100000(目前参数只支持1–100000) |
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 | 二维码图片解析后的地址,开发者可根据该地址自行生成需要的二维码图片 |
2.通过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。
示例php代码 (临时二维码)
$url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=" . $access_token;//获取ticket access_token 详见微信开发文档获取方法 $scene_id = 3000;//定义的场景值 3000,业务员二维码 $post = '{"expire_seconds": 604800, "action_name": "QR_SCENE", "action_info": {"scene": {"scene_id": ' . $scene_id . '}}}'; $res = curl_post($url, $post); if (!empty($res)) { $res = json_decode($res, true); $ticket = $res['ticket']; $url = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=" . urlencode($ticket); $file = file_get_contents($url); $file_name = time() . mt_rand(1000, 9999) . '.jpg'; file_put_contents(ROOT_PATH . 'data/cache/' . $file_name, $file); $qrcode_url = 'https://www.libaocai.com/data/cache/' . $file_name; echo '获取到的openid是:'.$_SESSION['openid'].'<br/>'; echo '获取到的二维码是:<br/>'; echo '<img src="' . $qrcode_url . '"/>'; } else{ echo '<pre>'; print_r($res); exit; }
3.微信扫码事件消息处理
switch($postObj->MsgType){ case 'event': if($postObj->Event == 'subscribe'){//首次关注,关注事件 $scene_id = $postObj ->EventKey; $sale_id = str_replace('qrscene_','',$scene_id); $contentStr = "hello,您是第一次来到XXX,欢迎您!会员注册,戳这里https://www.libaocai.com/?u=".$sale_id; $resultStr = sprintf($textTpl,$fromUsername,$toUsername,$time,'text',$contentStr); echo $resultStr; } else if($postObj->Event == 'SCAN'){//关注过,扫描事件 $scene_id= $postObj ->EventKey;//scene_id //检测是否是3000 $contentStr = "您真牛!找到我们的业务员推广链接入口!scence_id:".$scene_id; $resultStr = sprintf($textTpl,$fromUsername,$toUsername,$time,'text',$contentStr); echo $resultStr; } }
ps:这里后续还会有补充。
转载请注明:苏demo的别样人生 » 微信公众号生成带参数的二维码