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