1. 概念
公众号二维码和普通二维码是不同的,普通二维码扫码后要么显示一个字符串内容,要么跳转到一个网页(当二维码的内容是一个网址时,微信扫码会跳转对应网页)。
公众号二维码使用微信扫码后,会跳转到生成该二维码的公众号(服务号),而且会立即触发扫码事件。这样对于我们使用程序定义扫码后的动作行为,提供一个很好的切入点。
也就是说,公众号二维码扫码,第一可以跳入对应公众号,第二我们可以从后台得知扫码的具体信息并针对处理。
2. 代码
调用接口可以生成一个二维码图片文件:
/**
* 二维码管理
*/
@Api(tags = "二维码管理API")
@RestController
public class TicketController {
@Autowired
private WxMpService wxMpService;
/**
* 生成二维码文件,扫码后会自动跳转到公众号进行处理,并触发公众号事件
*/
@PostMapping("/ticketTest")
public File ticketTest() throws WxErrorException {
WxMpQrCodeTicket ticket = wxMpService.getQrcodeService().qrCodeCreateLastTicket("12345678");
// 获得在系统临时目录下的文件,需要自己保存使用,注意:临时文件夹下存放的文件不可靠,不要直接使用
File file = wxMpService.getQrcodeService().qrCodePicture(ticket);
return file;
}
}
3. 测试
调用ticketTest,返回结果如下(涉及隐私,使用###代替部分文件名):
"C:\\Users\\chen\\AppData\\Local\\Temp\\weixin-java-tools-temp4741306921049342803\\8b03f715-7c1d-40bd-8365-cb0530b2172c598882578242########.jpg"
1
我们使用浏览器打开该图片是一个二维码,扫码会跳到公众号。
且我们已经定义了消息处理器,消息处理器打印接收到的消息如下:
{"allFieldsMap":{"Ticket":"gQEc8TwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAybE9PTU5yd29lR0YxMDAwME0wNzUAAgTGvl9hAwQAAAAA","CreateTime":"1633664862","EventKey":"12345678","Event":"SCAN","ToUserName":"gh_025da3703370","FromUserName":"oINiq6UqTiKqfXN3H6RmeKvvRnmw","MsgType":"event"},"toUser":"gh_025da3703370","fromUser":"oINiq6UqTiKqfXN3H6RmeKvvRnmw","createTime":1633664862,"msgType":"event","event":"SCAN","eventKey":"12345678","ticket":"gQEc8TwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAybE9PTU5yd29lR0YxMDAwME0wNzUAAgTGvl9hAwQAAAAA","scanCodeInfo":{},"sendPicsInfo":{"picList":[]},"sendLocationInfo":{},"hardWare":{}}
1
2
可以发现,事件为SCAN表示扫码,发送的openid等信息也能拿到了。
4. 小结
公众号二维码是跟公众号紧密结合在一起的,所以它的功能可以全面依托公众号展开。