当前位置:首页 > 编程技术 > 正文内容

生成带参数的二维码

yc8881年前 (2022-12-27)编程技术289

生成带参数的二维码

1. 前言


为了满足用户渠道推广分析和用户帐号绑定等场景的需要,公众平台提供了生成带参数二维码的接口

生成带参数的二维码官方文档: https://developers.weixin.qq.com/doc/offiaccount/Account_Management/Generating_a_Parametric_QR_Code.html

目前有两种类型的二维码: 1、临时二维码 2、永久二维码

应用场景:

在一个公众号网页项目中每个用户都有一个邀请好友的海报图片,海报图片中有一张公众号二维码,扫码二维码即可关注公众号,通过二维码关注公众号的新用户将自动绑定为二维码所属用户的下级

功能实现:

第一步: 给用户都生成一个二维码,该二维码的场景值为该用户的唯一标识,例如:id

第二步: 监听公众号关注事件推送,当有用户关注时判断有没有场景值,是不是新用户,当有场景值并且是新用户时,将该用户绑定为场景值所属用户的下级

2. 代码实现


我在 TP6.0中 使用 EasyWechat4.x 写的

一、创建二维码 ticket

场景值

  1. $scene = 1; // 用户id

临时二维码

  1. $result = $app->qrcode->temporary($scene, 6 * 24 * 3600);

永久二维码

  1. $result = $app->qrcode->forever($scene);

获取成功时 $result 值示例

注: 当公众号appid或开发者密钥配置错误时,创建二维码 ticket 将抛出异常

expire_seconds ticket 有效时间, 也就是二维码的有效时间,获取临时二维码ticket时才有该字段

  1. ^ array:3 [▼
  2. "ticket" => "gQG37zwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxxx"
  3. "expire_seconds" => 518400
  4. "url" => "http://weixin.qq.com/q/027J3KsSeoc4E1B0h61x1k"
  5. ]

二、使用二维码 ticket,生成二维码

  1. // 获取二维码网址(返回二维码图片地址)
  2. $url = $app->qrcode->url($result['ticket']);

$url 示例值如下所示: (其实就是 https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket= 拼接上 ticket值)

  1. https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=gQG37zwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAyN0ozS3NTZW9jNEUxQjBoNjF4MWsAAgRAaH5hAwQA6QcA

获取二维码完整示例

  1. $config = [
  2. 'app_id' => "wx0a48233ca8xxxx",
  3. 'secret' => "2674bb2165dc7c45160cxxx",
  4. 'response_type' => 'array', // 指定API调用返回结果的类型
  5. ];
  6. $app = \EasyWeChat\Factory::officialAccount($config);
  7. try {
  8. // 场景值
  9. $scene = 1;
  10. // 创建二维码ticket, 当公众号appid或开发者密钥配置错误时将抛出异常
  11. $result = $app->qrcode->temporary($scene, 6 * 24 * 3600);
  12. if (isset($result['errcode']) && $result['errcode'] == 48001) {
  13. // 48001: 个人订阅号没有权限调用高级接口
  14. // api unauthorized rid: 615f013d-15fcf84b-054f4b9b
  15. fault($result['errmsg']);
  16. }
  17. } catch (\Exception $e) {
  18. fault($e->getMessage());
  19. }
  20. // 获取二维码网址(返回二维码图片地址)
  21. $url = $app->qrcode->url($result['ticket']);
  22. echo "<img src=" . $url . ">";

三、关注公众号,绑定上下级关系

用户关注公众号后,微信服务器会向 服务器配置URL 推送一个消息,并携带一下数据包格式

服务器URL配置参考官方文档,本文不做介绍:

