【微信公众号开发】【9】生成带参数的二维码

前言:

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;  
    }  

 

【微信公众号开发】【9】生成带参数的二维码

上一篇:微信小程序获取openid


下一篇:微信公众号调用扫一扫的方法及注意事项