前言:
1,目前有2种类型的二维码:
(1)临时二维码,是有过期时间的,最长可以设置为在二维码生成后的30天(即2592000秒)后过期,但能够生成较多数量。临时二维码主要用于帐号绑定等不要求二维码永久保存的业务场景
(2)永久二维码,是无过期时间的,但数量较少(目前为最多10万个)。永久二维码主要用于适用于帐号绑定、用户来源统计等场景。
2,二维码参数是分类型的,场景值ID(scene_id:数字,scene_str:字符串),且限制了大小
3,扫描二维码后,对事件的处理(见第四章)
正文:
accessToken 见第二章;最终获取的是一个链接,要转为图片见第七章
//创建永久二维码 public static String permanentQrcodePath(String accessToken, String sceneStr) { String ticket = permanentQrcodeTicket(accessToken, sceneStr); String qrcodePath = ""; if(!StringUtils.isEmpty(str)){ qrcodePath = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket="+ticket; } return qrcodePath; }
/** * 创建永久二维码 * * @param accessToken * @param sceneId * 场景Id * @param sceneStr * 场景IdsceneStr * @return */ // 数字ID用这个{"action_name": "QR_LIMIT_SCENE", "action_info": {"scene": {"scene_id": 123}}} // 字符ID用这个{"action_name": "QR_LIMIT_STR_SCENE", "action_info": {"scene":{"scene_str": "hfrunffgha"}}} public static String permanentQrcodeTicket(String accessToken, String sceneStr) { String ticket = null; String requestUrl = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=TOKEN"; requestUrl = requestUrl.replace("TOKEN", accessToken); String outputStr = "{\"action_name\": \"QR_LIMIT_STR_SCENE\", \"action_info\":{\"scene\": {\"scene_str\":\"%s\"}}}"; JSONObject jsonObject = HttpRequest.httpRequest(requestUrl, "POST", String.format(outputStr, sceneStr)); logger.info("outputStr:" + String.format(outputStr, sceneStr)); if (null != jsonObject) { try { ticket = jsonObject.getString("ticket"); } catch (Exception e) { String errorCode = jsonObject.getString("errcode"); String errorMsg = jsonObject.getString("errmsg"); logger.info("生成二维码失败 errcode:{}" + errorCode + "errmsg:{}"+ errorMsg); } } return ticket; }
/** * 创建临时带参数二维码 * @param accessToken * @expireSeconds 该二维码有效时间,以秒为单位。 最大不超过2592000(即30天),此字段如果不填,则默认有效期为30秒。 * @param sceneId 场景Id * @return */ public static String temporaryQrcodeTicket(String accessToken, String expireSeconds ,int sceneId) { String ticket = null; String requestUrl = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=TOKEN"; requestUrl = requestUrl.replace("TOKEN", accessToken); //需要提交的JSON数据 String outputStr = "{\"expire_seconds\": %d,\"action_name\": \"QR_SCENE\", \"action_info\": {\"scene\": {\"scene_id\":%d}}}"; //创建临时带参数二维码 JSONObject jsonObject = HttpRequest.httpRequest(requestUrl, "POST", String.format(outputStr, expireSeconds, sceneId)); if(null!=jsonObject){ try { ticket = jsonObject.getString("ticket"); logger.info("创建临时带参二维码成功,ticket="+ticket+",expire_seconds="+jsonObject.getInt("expire_seconds")); } catch (Exception e) { String errorMsg = jsonObject.getString("errmsg"); logger.info("创建临时带参二维码失败,错误码是="+errorMsg); } } return ticket; }