https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Access_Overview.html

  1. array (
  2. 'ToUserName' => 'gh_cff380f5a988',
  3. 'FromUserName' => 'ozlgE6DGcfpHE1Qz69U9xKQtsRkw',
  4. 'CreateTime' => '1635671639',
  5. 'MsgType' => 'event',
  6. 'Event' => 'subscribe',
  7. 'EventKey' => 'qrscene_1',
  8. 'Ticket' => 'gQGG7zwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAyMkhpbHREZW9jNEUxQjc3Nk54YzgAAgRHXn5hAwQA6QcA',
  9. )

分析下数据包中的数据,直

FromUserName 为用户在该公众号下的openid

字段 描述
FromUserName 用户在该公众号下的openid
MsgType 消息类型,event 代表是当前消息是事件推送
Event 值为subscribe代表时关注事件推送
EventKey qrscene_ 是固定前缀,1 是生成二维码时传入的场景值

$message 假设是上面的消息数据包,下面是关注公众号后的逻辑处理示例

  1. // 判断是否是关注事件
  2. if (!empty($message['Event']) && !empty($message['EventKey']) && $message['Event'] == 'subscribe') {
  3. // 匹配场景值
  4. preg_match('/_(\d+)$/', $message['EventKey'], $match);
  5. if (!empty($match[1])) {
  6. // 场景值
  7. $scene = $match[1];
  8. // 判断当前用户是不是新用户,是新用户则进行上下级关系绑定
  9. // ...
  10. }
  11. }

本站发布的内容若侵犯到您的权益,请邮件联系站长删除,我们将及时处理!


从您进入本站开始,已表示您已同意接受本站【免责声明】中的一切条款!


本站大部分下载资源收集于网络,不保证其完整性以及安全性,请下载后自行研究。


本站资源仅供学习和交流使用,版权归原作者所有,请勿商业运营、违法使用和传播!请在下载后24小时之内自觉删除。


若作商业用途,请购买正版,由于未及时购买和付费发生的侵权行为,使用者自行承担,概与本站无关。


本文链接:https://www.10zhan.com/biancheng/10287.html

标签: 公众号
分享给朋友:

“生成带参数的二维码” 的相关文章

【说站】Thymeleaf报错Error resolving template “XXX”

【说站】Thymeleaf报错Error resolving template “XXX”

修改了一下开源项目的目录结构访问突然报错Error resolving template “XXX”可能原因有如下三种:第一种可能:原因:在使用springboot的过程中,如果使用thymeleaf...

【说站】用一句话就可以去除宝塔面板操作上的二次验证

【说站】用一句话就可以去除宝塔面板操作上的二次验证

用过宝塔的朋友应该都会发现,现在宝塔面板有些鸡肋的功能,删除文件、删除数据库、删除站点等操作都需要做计算题!不仅加了几秒的延时等待,还无法跳过!这时候就会有朋友在想,如何去除宝塔面板的二次验证,此篇文...

【说站】Centos8.0如何配置静态IP详解及永久关闭防火墙

【说站】Centos8.0如何配置静态IP详解及永久关闭防火墙

这篇文章主要介绍了详解Centos8 配置静态IP的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来学习一下!1. 查看自己的网关地址点击虚...

【说站】利用Webhook实现Java项目自动化部署

【说站】利用Webhook实现Java项目自动化部署

用webhook就能实现Java项目自动部署,其实原理很简单。费话不多说,直接往下看教程。1. 创建gitee仓库并初始化2. 在linux安装git3. 在宝塔的软件的商店里下载Webhook4....

【说站】电脑安装MySQL时出现starting the server失败原因及解决方案

【说站】电脑安装MySQL时出现starting the server失败原因及解决方案

今天在安装MySQL时出现starting the server失败,经过查询分析得出以下结论,记录一下操作步骤。原因分析:如果电脑是第一次安装MySQL,一般不会出现这样的报错。如下图所示。star...

【说站】vagrant实现linux虚拟机的安装并配置网络

【说站】vagrant实现linux虚拟机的安装并配置网络

一、VirtualBox的下载和安装1、下载VirtualBox官网下载:https://www.virtualbox.org/wiki/Downloads我的电脑是Windows的,所以下载Wind...