微信の小さいプログラムはQRコードを取得して、踏んだ穴は記録します


微信の小さいプログラムはQRコードを取得して、踏んだ穴は記録します
まず、微信ウィジェットのテストアカウントのテストアカウントを申請します(このリンクは比較的深いです)
QRコードを取得するapiドキュメントアドレス:QRコードドキュメント
ここでは方式Bを使用しています.sceneを伝える必要があります.ここではAccessTokenを取得し、パラメータを構築する必要があります.
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("scene", inviter.getInviterCode());
        jsonObject.put("page", "");
        jsonObject.put("width", 600);
        jsonObject.put("auto_color", true);
        JSONObject colorJson = (JSONObject) JSON.parse("{\"r\":\"0\",\"g\":\"0\",\"b\":\"0\"}");
        jsonObject.put("line_color", colorJson);
        jsonObject.put("is_hyaline", false);

ここのlineに注意してください.color必ず1つのJSONオブジェクトを伝えなければならなくて、しかも中のrgbの3つのパラメータは少なくてはいけなくて、さもなくば要求はエラーを返します
{"errcode":47001,"errmsg":"data format error hint: [h4fcVA0113b451]"}

次は要求を送信して、もし要求が正常に1枚のピクチャストリームに戻ったならば、ここは直接Stringを使って受け入れることができなくて、さもなくば得たのは乱符号で、私のここはInputStream受信を使っています
public static InputStream postJson(String url, String json) {
        InputStream is = null;
        CloseableHttpClient httpClient = null;
        try {
            httpClient = HttpClients.createDefault();
            HttpPost httpPost = new HttpPost(url);
            StringEntity requestEntity = new StringEntity(json, "utf-8");
            requestEntity.setContentEncoding("UTF-8");
            httpPost.setHeader("Content-type", "application/json");
            httpPost.setEntity(requestEntity);
            HttpResponse response;
            response = httpClient.execute(httpPost);
            int code = response.getStatusLine().getStatusCode();
            if (HttpStatus.OK.value() == code) {
                is = response.getEntity().getContent();
            }
        } catch (Exception e) {
            log.error("", e);
        } finally {
            /*if(httpClient != null) {
                try {
                    httpClient.close();
                } catch (IOException e) {
                    log.error("", e);
                }
            }*/
        }
        return is;
    }

ここではspringのrestTemplateパッケージを使用しないでください.そうしないと、InputStreamが手に入らないか、私がここで使っている方法が間違っています.
次はそのままフロントに流れを戻して展示すればOKです
private void encodeQrcodeInputStream(InputStream inputStream, HttpServletResponse response) {
        if (inputStream == null) {
            return;
        }

        try {
            OutputStream outputStream = response.getOutputStream();
            //        
            try {
                IOUtils.copy(inputStream, outputStream);
            } catch (IOException e) {
                logger.error("", e);
            }
        } catch (Exception e1) {
            logger.error("", e1);
        }
    }

ここもローカルに保存できます
File file = new File("/Users/apple/test1.png");
        FileOutputStream outputStream = new FileOutputStream(file);
        IOUtils.copy(inputStream, outputStream);
        IOUtils.closeQuietly(inputStream);
        IOUtils.closeQuietly(outputStream);

ここでIOUtilsはorgを使用する.apache.commons.io.IOUtils、使いやすいツールです