您當前位置>首頁 » 新聞資訊 » 小(xiǎo)程序相(xiàng)關 >
Java 生(shēng)成微(wēi)信小(xiǎo)程序二維碼(可(kě)以指定小(xiǎ§←♣©o)程序頁面 與 動态參數(shù))
發表時(shí)間(jiān):2020-11-20
發布人(rén):葵宇科(kē)技(jì)
浏覽次數(shù):125
一(yī)、準備工(gōng)作(zuò)
- 微(wēi)信公衆平台接口調試工(gōng)具
- 小(xiǎo)程序的(de)唯一(yī)标識(appid)
- 小(xiǎo)程序的(de)密鑰(secret)
二、獲取access_token
打開(kāi)微(wēi)信公衆平台接口調試工(gōng)具,在參數(β↕shù)列表中輸入小(xiǎo)程序的(de)appid和(∑hé)secret,點擊檢查問(wèn)題 ±©<ff0c;如(rú)果appid和(hé)secret正确,則可(kě)以返回正确£的(de)access_token結果(圖中下(xià)方的(de)紅(&™™$hóng)框)

三、生(shēng)成微(wēi)信小(xiǎo)程序二維碼™•™
生(shēng)成小(xiǎo)程序二維碼官方文(wén)檔
https://developers.weixin.qq.com /miniprogram/dev/api-backend/open-api/qr-cσ≤ ↓ode/wxacode.getUnlimited.html
一(yī)共有(yǒu)三種生(shēng)成二維碼的(de)方式,可(kě)以根δ↔✔據使用(yòng)場(chǎng)景去(qù)選擇,這(zσ¥δhè)裡(lǐ)我使用(yòng)的(de)是(shì)第三種生(shēng)成方式 wxa∞♣₩code.getUnlimited
wxacode.createQRCode
獲取小(x™₩©&iǎo)程序二維碼,适用(yòng)于需要(yào)的(de)碼數(shù)量較λλ少(shǎo)的(de)業(yè)務場(chǎng)景。通(t∞γōng)過該接口生(shēng)成的(de)小(xiǎo)程序ε 碼,永久有(yǒu)效,有(yǒu ©)數(shù)量限制(zhì),詳見(jiàn)獲取二維碼。
POST¥≥ https://api.weixin.qq.com/cgi-bin/↕γ≈<wxaapp/createwxaqrcode?access_token≤φφ61;ACCESS_TOKEN
wxacode.get
獲取小(xiǎo)程序碼≤©≈ f0c;适用(yòng)于需要(yào)的(de)碼數(shù)量較少←≤(shǎo)的(de)業(yè)務場(chǎng)景。通(tōng)過該接口生(sh£δφēng)成的(de)小(xiǎo)程序碼,永久有(yǒu)效α×πλxff0c;有(yǒu)數(shù)量限制(zhì),詳見(jiànδΩ®)獲取二維碼。
POST https://api.weixin.qq.com≤π↔/wxa/getwxacode?access_token=ACCESS_TOKEN
$ββwxacode.getUnlimited
獲取小(≈ <xiǎo)程序碼,适用(yòng)于需要(yào)的(de)碼數(shùβ€)量極多(duō)的(de)業(yè)務場(chǎng)景。通(t↓≠δβōng)過該接口生(shēng)成的(de)小(xiǎ" o)程序碼,永久有(yǒu)效,數(shù)量 ₹↕↓暫無限制(zhì)。 更多(duō)用(yòng)法詳見(jiàn) 獲取二維碼。
POβ&↔ST https://api.weixin.qq.c™φ≥om/wxa/getwxacodeunlimit?acc→δ★₹ess_token=ACCESS_TOKENλ≥"
使用(yòng)wxacode.getUnlimit©←★ed生(shēng)成小(xiǎo)程序二維碼
獲取小(xiǎo)程序碼,适用(yòng)♠♣于需要(yào)的(de)碼數(shù)量極多(duō)的(d∞₽e)業(yè)務場(chǎng)景。通(tōng)過該接口生(shēng)成的(de)$∞≥↓小(xiǎo)程序碼,永久有(yǒu)效™₽f0c;數(shù)量暫無限制(zhì)。 更多(duō)用(yòδγng)法詳見(jiàn) 獲取二維碼。
POST https://api.weixin.qq.coβσ→m/wxa/getwxacodeunlimit?access_tokeβ€✔✘n=ACCESS_TOKEN

說(shuō)明(míng)
通(tōng)過該接口生(shēng)成的(de)小(xi≠≈ǎo)程序碼,永久有(yǒu)效ÿφ≠0c;數(shù)量暫無限制(zhì)。用(yòng)戶掃描該碼進入小(xiǎo)程序後ÿ₩÷0c;開(kāi)發者需在對(duì)應頁面獲取的(de)碼中 scene♦ε•字段的(de)值,再做(zuò)處理(lǐ)邏→↓輯。
使用(yòng)如(rú)下(xià)代碼可(kě)以獲取到(dào)二維碼中的(de) ∏↔€scene 字段的(de)值。
調試階段可(kě)以使用(yòng)開(kāi)發工(gōng ↔δ)具的(de)條件(jiàn)編譯自(zì)定義參數(shù) scene=♦¥σπ;xxxx 進行(xíng)模拟,開(kāi)發工(gōng)具模拟時(shí)的(✘™•de) scene 的(de)參數(shù)值需要(y≥§ào)進行(xíng) urlencode
// 這(zhè)是(shì)首頁的(de) js
Page({∑↕↕¥
> 1 /**
2 * 接口調用(yòn®★☆g)憑證 access_token
3 */
4 ♠✘ε✔public static String postToken(String appδ≠™Id, String appKey) throws Exc•δ€≠eption {
5
6 String reques "≤₩tUrl = "https://api.weixin.qq.co↓♥"m/cgi-bin/token?grant_type=clien ☆✘t_credential&appid=" + ♣ ₽appId + "&secretΩ₩±¶61;" + appKey;
7 URL u≈♠&rl = new URL(requestUrl);
8 // ↔打開(kāi)和(hé)URL之間(jiān)的(de)連接
9 Http∑€>®URLConnection connection = (HttpURLConnecti₹♥on) url.openConnection();
10 connection'→.setRequestMethod("POST" "β);
11 // 設置通(tōng)用(yòng)的(de)請®♥(qǐng)求屬性
12 connection.setR>÷equestProperty("Content-↔≈Type", "applicatio<↓n/json");
13 connection.setRequestP roperty("Connection"®×, "Keep-Alive");
14 ✘↔↑ connection.setUseCaches(false);
15 ≈©↔λ connection.setDoOutput(true);
16 λ'×÷ connection.setDoInpu≠✔♥t(true);
17
18 // £δ"δ得(de)到(dào)請(qǐng)求的(de)輸出流對(duì)象
1β&≤9 DataOutputStream out≤∏×↑ = new DataOutputStream(c≥¶¥onnection.getOutputStream());
20 out.wδ₽riteBytes("");
21 ↓£÷♥ out.flush();
22 out.clos≠☆e();
23
24 // 建立實際的(de)連接
25 c >↑onnection.connect();
26 // 定義 BufferedRe'↔Ω∑ader輸入流來(lái)讀(dú)取URL的(de)響應
27 Buffe÷≈redReader in;
28 if (requestUrl.containsσ↕©("nlp"))
29 ↓≤→π in = new BufferedReader(n≥σ∑ew InputStreamReader(conne§ε↓ction.getInputStream(), "GBK≤₩'34;));
30 else
31 ∞↔ in = new BufferedReader(new InputStrea✘♣"mReader(connection.getInpuπφ tStream(), "UTF-8"));
32 String↕₽σ←Builder result = new StringΩ≥Builder();
33 String geαΩ∑ΩtLine;
34 while ((getLine&Ω = in.readLine()) != null) {
35 φ↓ result.append(getLine);
3∑≠λ6 }
37 in.σ★close();
38 JSONObject jsonObject =↔"↕λ JSONObject.parseObject(result.toString());
3 ™δ9 return jsonObject.getString("a®≠ccess_token");
40 }
調用(yòng)微(wēi)信接口生(shēng)成微(wēiσ₹♥)信小(xiǎo)程序二維碼
1 /**
2 * 生(shēng)成微(wēi)信小(xiǎo)程序二↓¶↔"維碼
3 *
4 * @$₩;param filePath
5 * 本地(dì)生(shēng)成&★π←二維碼路(lù)徑
6 * @param page
•↔7 * 當前小(xiǎo)程序相(xiàng)對(duì)頁面 必★₽÷須是(shì)已經發布的(de)小(xiǎo)程序存λα♦在的(de)頁面(否則報(bào)錯(cuò)),例如(rú)™φ> pages/index/index, 根路(lù)徑前不(bù)要(yào)填加→¶ /,不(bù)能(néng)攜帶參數(shù)(參數(shù)請(qǐng)放(fàng)在sc¥π£©ene字段裡(lǐ)),如(rú)果不(bù)填寫這(zhè)個↑<↑(gè)字段,默認跳(tiào)主頁面
8 ✔™ * @param scene
9 * 最大(dà★ )32個(gè)可(kě)見(jiàn)字符ÿ≈→₩0c;隻支持數(shù)字,大(dà)小(xiǎo)寫英文✘'≈∑(wén)以及部分(fēn)特殊字符:!#$&'()*+∑≈;,/:;=?@-._~,其它字符請(qǐng)自(zì)行(x∞→✘£íng)編碼為(wèi)合法字符(因不(bù)支持%,中文¶↕(wén)無法使用(yòng) urlencode 處理(lǐ)∏xff0c;請(qǐng)使用(yòng)其他(tā)編碼方式)
10 *πγ♠ @param accessToken
11 * ≠ ♠£ 接口調用(yòng)憑證
12 */
13 pu≤✔blic static void generateQr→↓Code(String filePath, String page, String sce $→&ne, String accessToken) {
14
15 try { ¥☆
16
17 //調用(yò€↑ng)微(wēi)信接口生(shēng)成二維碼
18 δ™ URL url = new URL(λ₩"https://api.weixin.qq.com/wxa/getwxac±¶odeunlimit?access_token=" + accessT©≤γoken);
19 HttpURLConnection h≠™ ttpURLConnection = (HttpURLConnection) ★÷url.openConnection();
20 ✘ httpURLConnection.set§πRequestMethod("POST"↓<∏;);// 提交模式
21 // conn.setC¥∏↕γonnectTimeout(10000);//連接超時(shí) 單位毫秒(miǎo)
22 ₩€ // conn.setReadTimeout(20₹✘♠00);//讀(dú)取超時(shí) 單位毫秒(miǎo)
23 ♦©€ // 發送POST請(qǐng)求必須設置如(rúβ>$)下(xià)兩行(xíng)
24 httpURLCo∞λ≠ nnection.setDoOutput(true)↕♠₽φ;
25 httpURLConne•∏✔ction.setDoInput(true);
26 // 獲取URγ∏•LConnection對(duì)象對(duì)應的(de)輸出γ↓≥∞流
27 PrintWriter printWriter &®♦#61; new PrintWriter(httpURLConne'♥ction.getOutputStream());
28 ☆™÷ // 發送請(qǐng)求參數(shù)
29 J♠≥β SONObject paramJson = new JSONObjectγ₩∞§();
30 //這(zhè)就(jiù)±≈↕"是(shì)你(nǐ)二維碼裡(lǐ)攜帶的(de)參數(shù) String型 名稱不÷>£(bù)可(kě)變
31 paramJson.put("≥✔¥scene", scene);
32 ₽♣ //注意該接口傳入的(de)是(shì)page而不(bù)是(ε≈shì)path
33 paramJson<₩.put("page", page);
34 //這(z♥☆∞hè)是(shì)設置掃描二維碼後跳(tiào)轉的(de)頁面
35 ≥↑ paramJson.put("width", 200)₩©÷;
36 paramJson$®©•.put("is_hyaline", true);
α≠37 paramJson.put("auto_color"α<♣, true);
38 printWriter.write(paramJ£<son.toString());
39 // fσ'×lush輸出流的(de)緩沖
40 printWrite€αγr.flush();
41
42 //開(kāi)始獲✔♥取數(shù)據
43 Buffered• InputStream bis = new Buffe<β☆≈redInputStream(httpURLConnection.getInputStream(™♦∏α));
44 OutputStream ₹↓os = new FileOutputStream(new File(filePα✔ath));
45 int len;
46 ↓>≥byte[] arr = new byte[1024];
47 w♣γγεhile ((len = bis.read(arr)) != -1) {
48 ♥™ ₩ os.write(arr, 0, len);
49 ∏≈€÷ os.flush();
50 }
5♦×€↓1 os.close();
52 ' } catch (Exception e) {
53 β•♦ e.printStackTrace(↑& ₩);
54 }
55
56 ♠$¶System.out.println("打開(kāiε)地(dì)址查看(kàn)生(shēng)成的(de)≈>®二維碼:" + filePath)≈≥$;
57
58 }
測試類
1 public static void main(String[] arg÷→₩s) throws Exception {
2
σ☆♣ 3 //獲取接口調用(yòng)憑證access_tok'$en
4 String appId §•61; "小(xiǎo)程序id";//小(xiǎo)程序±λ ☆id
5 String appKey = "小(xiǎo)'β↑÷程序密鑰";//小(xiǎo)程序密鑰
6 ↔✔≥♥ String token = postToken(aδ•Ω♣ppId, appKey);
7
8 //生(✘£shēng)成二維碼
9 generateQrCode("E:\\too§≠££ls\\qrCode\\test.png", "pages/index/in'✘÷dex", "aa=108&bb=2&α♠↕•amp;cc=3", token);
10
11 λ× λ }
注意
1 1.獲取小(xiǎo)程序appId 與appKey
2 ®≠ 2.生(shēng)成小(xiǎo)程序二維碼頁面參數(shù>≈)傳入的(de)是(shì)page而不(bù)是(shì)path,其他(tā)的(∑¶de)接口是(shì)path。
3 pageΩ®π↓後面不(bù)允許加參數(shù),參數(shù)需要(yào♣> ¶)通(tōng)過scene傳入。而小(xiǎo)程序也(yě)需要(yào)通(tōn$©☆εg)過scene獲取參數(shù)。
4 ✘★♠∑3.生(shēng)成小(xiǎo)程序二維碼可(kě)将二維碼寫入本地(××≈dì),也(yě)可(kě)上(shàng)傳至↓™<¥服務器(qì)。自(zì)行(xíng)選擇
5
參考地(dì)址:
https://www.cnblogs.com/daipianpia§↔↓n/p/9239452.html
http://www.what21.com/u/10004/67562♣α00547748968305.htm
生(shēng)成小(xiǎo)程序二維碼官方文(wén)檔
https://developers.weixin.qq.com/miniprogram/dev♠∏/api-backend/open-api/qr-code/wxπacode.getUnlimited.html