Java實現(xiàn)微信掃碼登入的實例代碼
微信掃碼登入
首先去通過微信開放平臺做好開發(fā)者資質(zhì)認證,創(chuàng)建網(wǎng)站應(yīng)用然后等待審核
開發(fā)者資質(zhì)認證
網(wǎng)站應(yīng)用
審核通過的話就是這個樣子 還有最底下的授權(quán)回調(diào)地址 (www.xxxxx.com) 填寫域名即可
pom
<!-- WeChatQrCode --> <dependency> <groupId>com.github.binarywang</groupId> <artifactId>weixin-java-mp</artifactId> <version>3.4.0</version> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> <version>RELEASE</version> <scope>compile</scope> </dependency>
第一步 用戶通過點擊事件獲取到微信二維碼連接
/** * 獲取微信登陸二維碼地址 * @return */ @RequestMapping(value = "/getQRCodeUrl",method = RequestMethod.POST) public Message getQRCodeUrl() { logger.info("獲取二維碼地址"); try { String codeUrl = weChatService.getQRCodeUrl(); logger.info("codeUrl:"+codeUrl); return new Message(ResponseEnum.SUCCESS,codeUrl); }catch (Exception e){ logger.error(e.toString()+e); return new Message(ResponseEnum.FALL); } }
@Override public String getQRCodeUrl() { // 生成 state 參數(shù),用于防止 csrf String date = DateUtil.format(new Date(), "yyyyMMdd"); String state = MD5Utils.generate(CSRF_KEY + date); return wxMpService.buildQrConnectUrl(wxRedirectUrl,"snsapi_login", state); }
- https://open.weixin.qq.com/connect/qrconnect?appid=xxxx&redirect_uri=xxxxxx&response_type=code&scope=snsapi_login&state=e97555458779708b99b9d40cb49f54245c7500e536445d32#wechat_redirect
- appid 是你網(wǎng)站應(yīng)用里面的 redirect_uri 你設(shè)置的授權(quán)回調(diào)地址 scope網(wǎng)站掃碼登入為snsapi_login即可 state。微信開放平臺文檔文檔寫的很詳細,看不懂看文檔
- 用戶掃碼成功之后微信會回調(diào)你設(shè)置的回調(diào)地址 獲取二維碼連接
/** * 回調(diào)地址 * @param code * @param state * @return */ @RequestMapping(value = "/wxCallBack",method = RequestMethod.POST) public Message wxCallBack(HttpServletRequest request, HttpServletResponse response, @RequestParam(name = "code",defaultValue = "") String code, @RequestParam(name = "state",defaultValue = "")String state) { if(StringUtils.isBlank(code)){ return new Message(ResponseEnum.ESSENTIAL_IS_NULL); } if(StringUtils.isBlank(state)){ return new Message(ResponseEnum.ESSENTIAL_IS_NULL); } logger.info("微信回調(diào)------------"); logger.info(code+"------"+state); try { Message message=weChatService.wxCallBack(request,code, state); return message; }catch (Exception e){ logger.error(e.toString()+"\n"+e); return new Message(ResponseEnum.FALL); } }
@Override public Message wxCallBack(HttpServletRequest request, String code, String state) { String openId = null; if (code != null) { // 獲取 openid try { WxMpOAuth2AccessToken accessToken = wxMpService.oauth2getAccessToken(code); if (accessToken == null) { return new Message(ResponseEnum.DATA_IS_NULL); } openId = accessToken.getOpenId(); log.info("openId:" + openId); /*token = accessToken.getAccessToken();*/ WxMpUser wxUser = wxMpService.oauth2getUserInfo(accessToken, null); log.info(wxUser.toString()); return new Message(ResponseEnum.WECHAT_NOT_BINGDING, wxUser); } catch (WxErrorException e) { log.error(e.getMessage(), e); return new Message(ResponseEnum.FALL); } } return new Message(ResponseEnum.FALL); }
前端請求
$("#weiLog").click(function () { $.ajax({ type: "POST", url: "/api/wx/getQRCodeUrl", dataType: 'json', success: function (result) { //console.log(result); if(result.code==0){ this.itop = (window.screen.availHeight - 500) / 2; //獲得窗口的水平位置 this.ileft = (window.screen.availWidth - 400) / 2; this.w = window.open( result.data, "newwindow", "height=500, width=600, top=" + this.itop + ", left = " + this.ileft + ", toolbar=no, menubar=no,scrollbars=no, resizable=no,location=no, status=no" ); } } }); });
總結(jié)
到此這篇關(guān)于Java實現(xiàn)微信掃碼登入的實例代碼的文章就介紹到這了,更多相關(guān)java微信掃碼登入內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
泛談Java中的不可變數(shù)據(jù)結(jié)構(gòu)
開發(fā)人員通常認為擁有final引用,或者val在Kotlin或Scala中,足以使對象不可變。這篇博客文章深入研究了不可變引用和不可變數(shù)據(jù)結(jié)構(gòu),下面小編來和大家一起學(xué)習(xí)它2019-05-05Activiti進階之組任務(wù)實現(xiàn)示例詳解
這篇文章主要為大家介紹了Activiti進階之組任務(wù)實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-08-08IDEA使用Maven創(chuàng)建module出現(xiàn)Ignored?pom.xml問題及解決
這篇文章主要介紹了IDEA使用Maven創(chuàng)建module出現(xiàn)Ignored?pom.xml問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-11-11簡單了解SpringMVC緩存對靜態(tài)資源有什么影響
這篇文章主要介紹了簡單了解SpringMVC緩存對靜態(tài)資源有什么影響,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-09-09Java設(shè)計模式中的策略(Strategy)模式解讀
這篇文章主要介紹了Java設(shè)計模式中的策略(Strategy)模式解讀,對象的某個行為,在不同場景有不同實現(xiàn)方式,可以將這些行為的具體實現(xiàn)定義為一組策略,每個實現(xiàn)類實現(xiàn)一種策略,在不同場景使用不同的實現(xiàn),并且可以自由切換策略,需要的朋友可以參考下2023-10-10