国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java生成微信小程序二維碼,5種實現(xiàn)方式,一個比一個簡單

這篇具有很好參考價值的文章主要介紹了Java生成微信小程序二維碼,5種實現(xiàn)方式,一個比一個簡單。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。


前言

先介紹一下項目場景,主要是通過微信小程序二維碼裂變分享,每個賬號有專屬邀請二維碼,分享出去,有新人掃碼入駐,就可以得到現(xiàn)金獎勵或紅包獎勵。當(dāng)然,產(chǎn)品設(shè)計會更豐富,不止有裂變模式,還有渠道推廣模式,還有各種獎勵規(guī)則,但核心實現(xiàn)都是生成二維碼。對于如何生成微信小程序二維碼,本文一共列舉了5種實現(xiàn)方式,其中第1、2種是網(wǎng)上常見的方式,第3、4、5種封裝的更為優(yōu)雅,文末可打包下載開箱即用的全套源碼,我更期待老鐵的文末 投票 :哪種方式你更喜歡?
java生成小程序二維碼,java,微信小程序,小程序,微信,二維碼,http


先看官網(wǎng)

項目主要用的是微信官方提供的服務(wù)端能力,考慮到涉及secrettoken等安全問題,所以從架構(gòu)上設(shè)計的調(diào)用鏈路為前端->后端API->微信API。裂變的場景決定要選擇獲取不限制的小程序碼接口,永久有效,數(shù)量暫無限制,接口英文名:getUnlimitedQRCode

官方地址:https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/qrcode-link/qr-code/getUnlimitedQRCode.html

java生成小程序二維碼,java,微信小程序,小程序,微信,二維碼,http


一、JDK自帶的URLConnection方式

在網(wǎng)上常見的方式,這是從 JDK1.1 開始就自帶的Http請求方式,核心代碼如下:

public byte[] getWechatQrcodeByHttpURL(String url, Map<String, Object> body) {
    HttpURLConnection httpURLConnection = null;
    try {
        httpURLConnection = (HttpURLConnection) new URL(url).openConnection();
        httpURLConnection.setRequestMethod("POST");
        // 發(fā)送POST請求必須設(shè)置如下兩行
        httpURLConnection.setDoOutput(true);
        httpURLConnection.setDoInput(true);
        // 獲取URLConnection對象對應(yīng)的輸出流
        PrintWriter printWriter = new PrintWriter(httpURLConnection.getOutputStream());
        // 發(fā)送請求參數(shù)
        printWriter.write(JSONObject.toJSONString(body));
        // flush輸出流的緩沖
        printWriter.flush();
        //開始獲取數(shù)據(jù)
        try (InputStream inputStream = httpURLConnection.getInputStream();
             ByteArrayOutputStream out = new ByteArrayOutputStream()) {
            byte[] buffer = new byte[1024];
            int len = -1;
            while ((len = inputStream.read(buffer)) != -1) {
                out.write(buffer, 0, len);
            }
            return out.toByteArray();
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        if (httpURLConnection != null) {
            httpURLConnection.disconnect();
        }
    }
    return null;
}

JDK自帶的方式,功能雖然可以實現(xiàn),但代碼看上去確實跟不上時代發(fā)展了!


二、Apache的HttpClient方式

HttpClient 相比于 JDK 自帶的 URLConnection方式,代碼做了封裝,可讀性和簡潔度都顯著提升!核心代碼如下:

public byte[] getWechatQrcodeByHttpClient(String url, Map<String, Object> body) {
    CloseableHttpClient httpClient = HttpClientBuilder.create().build();
    HttpPost httpPost = new HttpPost(url);
    try {
        StringEntity entity = new StringEntity(JSONObject.toJSONString(body));
        entity.setContentType("image/png");
        httpPost.setEntity(entity);
        HttpResponse response = httpClient.execute(httpPost);
        try (InputStream inputStream = response.getEntity().getContent();
             ByteArrayOutputStream out = new ByteArrayOutputStream()) {
            byte[] buffer = new byte[1024];
            int len = -1;
            while ((len = inputStream.read(buffer)) != -1) {
                out.write(buffer, 0, len);
            }
            return out.toByteArray();
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

Maven依賴:

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.12</version>
</dependency>

三、okhttp3方式

okhttp3是Square公司開發(fā),用于替代 HttpUrlConnection和Apache HttpClient方式,優(yōu)雅的 API 設(shè)計,且鏈?zhǔn)秸{(diào)用,讓你順滑到底!

核心代碼如下:

public byte[] getWechatQrcodeByOkhttp3(String url, Map<String, Object> body) {
    OkHttpClient client = new OkHttpClient().newBuilder().build();
    okhttp3.MediaType mediaType = okhttp3.MediaType.parse("application/json");
    RequestBody requestBody = RequestBody.create(mediaType, JSONObject.toJSONString(body));
    Request request = new Request.Builder().url(url).method("POST", requestBody).build();
    try {
        Response response = client.newCall(request).execute();
        if (response.isSuccessful()) {
            return response.body().bytes();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    return null;
}

Maven依賴:

<dependency>
    <groupId>com.squareup.okhttp3</groupId>
    <artifactId>okhttp</artifactId>
    <version>3.14.2</version>
</dependency>

四、Unirest方式

okhttp3方式其實不管是性能還是代碼的鏈?zhǔn)秸{(diào)用,都已經(jīng)非常優(yōu)秀。但作為底層基于Apache HttpClient方式unirest-java,提供了更為便捷、鏈?zhǔn)秸{(diào)用、功能強大的API用于http請求!核心代碼如下(一行代碼搞定,屌爆了?。。。?/p>

public byte[] getWechatQrcodeByUnirest(String url, Map<String, Object> body) {
    return Unirest.post(url).body(JSONObject.toJSONString(body)).asBytes().getBody();
}

Maven依賴:

<dependency>
    <groupId>com.konghq</groupId>
    <artifactId>unirest-java</artifactId>
    <version>3.11.11</version>
</dependency>

五、RestTemplate方式

我之前寫過一篇博文對RestTemplate.exchange結(jié)合案例進行了詳細(xì)的介紹:RestTemplate.exchange各種用法(包括泛型等 --全),推薦閱讀!

這也是我們項目實際使用的方式,使用Spring框架開發(fā),還是強烈推薦使用Spring的RestTemplate,它是對于其它方式的高級封裝,內(nèi)部可以配置ClientHttpRequestFactory來指定底層請求方式:

  • 指定為SimpleClientHttpRequestFactory,則內(nèi)部使用JDK自帶的HttpURLConnection方式
  • 指定為HttpComponentsClientHttpRequestFactory,則內(nèi)部使用Apache HttpClient方式
  • 指定為OkHttp3ClientHttpRequestFactory,則內(nèi)部使用okhttp3方式

核心代碼也是一行:

public byte[] getWechatQrcodeByRestTemplate(String url, Map<String, Object> body) {
    return restTemplate.exchange(url, HttpMethod.POST, new HttpEntity<>(body, null), byte[].class).getBody();
}

另外,RestTemplate在構(gòu)造函數(shù)中默認(rèn)增加了ByteArrayHttpMessageConverter,可以讀取和寫入字節(jié)數(shù)組的HttpMessageConverter的實現(xiàn),默認(rèn)情況下,此轉(zhuǎn)換器支持所有媒體類型(media types)。

java生成小程序二維碼,java,微信小程序,小程序,微信,二維碼,http


其它細(xì)節(jié)

getAccessToken

這是接口調(diào)用憑證,用restTemplate調(diào)用也是非常簡潔,核心代碼如下:

private String wechatQrcodeUrl = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=";
private String appid = "替換成你的appid";
private String s = "替換成你的secret";

public String getAccessToken() {
    String url = String.format(wechatAccessTokenUrl, appid, s);
    Map<String, String> responseBody = restTemplate.exchange(url, HttpMethod.GET, null, new ParameterizedTypeReference<Map<String, String>>() {}).getBody();
    if (responseBody == null || responseBody.get("errcode") != null) {
        // 獲取失敗
        System.out.println("getAccessToken失?。? + (responseBody == null ? "null" : responseBody.toString()));
        return null;
    }
    return responseBody.get("access_token");
}

對于access_token,建議保存到redis,2小時過期后再獲取

構(gòu)建參數(shù)map

body 就是參數(shù)Map,需要根據(jù)實際情況自行設(shè)定:

Map<String,Object> body = new HashMap<>();
// 場景碼,與前端約定,最終是需要前端解析
body.put("scene", scene);
// 正式版為 "release",體驗版為 "trial",開發(fā)版為 "develop"。默認(rèn)是正式版。
body.put("env_version", envVersion);
// 透明,根據(jù)你的場景自行設(shè)置body參數(shù)
body.put("is_hyaline", true);

java生成小程序二維碼,java,微信小程序,小程序,微信,二維碼,http

byte[]數(shù)組

為什么要先得到byte[]數(shù)組?,因為我們需要先判斷返回結(jié)果是否包含errcode,如果不包含,才是圖片Buffer!

如果不包含errorCode,那么byte[]數(shù)組不管是保存本地,還是轉(zhuǎn)成Base64,或者上傳到OSS,都非常濕滑了!

  • 保存本地
private void saveQrCodeToLocal(byte[] bytes) {
    try {
        InputStream inputStream = new ByteArrayInputStream(bytes);
        FileOutputStream out = new FileOutputStream("d:\\test.png");
        byte[] buffer = new byte[8192];
        int bytesRead = 0;
        while ((bytesRead = inputStream.read(buffer, 0, 8192)) != -1) {
            out.write(buffer, 0, bytesRead);
        }
        out.flush();
        inputStream.close();
        out.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
  • Base64
Base64.getEncoder().encodeToString(bytes);
  • 上傳OSS
    這是我們項目使用的, 底層做了封裝,直接傳byte[]即可,非常方便!

源碼下載

源碼都是經(jīng)過實測的,可以直接使用!

下載地址:https://download.csdn.net/download/scm_2008/87398320

?? 博客主頁:https://blog.csdn.net/scm_2008
?? 歡迎點贊?? 收藏 ?留言?? 如有錯誤敬請指正!
?? 本文由 天罡gg 原創(chuàng),首發(fā)于 CSDN博客??
?? 停下休息的時候不要忘了別人還在奔跑,希望大家抓緊時間學(xué)習(xí),全力奔赴更美好的生活文章來源地址http://www.zghlxwxcb.cn/news/detail-776832.html


到了這里,關(guān)于Java生成微信小程序二維碼,5種實現(xiàn)方式,一個比一個簡單的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 微信小程序怎樣生成體驗版二維碼?微信小程序怎么轉(zhuǎn)化為二維碼?

    微信小程序怎樣生成體驗版二維碼?微信小程序怎么轉(zhuǎn)化為二維碼?

    方法:在微信開發(fā)者工具界面,右上角,點擊上傳,如果提示成功,說明已經(jīng)上傳成功。 ? ? 網(wǎng)址: 微信公眾平臺 微信公眾平臺,給個人、企業(yè)和組織提供業(yè)務(wù)服務(wù)與用戶管理能力的全新服務(wù)平臺。 https://mp.weixin.qq.com/ 在微信公眾號平臺登錄,選擇需要生成二維碼的小程序

    2024年02月10日
    瀏覽(106)
  • 微信小程序使用weapp-qrcode.js生成二維碼以及“掃普通鏈接二維碼打開小程序”動態(tài)傳遞參數(shù)實現(xiàn)記錄

    微信小程序使用weapp-qrcode.js生成二維碼以及“掃普通鏈接二維碼打開小程序”動態(tài)傳遞參數(shù)實現(xiàn)記錄

    參考文章原文鏈接:微信小程序使用weapp-qrcode.js完成二維碼的生成_fairy_404的博客-CSDN博客 首先給需要生成二維碼的頁面創(chuàng)建一個canvas 因為我這里實現(xiàn)的是彈窗展示二維碼,所有就把?canvas移出頁面,小伙伴們根據(jù)自己需求進行調(diào)整,weapp-qrcode.js內(nèi)容參考鏈接中就有,我這里就

    2024年02月15日
    瀏覽(33)
  • 如何生成微信小程序二維碼,小程序內(nèi)頁二維碼

    如何生成微信小程序二維碼,小程序內(nèi)頁二維碼

    你自己得有個微信公眾號,只需要知道小程序的名字就可以了 生成小程序二維碼 第一步編輯素材 第二步搜索小程序名字,然后回車,下一步 第三步選小程序碼 小程序內(nèi)頁二維碼 第一步編輯素材 第二步搜索小程序名字,然后回車,下一步 第三步點擊‘獲取更多路徑’ 第四

    2024年02月15日
    瀏覽(31)
  • 微信小程序使用weapp-qrcode.js生成二維碼以及“掃普通鏈接二維碼打開小程序”動態(tài)傳遞參數(shù)實現(xiàn)以及遇到問題記錄

    微信小程序使用weapp-qrcode.js生成二維碼以及“掃普通鏈接二維碼打開小程序”動態(tài)傳遞參數(shù)實現(xiàn)以及遇到問題記錄

    參考文章原文鏈接:微信小程序使用weapp-qrcode.js完成二維碼的生成_fairy_404的博客-CSDN博客 首先給需要生成二維碼的頁面創(chuàng)建一個canvas 因為我這里實現(xiàn)的是彈窗展示二維碼,所有就把?canvas移出頁面,小伙伴們根據(jù)自己需求進行調(diào)整,weapp-qrcode.js內(nèi)容參考鏈接中就有,我這里就

    2024年02月01日
    瀏覽(30)
  • 微信小程序之生成二維碼

    微信小程序之生成二維碼

    ?var context = wx.createCanvasContext(\\\'mycanvas\\\');?// 獲取畫布 CanvasContext.fillText string text 在畫布上輸出的文本 number x 繪制文本的左上角 x 坐標(biāo)位置 number y 繪制文本的左上角 y 坐標(biāo)位置 number maxWidth 需要繪制的最大寬度,可選 CanvasContext.drawImage string imageResource 所要繪制的圖片資源(網(wǎng)絡(luò)

    2024年02月10日
    瀏覽(28)
  • 微信小程序 — 生成二維碼功能

    微信小程序 — 生成二維碼功能

    微信小程序?qū)崿F(xiàn)生成二維碼功能。需要用到canvas組件,設(shè)置 type為2d.? 需要使用js包 weapp-qrcode-canvas-2d https://github.com/DoctorWei/weapp-qrcode-canvas-2d weapp-qrcode-canvas-2d 是使用新版canvas-2d接口在微信小程序中生成二維碼(外部二維碼)的js包。canvas 2d 接口支持同層渲染且性能更佳,可大

    2024年02月09日
    瀏覽(24)
  • 微信小程序生成二維碼的 方式

    一:生成普通的二維碼 https://open.weixin.qq.com/sns/getexpappinfo?appid=xxxpath=xxx?a=123 appid:小程序的appid path: 小程序的路徑 a:小程序需要攜帶的參數(shù),不傳可以不寫 二:在微信開發(fā)文檔內(nèi)生成 步驟1.登錄微信公眾平臺 2.找到工具菜單 3.選擇生成小程序碼 具體里面的有生成規(guī)則,不懂得

    2024年02月12日
    瀏覽(24)
  • 微信小程序使用--如何生成二維碼

    微信小程序使用--如何生成二維碼

    一、生成二維碼 1.獲取token 參照官方文檔說明: https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/mp-access-token/getAccessToken.html 其中g(shù)rant_type是寫死的,appid和secret是注冊小程序的時候獲取的,然后會得到一個默認(rèn)兩小時失效的token 2.獲取二維碼 參照官方文檔說明: https://developers.

    2024年02月04日
    瀏覽(23)
  • 【小程序】動態(tài)生成微信小程序二維碼

    官方文檔中給我們提供了三個接口,分別應(yīng)用于不同的場景 wxacode.createQRCode - - 接口文檔地址-點擊跳轉(zhuǎn) 該接口需慎用,因為文檔描述,該接口可生成的二維碼是有限制的。 總共生成的碼數(shù)量限制為 100,000 wxacode.get - - 接口文檔地址-點擊跳轉(zhuǎn) 該接口需慎用,因為文檔描述,該

    2024年02月09日
    瀏覽(27)
  • 微信小程序生成二維碼海報并分享

    背景:點擊圖標(biāo),生成海報后,點擊保存相冊,可以保存 生成海報:插件wxa-plugin-canvas,此處使用頁面異步生成組件方式,官網(wǎng)地址:wxa-plugin-canvas - npm 二維碼:調(diào)用后端接口生成二維碼 需要調(diào)用獲取圖片信息接口wx.getImageInfo(),獲取到圖片的寬高以做整體寬高配置 closePos

    2024年03月21日
    瀏覽(95)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包