1. 程式人生 > >微信小程式生成二維碼介面呼叫

微信小程式生成二維碼介面呼叫

小程式生成二維碼這個介面可以在小程式裡面做, 也可以在java後臺做, 此篇部落格記錄的是在java後臺請求微信的介面生成;

場景:

如果要生成帶引數二維碼拿出去做裂變推廣, 生成的二維碼數量多. 此時不可能一個個通過草料或者阿拉丁來做, 只能請求官方的介面生成;

準備工作:

a. 小程式的appId

b.小程式的secret

 

步驟如下:

1. 獲取小程式的access_token, 該值是生成二維碼的必要因素, 獲取方式如下:

 /**
     * 獲取access_token
     *
     * @return
     */
    public String getAccessToken() {
        Map<String, String> 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顏色

 

 

另外這個介面是不限次數的, 還有兩個是限制次數的介面,可以參考官方文件