java-生成帶引數的小程式二維碼
第一次寫部落格,有點緊張,不足之處,請大佬們輕噴,程式碼也不是我自己寫的,我也是這裡copy一點那裡copy一點,然後總結出來的,前面可能廢話比較多,因為我也是小程式的初學者,看官網的API看了好久都沒看懂,所以把我理解的記下來了,希望這篇對大家有幫助
為滿足不同需求和場景,這裡提供了三個介面,開發者可挑選適合自己的介面。
A介面,生成小程式碼,可接受path引數較長,生成個數受限。
B介面,生成小程式碼,可接受頁面引數較短,生成個數不受限。
C介面,生成二維碼,可接受path引數較長,生成個數受限。
該介面主要用於獲取二維碼(不帶引數)
注意事項
上面是官網的一些資料,接下來就通過Java後臺來獲取到帶引數的小程式碼
一、獲取access_token
(1)裡面給了一個https的請求方式,這個是幹嘛用的呢?
注意裡面有三個引數”appid”和”secret”,還有一個就不用管,我們這個固定寫法就好了
appid:小程式id
secret:小程式金鑰
知道引數是幹嘛的了,那下一步怎麼用呢,有兩種方式,一種是直接在位址列上面
好了,想要的access_token獲取到了,直接Ctrl+C Ctrl+V就好了
等等,這樣做是不是好像不太符合程式設計師的做法?
是的,不安全,直接把小程式id和金鑰都暴露出來了,那怎麼辦呢?
我們可以用java後臺來,廢話不多說,直接看碼
/** * 用於獲取access_token * @param params * @param APIKEY 小程式id * @param SECRETKEY 小程式金鑰 * @return access_token * @throws Exception */ public static String postToken() throws Exception { String APIKEY = "";//小程式id String SECRETKEY = "";//小程式金鑰 String requestUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+APIKEY+"&secret="+SECRETKEY; URL url = new URL(requestUrl); // 開啟和URL之間的連線 HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("POST"); // 設定通用的請求屬性 connection.setRequestProperty("Content-Type", "application/json"); connection.setRequestProperty("Connection", "Keep-Alive"); connection.setUseCaches(false); connection.setDoOutput(true); connection.setDoInput(true); // 得到請求的輸出流物件 DataOutputStream out = new DataOutputStream(connection.getOutputStream()); out.writeBytes(""); out.flush(); out.close(); // 建立實際的連線 connection.connect(); // 定義 BufferedReader輸入流來讀取URL的響應 BufferedReader in = null; if (requestUrl.contains("nlp")) in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "GBK")); else in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8")); String result = ""; String getLine; while ((getLine = in.readLine()) != null) { result += getLine; } in.close(); JSONObject jsonObject = JSON.parseObject(result); String accesstoken=jsonObject.getString("access_token"); return accesstoken; }
好了,這個方法就直接返回access_token,是不是很簡單啊
Accesstoken獲取完了,下一步我們就可以呼叫之前說的介面來生成我們帶引數的小程式碼了
二、生成小程式碼
看到這裡是不是大佬們都知道下一步該怎麼做了?
你們是這樣想的嗎?嗯哼?看到什麼了?errmsg
那應該怎麼辦呢?沒事,不要急,老規矩,廢話不多說,直接上碼
/**
* 生成帶參小程式二維碼
* @param sceneStr 引數
* @param accessToken token
*/
public static void getminiqrQr(String sceneStr, String accessToken) {
try
{
URL url = new URL("https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token="+accessToken);
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
httpURLConnection.setRequestMethod("POST");// 提交模式
// conn.setConnectTimeout(10000);//連線超時 單位毫秒
// conn.setReadTimeout(2000);//讀取超時 單位毫秒
// 傳送POST請求必須設定如下兩行
httpURLConnection.setDoOutput(true);
httpURLConnection.setDoInput(true);
// 獲取URLConnection物件對應的輸出流
PrintWriter printWriter = new PrintWriter(httpURLConnection.getOutputStream());
// 傳送請求引數
JSONObject paramJson = new JSONObject();
paramJson.put("scene", sceneStr);
paramJson.put("page", "pages/index/index");
paramJson.put("width", 430);
paramJson.put("auto_color", true);
/**
* line_color生效
* 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();
//開始獲取資料
BufferedInputStream bis = new BufferedInputStream(httpURLConnection.getInputStream());
OutputStream os = new FileOutputStream(new File("C:/Users/Administrator/Desktop/1.png"));
int len;
byte[] arr = new byte[1024];
while ((len = bis.read(arr)) != -1)
{
os.write(arr, 0, len);
os.flush();
}
os.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
基本上就已經完成了!什麼?還不會呼叫?好吧,今天比較佛系,上碼吧
然後你的桌面就會生成一個帶引數的小程式碼了
Over!