Java 生成微信小程序二維碼(可以(yǐ)指定小程序頁面 與 動态參數) - 新聞資訊 - 雲南小程序開發|雲南軟件開發|雲南網站建設-昆明融晨信息技術有限公司

159-8711-8523

雲南網建設/小程序開發/軟件開發

知識

不(bù)管是(shì)網站,軟件還是(shì)小程序,都要(yào / yāo)直接或間接能爲(wéi / wèi)您産生價值,我們在(zài)追求其視覺表現的(de)同時(shí),更側重于(yú)功能的(de)便捷,營銷的(de)便利,運營的(de)高效,讓網站成爲(wéi / wèi)營銷工具,讓軟件能切實提升企業内部管理水平和(hé / huò)效率。優秀的(de)程序爲(wéi / wèi)後期升級提供便捷的(de)支持!

您當前位置>首頁 » 新聞資訊 » 小程序相關 >

Java 生成微信小程序二維碼(可以(yǐ)指定小程序頁面 與 動态參數)

發表時(shí)間:2020-11-20

發布人(rén):融晨科技

浏覽次數:116

一、準備工作

  1. 微信公衆平台接口調試工具
  2. 小程序的(de)唯一标識(appid)
  3. 小程序的(de)密鑰(secret)

二、獲取access_token

打開微信公衆平台接口調試工具,在(zài)參數列表中輸入小程序的(de)appid和(hé / huò)secret,點擊檢查問題,如果appid和(hé / huò)secret正确,則可以(yǐ)返回正确的(de)access_token結果(圖中下方的(de)紅框)

獲取access_token

三、生成微信小程序二維碼

生成小程序二維碼官方文檔

https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/qr-code/wxacode.getUnlimited.html

一共有三種生成二維碼的(de)方式,可以(yǐ)根據使用場景去選擇,這(zhè)裏我使用的(de)是(shì)第三種生成方式 wxacode.getUnlimited

wxacode.createQRCode
獲取小程序二維碼,适用于(yú)需要(yào / yāo)的(de)碼數量較少的(de)業務場景。通過該接口生成的(de)小程序碼,永久有效,有數量限制,詳見獲取二維碼。
POST https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token=ACCESS_TOKEN


wxacode.get 
獲取小程序碼,适用于(yú)需要(yào / yāo)的(de)碼數量較少的(de)業務場景。通過該接口生成的(de)小程序碼,永久有效,有數量限制,詳見獲取二維碼。
POST https://api.weixin.qq.com/wxa/getwxacode?access_token=ACCESS_TOKEN


wxacode.getUnlimited     
獲取小程序碼,适用于(yú)需要(yào / yāo)的(de)碼數量極多的(de)業務場景。通過該接口生成的(de)小程序碼,永久有效,數量暫無限制。 更多用法詳見 獲取二維碼。
POST https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=ACCESS_TOKEN

使用wxacode.getUnlimited生成小程序二維碼

獲取小程序碼,适用于(yú)需要(yào / yāo)的(de)碼數量極多的(de)業務場景。通過該接口生成的(de)小程序碼,永久有效,數量暫無限制。 更多用法詳見 獲取二維碼。
POST https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=ACCESS_TOKEN

  

說(shuō)明

通過該接口生成的(de)小程序碼,永久有效,數量暫無限制。用戶掃描該碼進入小程序後,開發者需在(zài)對應頁面獲取的(de)碼中 scene字段的(de)值,再做處理邏輯。
使用如下代碼可以(yǐ)獲取到(dào)二維碼中的(de) scene 字段的(de)值。
調試階段可以(yǐ)使用開發工具的(de)條件編譯自定義參數 scene=xxxx 進行模拟,開發工具模拟時(shí)的(de) scene 的(de)參數值需要(yào / yāo)進行 urlencode
// 這(zhè)是(shì)首頁的(de) js
Page({
 > 1     /**
 2      * 接口調用憑證 access_token
 3      */
 4     public static String postToken(String appId, String appKey) throws Exception {
 5 
 6         String requestUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appId + "&secret=" + appKey;
 7         URL url = new URL(requestUrl);
 8         // 打開和(hé / huò)URL之(zhī)間的(de)連接
 9         HttpURLConnection connection = (HttpURLConnection) url.openConnection();
10         connection.setRequestMethod("POST");
11         // 設置通用的(de)請求屬性
12         connection.setRequestProperty("Content-Type", "application/json");
13         connection.setRequestProperty("Connection", "Keep-Alive");
14         connection.setUseCaches(false);
15         connection.setDoOutput(true);
16         connection.setDoInput(true);
17 
18         // 得到(dào)請求的(de)輸出(chū)流對象
19         DataOutputStream out = new DataOutputStream(connection.getOutputStream());
20         out.writeBytes("");
21         out.flush();
22         out.close();
23 
24         // 建立實際的(de)連接
25         connection.connect();
26         // 定義 BufferedReader輸入流來(lái)讀取URL的(de)響應
27         BufferedReader in;
28         if (requestUrl.contains("nlp"))
29             in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "GBK"));
30         else
31             in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
32         StringBuilder result = new StringBuilder();
33         String getLine;
34         while ((getLine = in.readLine()) != null) {
35             result.append(getLine);
36         }
37         in.close();
38         JSONObject jsonObject = JSONObject.parseObject(result.toString());
39         return jsonObject.getString("access_token");
40     }

調用微信接口生成微信小程序二維碼

 1     /**
 2      * 生成微信小程序二維碼
 3      *
 4      * @param filePath
 5      *         本地(dì / de)生成二維碼路徑
 6      * @param page
 7      *         當前小程序相對頁面 必須是(shì)已經發布的(de)小程序存在(zài)的(de)頁面(否則報錯),例如 pages/index/index, 根路徑前不(bù)要(yào / yāo)填加 /,不(bù)能攜帶參數(參數請放在(zài)scene字段裏),如果不(bù)填寫這(zhè)個(gè)字段,默認跳主頁面
 8      * @param scene
 9      *         最大(dà)32個(gè)可見字符,隻支持數字,大(dà)小寫英文以(yǐ)及部分特殊字符:!#$&'()*+,/:;=?@-._~,其它字符請自行編碼爲(wéi / wèi)合法字符(因不(bù)支持%,中文無法使用 urlencode 處理,請使用其他(tā)編碼方式)
10      * @param accessToken
11      *         接口調用憑證
12      */
13     public static void generateQrCode(String filePath, String page, String scene, String accessToken) {
14 
15         try {
16 
17             //調用微信接口生成二維碼
18             URL url = new URL("https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + accessToken);
19             HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
20             httpURLConnection.setRequestMethod("POST");// 提交模式
21             // conn.setConnectTimeout(10000);//連接超時(shí) 單位毫秒
22             // conn.setReadTimeout(2000);//讀取超時(shí) 單位毫秒
23             // 發送POST請求必須設置如下兩行
24             httpURLConnection.setDoOutput(true);
25             httpURLConnection.setDoInput(true);
26             // 獲取URLConnection對象對應的(de)輸出(chū)流
27             PrintWriter printWriter = new PrintWriter(httpURLConnection.getOutputStream());
28             // 發送請求參數
29             JSONObject paramJson = new JSONObject();
30             //這(zhè)就(jiù)是(shì)你二維碼裏攜帶的(de)參數 String型  名稱不(bù)可變
31             paramJson.put("scene", scene);
32             //注意該接口傳入的(de)是(shì)page而(ér)不(bù)是(shì)path
33             paramJson.put("page", page);
34             //這(zhè)是(shì)設置掃描二維碼後跳轉的(de)頁面
35             paramJson.put("width", 200);
36             paramJson.put("is_hyaline", true);
37             paramJson.put("auto_color", true);
38             printWriter.write(paramJson.toString());
39             // flush輸出(chū)流的(de)緩沖
40             printWriter.flush();
41 
42             //開始獲取數據
43             BufferedInputStream bis = new BufferedInputStream(httpURLConnection.getInputStream());
44             OutputStream os = new FileOutputStream(new File(filePath));
45             int len;
46             byte[] arr = new byte[1024];
47             while ((len = bis.read(arr)) != -1) {
48                 os.write(arr, 0, len);
49                 os.flush();
50             }
51             os.close();
52         } catch (Exception e) {
53             e.printStackTrace();
54         }
55 
56         System.out.println("打開地(dì / de)址查看生成的(de)二維碼:" + filePath);
57 
58     }

測試類

 1     public static void main(String[] args) throws Exception {
 2 
 3         //獲取接口調用憑證access_token
 4         String appId = "小程序id";//小程序id
 5         String appKey = "小程序密鑰";//小程序密鑰
 6         String token = postToken(appId, appKey);
 7 
 8         //生成二維碼
 9         generateQrCode("E:\\tools\\qrCode\\test.png", "pages/index/index", "aa=108&bb=2&cc=3", token);
10 
11     }

注意

1      1.獲取小程序appId 與appKey
2      2.生成小程序二維碼頁面參數傳入的(de)是(shì)page而(ér)不(bù)是(shì)path,其他(tā)的(de)接口是(shì)path。
3      page後面不(bù)允許加參數,參數需要(yào / yāo)通過scene傳入。而(ér)小程序也(yě)需要(yào / yāo)通過scene獲取參數。
4      3.生成小程序二維碼可将二維碼寫入本地(dì / de),也(yě)可上(shàng)傳至服務器。自行選擇
5      


參考地(dì / de)址:
https://www.cnblogs.com/daipianpian/p/9239452.html
http://www.what21.com/u/10004/6756200547748968305.htm
生成小程序二維碼官方文檔
https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/qr-code/wxacode.getUnlimited.html

相關案例查看更多