微信二维码的生成(java后端)--邀请新人
目錄
寫在前言
1.微信官方文檔
2.具體分析
寫在前言
最近因為在學(xué)習(xí)微信小程序邀請新用戶的功能,所以需要后端生成二維碼并且攜帶本人的用戶id或者其他的信息,傳給前端。用戶通過這個二維碼去進行登錄或者其他的操作,這時候前端人員記錄下來邀請人的用戶id和被邀請人的用戶id傳給后端。這哥功能首先就需要生成微信二維碼,那么下面就是我的學(xué)習(xí)過程。
1.微信官方文檔
首先需要查看微信的官方文檔去確定這個微信二維碼到底需要什么接口。
你必須知道,這個二維碼的生成條件有
①小程序已經(jīng)發(fā)布成功
②通過后端程序提供access_token去給微信的服務(wù)器,微信服務(wù)器確認(rèn)好身份后就會返回一個buffer的字節(jié),這時候就是我們所需要的二維碼。
所以必須要有微信小程序給的開發(fā)者的相關(guān)access_token
一般你是在前人的基礎(chǔ)上新增功能,這些前提問題可以不用考慮,我就屬于這個。首先這些東西是在SpingBoot的yam配置文件中,你可以看到你都前輩寫的appid和對應(yīng)的secret。這些會在應(yīng)用啟動時注入,所以只要有就好解決問題了。
下面讓我們看看微信的官方文檔:這是官方文檔。
進去之后我們看到了他的介紹
接口A:適用于需要的碼數(shù)量較少的業(yè)務(wù)場景
接口B:適用于需要的碼數(shù)量極多的業(yè)務(wù)場景
接口C:適用于需要的碼數(shù)量較少的業(yè)務(wù)場景
接口D:適用于“一物一碼”的業(yè)務(wù)場景
其中接口A和接口C :生成小程序碼,可接受 path 參數(shù)較長,生成個數(shù)受限,數(shù)量限制見?注意事項,請謹(jǐn)慎使用。
所以我這里學(xué)習(xí)的是邀請新人(碼必須很多)用的接口B
這是接口B的源碼,有中文很清晰的。
/*** 接口B: 獲取小程序碼(永久有效、數(shù)量暫無限制).* <pre>* 通過該接口生成的小程序碼,永久有效,數(shù)量暫無限制。* 用戶掃描該碼進入小程序后,將統(tǒng)一打開首頁,開發(fā)者需在對應(yīng)頁面根據(jù)獲取的碼中 scene 字段的值,再做處理邏輯。* 使用如下代碼可以獲取到二維碼中的 scene 字段的值。* 調(diào)試階段可以使用開發(fā)工具的條件編譯自定義參數(shù) scene=xxxx 進行模擬,開發(fā)工具模擬時的 scene 的參數(shù)值需要進行 urlencode* </pre>** @param scene 最大32個可見字符,只支持?jǐn)?shù)字,大小寫英文以及部分特殊字符:!#$&'()*+,/:;=?@-._~,* 其它字符請自行編碼為合法字符(因不支持%,中文無法使用 urlencode 處理,請使用其他編碼方式)* @param page 必須是已經(jīng)發(fā)布的小程序頁面,例如 "pages/index/index" ,如果不填寫這個字段,默認(rèn)跳主頁面* @param width 默認(rèn)false 自動配置線條顏色,如果顏色依然是黑色,則說明不建議配置主色調(diào)* @param autoColor 默認(rèn)true 自動配置線條顏色,如果顏色依然是黑色,則說明不建議配置主色調(diào)* @param lineColor autoColor 為 false 時生效,使用 rgb 設(shè)置顏色 例如 {"r":"xxx","g":"xxx","b":"xxx"}* @param isHyaline 是否需要透明底色, is_hyaline 為true時,生成透明底色的小程序碼* @return 文件內(nèi)容字節(jié)數(shù)組* @throws WxErrorException 異常*/byte[] createWxaCodeUnlimitBytes(String scene, String page, int width, boolean autoColor,WxMaCodeLineColor lineColor, boolean isHyaline) throws WxErrorException;其實在微信的接口B的官方文檔里也寫的很清楚。
那么我們現(xiàn)在已經(jīng)弄明白了需要和微信對接什么接口,下面就是怎么寫了。
2.具體分析
由于工具類的發(fā)展和微信官方的書寫,現(xiàn)在這個方法是非常簡單。
只需要在controller 層就可以解決問題
@PostMapping(value="inviteCode",produces = MediaType.IMAGE_JPEG_VALUE)public byte[] inviteCode(@RequestParam ("inviteUserId")Long inviteUserId) throws WxErrorException {File file=wxMaService.getQrcodeService().createWxaCodeUnlimit(String.valueOf(inviteUserId),"pages/login/login",300,true,null,true);return FileUtil.readBytes(file);}要注意接口返回的是buffter,所以需要使用字符數(shù)組進行接受。
這其中的wxMaService是在前面自己定義的
private final WxMaService wxMaService;是我們調(diào)用微信接口的前提。
getQrcodeService()方法是返回對應(yīng)調(diào)用接口的實體類
/*** 返回二維碼相關(guān)接口方法的實現(xiàn)類對象,以方便調(diào)用其各個接口.** @return WxMaQrcodeService*/WxMaQrcodeService getQrcodeService(); createWxaCodeUnlimit() 就是我們的接口B了,但是我們接口B有許多的重載方法要選擇最合適的一個。我們這里選的是返回字節(jié)數(shù)組的。注意:?@PostMapping(value="inviteCode",produces = MediaType.IMAGE_JPEG_VALUE)中的produces一定要寫,不然的話就會返回的是亂碼(字節(jié))。他的功能是確定返回的類型,我們二維碼肯定是圖片了。
測試結(jié)果:
?
?
?
總結(jié)
以上是生活随笔為你收集整理的微信二维码的生成(java后端)--邀请新人的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中间件:什么是中间件?
- 下一篇: 将传统的照片在Autodesk® 123