日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

springboot配置微信公众号获取openid

發(fā)布時間:2023/12/9 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 springboot配置微信公众号获取openid 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?


前言

作為一個程序員小白要時刻記錄自己近期學習成果。最近也是接了一個項目通過微信公眾號獲取openid拿取微信賬號信息綁定


一、微信公眾號是什么?

微信公眾平臺開發(fā)概述 | 微信開放文檔https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Overview.html

二、使用步驟

1.申請微信公眾號測試號

微信公眾平臺進入申請測試號然后獲取測試號的appID、appsecret,拿到這些信息就可以開始在springboot項目中的application.yml配置

2.springboot配置微信公眾號

3.網(wǎng)頁授權(quán)

1.第一步:用戶同意授權(quán),獲取code(具體步驟可查看微信開放文檔

公眾號拿取微信授權(quán)接口地址然后在application中配置,為方便后面我把整個步驟所需要的微信接口都配置進去

wechat:appid: wx6f59d6140611d9eesecret: 84cce012e3ccb3f873412b53dfd1c0b2#微信授權(quán)接口地址api-auth: https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect#獲取微信授權(quán)的access-token的接口地址api-auth-access-token: https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code#獲取微信用戶信息接口地址api-userinfo: https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN#微信用戶授權(quán)成功后回調(diào)接口地址auth-call-back: http://xinyushiaolu.oicp.net/edu-user/weChatApi/authCallBack

然后在controller類中寫授權(quán)接口然后前端調(diào)用接口,注意跳轉(zhuǎn)回調(diào)redirect_uri這個參數(shù)是你授權(quán)回調(diào)的地址會頁面將跳轉(zhuǎn)至 redirect_uri/?code=CODE&state=STATE。拿取code

/*** 微信授權(quán)** @param response* @param studentNumber* @param authSucceedSkipUrl* @return* @throws IOException*/@GetMapping("/getWeChat")public String getWeChat(HttpServletResponse response, String studentNumber, String authSucceedSkipUrl) throws IOException {String uRLEncoderAuthCallBack = URLEncoder.encode(weChatConfig.getAuthCallBack(), "utf-8");// 用戶授權(quán)跳轉(zhuǎn)地址String apiAuthUrl = weChatConfig.getApiAuth().replace("APPID", weChatConfig.getAppid()).replace("REDIRECT_URI", uRLEncoderAuthCallBack).replace("SCOPE", "snsapi_userinfo").replace("STATE", studentNumber + "," + authSucceedSkipUrl);response.sendRedirect(apiAuthUrl);log.info("用戶授權(quán)跳轉(zhuǎn)地址apiAuthUrl = {}", apiAuthUrl);return "redirect:" + apiAuthUrl;}

weChatConfig類是為了引入剛才在application配置的微信appid等接口方便調(diào)用

第二步:通過code換取網(wǎng)頁授權(quán)access_token

前端在需要的地方調(diào)用一下該接口進行授權(quán),我們?yōu)榇俗鲆粋€回調(diào)接口讓授權(quán)直接跳該網(wǎng)址獲取code,然后通過code換取access_token和openid

則此時開發(fā)者可以通過access_token和openid拉取用戶信息了然后保存到數(shù)據(jù)庫,該接口一次把這幾步做到位了

/*** 微信授權(quán)回調(diào)接口** @param code* @param state* @return* @throws IOException*/@GetMapping("/authCallBack")public Object authCallBack(String code, String state) throws IOException {if (StringUtils.isEmpty(code)) {return Result.error(CommonExceptionEnum.PARAMETER_VERIFY_ERROR);}log.info("微信授權(quán)回調(diào), code = {} ,state = {}", code, state);//獲取微信授權(quán)access_tokenString apiAuthAccessTokenUrl = weChatConfig.getApiAuthAccessToken().replace("APPID", weChatConfig.getAppid()).replace("SECRET", weChatConfig.getSecret()).replace("CODE", code);String result = HttpUtil.get(apiAuthAccessTokenUrl);log.info("微信授權(quán)access_token返回參數(shù):{}", result);HashMap<String, String> wechatAuthTokenMap = JSON.parseObject(result, HashMap.class);String accessToken = wechatAuthTokenMap.get("access_token");String openid = wechatAuthTokenMap.get("openid");//如果微信的返回access_token為空if (StringUtils.isBlank(accessToken)) {return Result.error(CommonExceptionEnum.WECHAT_LOGIN_ERROR);}//調(diào)用微信通過OPENID和ACCESS_TOKEN獲取用戶信息接口String apiUserinfoUrl = weChatConfig.getApiUserinfo().replace("ACCESS_TOKEN", accessToken).replace("OPENID", openid);//獲取微信用戶信息String resultUserinfo = HttpUtil.get(apiUserinfoUrl);log.info("微信用戶信息:{}", resultUserinfo);WechatUserInfoDTO wechatUserInfoDTO = JSON.parseObject(resultUserinfo, WechatUserInfoDTO.class);//更新數(shù)據(jù)String[] stateArr = state.split(",");if (stateArr.length != 2) {return Result.error(CommonExceptionEnum.WECHAT_LOGIN_ERROR);}UpdateWrapper<User> uw = new UpdateWrapper<>();uw.eq("student_number", stateArr[0]);log.info("getStuNumber=" + stateArr[0]);uw.set("openid", wechatUserInfoDTO.getOpenid()).set("bind", 1).set("wechat_avatar", wechatUserInfoDTO.getHeadimgurl()).set("nick_name" ,wechatUserInfoDTO.getNickname());boolean updateStatus = userBindService.update(uw);if(!updateStatus){return Result.error(CommonExceptionEnum.STUDENT_NO_EXIST_ERROR);}log.info("用戶授權(quán)登錄成功跳轉(zhuǎn)地址:{}",stateArr[1]);return "redirect:"+stateArr[1];}

?
?

?

總結(jié)

該文章只是我對自己這段時間的學習的一個總結(jié)和記錄,當然有不好的地方請指正!同時希望自己能夠堅持向自己目標前進,讓自己水平不斷提高

總結(jié)

以上是生活随笔為你收集整理的springboot配置微信公众号获取openid的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。