🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] # 简介 知道用户从什么地方扫的 为了满足用户渠道推广分析和用户帐号绑定等场景的需要,公众平台提供了生成带参数二维码的接口。使用该接口可以获得多个带不同场景值的二维码,用户扫描后,公众号可以接收到事件推送。 场景二维码作用: 解决关注时来源问题 使用的场景: * 加盟 * 活动场景 * 分销系统 目前有2种类型的二维码 * 临时二维码,是有过期时间的,最长可以设置为在二维码生成后的30天(即2592000秒)后过期,但能够生成较多数量。临时二维码主要用于帐号绑定等不要求二维码永久保存的业务场景 * 永久二维码,是无过期时间的,但数量较少(目前为最多10万个)。永久二维码主要用于适用于帐号绑定、用户来源统计等场景。 # 生成临时和永久二维码 https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1443433542 步骤: * 获取ticket(凭据) * 通过ticket(凭据)换取二维码图片资源 * 保存二维码图片资源到本机 ![](https://box.kancloud.cn/27a6fbf4dc6946cd3d7be33142560551_792x553.png) ~~~ /** * 生成场景二维码 * @param int|integer $flag 0 临时 1永久 * @return [type] [description] */ public function createQrcode(int $flag = 0, int $id = 1) { // 第1步 获取ticket $url = 'https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=' . $this->getAccessToken(); # 参数的准备 if (0 === $flag) { $data = '{"expire_seconds": 2592000, "action_name": "QR_SCENE", "action_info": {"scene": {"scene_id": ' . $id . '}}}'; } else { $data = '{"action_name": "QR_LIMIT_SCENE", "action_info": {"scene": {"scene_id": ' . $id . '}}}'; } # 得到ticket http_request是封装的curl $json = $this->http_request($url, $data); # json转数组 $arr = json_decode($json, true); $ticket = $arr['ticket']; // 第2步 用ticket换取二维码资源 # TICKET记得进行UrlEncode $url = 'https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=' . urlencode($ticket); # 发起get请求 $img = $this->http_request($url); // 第3步 写入到文件中 file_put_contents('qrcode.jpg', $img); return 'qrcode.jpg'; } ~~~ ~~~ $wx = new Wechat(); echo '<img src = "' .$wx->createQrcode() . '" />'; ~~~ 用户扫了,会走被动消息,告诉你订阅事件 取消关注,我们是没有发送任何消息的,不要记录日志 ![](https://box.kancloud.cn/618c8a470ca6997c0de2bb475acbf81a_1840x448.png) ![](https://box.kancloud.cn/b12dfc7b75e43e7d1038aee4317018b7_981x487.png) 在被动回复消息那,设置事件 ~~~ case 'subscribe': // 如果 EventKey 此没有值,表示顶级 $EventKey = $obj->EventKey; $EventKey = (string)$EventKey; break; ~~~