二维码
大约 2 分钟languagewechat
概述
不管临时还是永久二维码都无法使用普通扫描软件获取场景值,需要使用微信扫描二维码,后台程序在扫描事件下接受到场景值,后台接受到的 map 对象如下
{Ticket=gQEO8TwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAyQUFTQTRTUU84Sl8xcTFYanhEY1MAAgQBgUpnAwSAOgkA, CreateTime=1732940208, EventKey=测试简单的字符串, Event=SCAN, ToUserName=gh_04b040d5c5f6, FromUserName=odDItvwJVRN7XNuTLTqGSfTVrs-Y, MsgType=event}
所以后台要获取场景值则取上面 map 对象的属性 EventKey
场景值
二维码场景值要保存一个对象,可以使用 com.fasterxml.jackson.databind.ObjectMapper 将对象转换为 json 字符串后构建请求二维码票据时的场景值,2024年11月30日 制作 visitor 时使用下面模型作为创建二维码请求的参数
public class CreateQrTicketReqParam implements Serializable {
private static final long serialVersionUID = 1L;
private Integer permanent;// 0临时二维码,1永久二维码
private Integer type;// 二维码用途:0用于关注的二维码,1用于传输数据,2用于跳转连接
private Object sceneData;// 二维码场景值,用字符串表示各种数据类型:数组、对象、数字等。在具体场景使用时要先转换数据类型
}
其中属性 sceneData 可以接受任意类型的数据:字符、数字、数组、对象,方便日后扩充二维码功能。
永久二维码
微信服务号的永久二维码是有数量限制的,所以不适用于大批量生产的智能硬件上直接显示服务号的永久二维码(最多10W个)。想要突破限制可以将二维码内容调整为一个公网域名,将硬件ID携带为路径参数,用户扫描后访问厂家的网页,就可以获得硬件ID了,此时后台请求微信服务器一个临时二维码并显示,提示用户扫描该二维码关注服务号,临时二维码是没有数量限制的。本方案来自 官方帖子。
临时二维码
这里罗列比较关键的限制,详细介绍查看 官方文档。临时二维码有效期是 2592000秒,即30天。
使用票据显示二维码
将票据字符串替换到下面地址的 TICKET 上,注意要将 TICKET 使用 UrlEncode 转换
https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=TICKET
