微信小程序生成二维码接口调用

小程序生成二维码这个接口可以在小程序里面做, 也可以在java后台做, 此篇博客记录的是在java后台请求微信的接口生成;

场景:

如果要生成带参数二维码拿出去做裂变推广, 生成的二维码数量多. 此时不可能一个个通过草料或者阿拉丁来做, 只能请求官方的接口生成;

准备工作:

a. 小程序的appId

b.小程序的secret

 

步骤如下:

1. 获取小程序的access_token, 该值是生成二维码的必要因素, 获取方式如下:

 /**
     * 获取access_token
     *
     * @return
     */
    public String getAccessToken() {
        Map map = new LinkedHashMap<>();
        map.put("grant_type", "client_credential");
        map.put("appid", APP_ID);//改成自己的appid
        map.put("secret", SECRET);
        String res = sendPost(tokenUrl, map);
        JSONObject parse = JSONObject.parseObject(res);
        if (parse.getString("access_token") != null || parse.getString("access_token") != "") {
            return parse.getString("access_token");
        } else {
            return null;
        }
    }

2. 通过access_token获取小程序的二维码:

public InputStream getminiqrQr(String accessToken, String userId) {
        InputStream in = null;
        try {
            URL url = new URL("https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + accessToken);
            HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
            httpURLConnection.setRequestMethod("POST");
            httpURLConnection.setDoInput(true);
            httpURLConnection.setDoOutput(true);            
            PrintWriter printWriter = new             PrintWriter(httpURLConnection.getOutputStream());
            // 发送请求参数
            JSONObject paramJson = new JSONObject();
            paramJson.put("scene", "useId="+userId);
            paramJson.put("path", "pages/invite/invite");
            paramJson.put("width", 430);
            paramJson.put("is_hyaline", false);
            // 生成二维码颜色为黑色
            paramJson.put("auto_color", false);
            JSONObject lineColor = new JSONObject();
            lineColor.put("r", 0);
            lineColor.put("g", 0);
            lineColor.put("b", 0);
            paramJson.put("line_color", lineColor);


            printWriter.write(paramJson.toString());
            // flush输出流的缓冲
            printWriter.flush();
            in = httpURLConnection.getInputStream();
            return in;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return in;
    }

拿到二维码的流, 是读到本地还是读到对象存储自己搞完事了, 需要注意的是几个post请求入参:

path: 跳转小程序的页面地址, 前面不要 "/", 如果要带参数不可以在这里, 只能在第二个参数scene里添加

scene: 填放用户需要携带的参数

width: 尺寸

is_hyaline: 背景色要不要

auto_color: 线条颜色是否是自动的颜色, true的时候不需要设置RGB颜色

 

 

另外这个接口是不限次数的, 还有两个是限制次数的接口,可以参考官方文档

你可能感兴趣的:(java后端)