前言
本文只是进行一些思路的简化已经示例代码的书写,更为详细的思路请查询官方文档,官方文档与本文搭配使用为最佳选择
官方文档:账号管理 / 生成带参数的二维码
二维码的作用
微信公众号二维码我们一般有两个作用,
一是用于特定的分享内容,比如我们常见的每个人一份的分享海报,上面的二维码可以记录每个人的成功分享次数
二是用于扫码登录,我们也见过很多微信登录的二维码扫码跳转不是微信安全中心,而是它所对应的公众号
获取换取二维码的URL
根据官方文档,我们需要先进行一个POST请求,然后获得一个ticket的票据,再去指定的页面换取二维码
java进行POST请求可以参考以下文章
我们可以新建一个wechat的服务实现类,我们在里面用fastjson的JSONObject进行本次POST请求的请求体内容的生成,我们需要从外部传入expire_seconds和action_name,也就是超时时间和本次二维码的类型,二维码的类型有以下几种
QR_SCENE | 临时的整型参数值 |
QR_STR_SCENE | 临时的字符串参数值 |
QR_LIMIT_SCENE | 永久的整型参数值 |
QR_LIMIT_STR_SCENE | 永久的字符串参数值 |
所以我们这个方法必备的传入参数就得有expireSeconds和ActionName,而更为重要的字符串内容或者整形参数内容你可以选择传入,也可以选择在方法内进行一个生成,我们这演示直接传入,在生成需要的请求体之后,我们直接从获取到的响应中拿到ticket,拼接对应的网站,直接返回调用的地方(此处的SaResult为satoken权限认证框架中,你们可以自定义响应体)
public SaResult getQRCode(Long expireSeconds, String ActionName, String Use,String str) throws UnsupportedEncodingException {
JSONObject jsonObject = new JSONObject();
jsonObject.put("expire_seconds", expireSeconds);
jsonObject.put("action_name", ActionName);
JSONObject ActionInfo = new JSONObject();
JSONObject scene = new JSONObject();
scene.put("scene_str", str);
ActionInfo.put("scene", scene);
jsonObject.put("action_info", ActionInfo);
String jsonString = jsonObject.toJSONString();
String url = String.format("https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=%s", wechatToken.GetToken());
JSONObject TictetJson = HttpUtil.doPost(url, jsonString);
String ticket = TictetJson.getString("ticket");
ticket = URLEncoder.encode(ticket, "utf-8");
String QRCodeUrl = String.format("https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=%s", ticket);
JSONObject QRCode = new JSONObject();
QRCode.put("QRCodeUrl", QRCodeUrl);
QRCode.put("expire_seconds", TictetJson.getString("expire_seconds"));
return new SaResult(200, "生成成功", QRCode);
}
大家积极评论