微信小程序之生成二維碼


首先先扯一些題外話,本人是java行業的小白,因為是改行做的java,之前的工作就不提了。

之前寫過幾篇隨便,剛看了下,覺得比較low,就都刪了,所以也算是進入java行業的第一篇隨筆,如果有表述上或者技術上說的不到位的地方,請大佬們多多包涵,先謝過。

講一下小程序的二維碼的原因,是因為這個業務確實困擾了我好幾天,還有小程序最近還是蠻火的,后期等支付功能做完了,會把支付功能也簡單的捋一下。

我們公司的業務都是前后端分離的,我負責的是后端java,所以主要還是針對java部分講一下。

回歸正題,描述一下業務,利用小程序前端傳參給后端,后端生成二維碼,保存到本地,前端調用本地二維碼圖片,顯示,用戶可以掃描二維碼獲取相應界面。后端獲取二維碼的流程:向服務器發送url+appid和secret以獲取token,再向服務器發送token和scene參數獲取二維碼參數,參數保存為圖片格式。貼上主要代碼:

//controller中處理主要業務

public R createRoomCode(int roomId) throws IOException {
//獲取token_access
String params=grant_type_code+"&appid="+app_id+"&secret="+secret;
String sr = HttpRequest.sendGet("https://api.weixin.qq.com/cgi-bin/token?grant_type", params);
JSONObject json=JSONObject.fromObject(sr);
String token_access=sr.substring(sr.indexOf(":")+2,sr.indexOf(",")-1);
String sceneStr=""+roomId;
HttpUtil.getminiqrQr(sceneStr,token_access);
return R.ok("succ");
}
//getminiqrQr類處理返回的二維碼參數保存圖片
public class HttpUtil {

public static Map getminiqrQr(String sceneStr, String accessToken) {
RestTemplate rest = new RestTemplate();
InputStream inputStream = null;
OutputStream outputStream = null;
try {
String url = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token="+accessToken;
Map<String,Object> param = new HashMap<>();
param.put("scene", sceneStr);
param.put("path", "pages/bookinglist/bookinglist");
param.put("width", 300);
param.put("auto_color", false);
Map<String,Object> line_color = new HashMap<>();
line_color.put("r", 0);
line_color.put("g", 0);
line_color.put("b", 0);
param.put("line_color", line_color);
System.out.println("調用生成微信URL接口傳參:" + param);
MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
HttpEntity requestEntity = new HttpEntity(param, headers);
ResponseEntity<byte[]> entity = rest.exchange(url, HttpMethod.POST, requestEntity, byte[].class, new Object[0]);
System.out.println("調用小程序生成微信永久小程序碼URL接口返回結果:" + entity.getBody());
byte[] result = entity.getBody();
inputStream = new ByteArrayInputStream(result);

File file = new File("D:/workSpace/wechat2.0/03-Source/java2.0/room/pic/1.png");
if (!file.exists()){
file.createNewFile();
}
outputStream = new FileOutputStream(file);
int len = 0;
byte[] buf = new byte[1024];
while ((len = inputStream.read(buf, 0, 1024)) != -1) {
outputStream.write(buf, 0, len);
}
outputStream.flush();
} catch (Exception e) {
System.out.println("調用小程序生成微信永久小程序碼URL接口異常");
} finally {
if(inputStream != null){
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(outputStream != null){
try {
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return null;
}
}

下面的坑就是經驗不足了,我啟動后端服務器后,前端無法訪問我上面指定圖片保存的路徑,后來問了大佬,在ieda項目resources文件夾下新建一個static文件夾,將圖片放入其中,然后就可以在網頁上請求路徑格式如https://域名:端口號/項目名稱/圖片名稱.png就可以訪問了

前端直接訪問這個路徑就可以預覽二維碼。

參考網頁找不到了,不過謝謝網上的大佬和公司的大佬。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM