今天我們來對接微信開放平台的網站應用登錄
首先上文檔鏈接:https://developers.weixin.qq.com/doc/oplatform/Website_App/WeChat_Login/Wechat_Login.html
1. 第三方發起微信授權登錄請求,微信用戶允許授權第三方應用后,微信會拉起應用或重定向到第三方網站,並且帶上授權臨時票據code參數;
2. 通過code參數加上AppID和AppSecret等,通過API換取access_token;
3. 通過access_token進行接口調用,獲取用戶基本數據資源或幫助用戶實現基本操作。
文檔上說的也很明白
首先我們需要注冊一個開放平台的賬號
但是吧很不爽的是需要企業認證花300RMB進行資質認證。
----------------------------------------------------------
ok,我們先來創建一個網站應用
根據提示進行填寫就行了
填寫完,狀態為已通過就可以開始微信登錄的開發了。
首先我們需要知道三個信息,方可繼續開發。
再讓我們繼續來看微信開放平台的文檔
注意是否必須!!!
redirect_uri是回調地址uri剛才配置的授權回調域填上並加上接口 or html,這個可以根據自己的業務來,這里我是填上接口
這個urlEnCode處理,網上有很多在線工具:https://tool.chinaz.com/tools/urlencode.aspx
然后根據微信開發文檔填寫對應的信息,比如:
https://open.weixin.qq.com/connect/qrconnect?
appid=xxxxxxxxx&redirect_uri=https%3a%2f%2fwww.baidu.com%2frequestWechatLogin&response_type=code&scope=snsapi_login&state=STATE#wechat_redirect
上面信息是我隨便填寫的,開發時請根據自己的微信開放平台配置填寫
ok,完成后打開此鏈接就會進入到該頁面,就可以開始登錄了。
使用手機端微信掃描,
注意:每次每個用戶授權后都會得到一個一次性的code,這個code只能使用一次 ,下次再授權登錄會重新生成code的!!!
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
鏈接參數根據微信開放平台配置對應填寫
因為我這邊redirect_uri填寫的是一個接口,就需要寫一個接口,我就直接上代碼了,這里有封裝的類和枚舉,我就不展示了大家可以修改!!!
1 /** 2 * 請求 code web微信登錄 3 * 4 * @param code 請求登錄唯一 code 5 * @return 通用返回對象 6 */ 7 @ApiOperation("請求 code 微信登錄") 8 @ApiImplicitParam(name = "code", value = "請求登錄唯一code", dataType = "String", paramType = "query") 9 @GetMapping("/requestWeChatLogin") 10 public ApiResult requestWeChatLogin(@RequestParam("code") String code) { 11 // 斷言為空則拋出異常 12 Assert.notNull(code, "未授權成功"); 13 String appId = "xxxxxxxxx"; 14 String secret = "xxxxxxxxxxxxxxxxxx"; 15 String strUri = StrUtil.format("https://api.weixin.qq.com/sns/oauth2/access_token?appid={}&secret={}&code={}&grant_type=authorization_code", appId, secret, code); 16 // 使用 Hutool開發工具包,執行請求接口,獲取相關信息 17 HttpResponse response = HttpRequest.get(strUri).execute(); 18 // 轉成JSON對象 19 JSONObject jsonObject = JSONUtil.parseObj(response.body()); 20 // 判斷JSON對象中 unionid 是否存在 21 if (jsonObject.isNull("unionid")) { 22 // 不存在返回結果,code無效 23 return new ApiResult(CommonEnum.CODE_INVALID); 24 } 25 // 獲取 unionId 26 String unionId = jsonObject.get("unionid").toString(); 27 // 獲取 openId 28 String openId = jsonObject.get("openid").toString(); 29 // 獲取 accessToken 30 String accessToken= jsonObject.get("access_token").toString(); 31 return new ApiResult(CommonEnum.SUCCESS); 32 }
這樣一頓操作后,就可以根據code獲取到掃碼授權用戶的一些信息。
拿到這些信息可以使用 access_token&
openid 來獲取用戶個人信息 等等。
該保存數據庫可以保存,有別的操作自行編寫!!!