微信登入获取用户唯一标识(后端实现)
最近工作中碰到與安卓對接一系列的平臺登錄功能,眾所周知,登錄之后對用戶經行持久化操作的前提是得獲取用戶得唯一標識,今天就來講講如何對接微信登錄后獲取到用戶得唯一標識
目錄
前言
一、準備工作
二、實現邏輯(后端)
1.查看所需參數
?2.查看返回結果
?3.代碼實現
總結
前言
????????在做軟件開發中,與第三方平臺互聯是必不可少的,當出現要調用第三方接口的時候,我們可以先了解接口調用的時序圖,一般會出現在平臺官網提供的第三方接口開放平臺,其次是需要了解到接口的傳參以及回參,如何調用,如何接收,本文以微信登錄為例,講解如何通過官網提供的文檔來進行的接口調用。
一、準備工作
?????????在調用任何第三方平臺接口之前一定要去平臺的官網上查看接口的流程,前提是什么,這里可以通過下面鏈接查看
微信官方文檔 | 開放平臺
?????????在調用接口之前,我們需要注冊這個平臺的開發者賬號,成為開發者,并且擁有一個已審核通過的網站應用,并獲得相應的 AppID 和AppSecret(這些參數在接口調用中需要涉及),申請微信登錄且通過審核后,即可開始接入流程。在官網的開飯平臺文檔上,也可以了解到接口調用的時序圖,這可以讓我們了解如何分工。
二、實現邏輯(后端)
????????這我們后端只需要實現后端的接口調用即可,code一般是前端調用獲取之后返回給我們服務器端,我們接收到這個code(零時憑證)之后可獲得相關參數
1.查看所需參數
?通過 code 獲取access_token
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code?可以看出,接口調用的方式其實并不難,是簡單的Get請求,需要的參數是我們注冊的開發者賬號申請的應用中的參數AppId和Secret,Code是前端傳給我們的,還有一個是固定值
?2.查看返回結果
?????????返回結果的類型并沒有code,msg這些包裝的,也比較好處理,在返回結果中我們可以拿到我們想要的結果,比如此次我們只要拿到用戶的唯一標識openId,這個唯一是指用戶在這個我們注冊開發者賬號申請的應用中是唯一的,也就是說openId+AppID是唯一的
?3.代碼實現
package com.lyj.biz.login;import com.alibaba.fastjson.JSONObject; import com.lyj.biz.domain.valueobject.UserLoginInfo; import com.lyj.biz.enums.LoginTypeEnum; import com.lyj.biz.param.UserLoginParam; import com.lyj.common.exception.BaseException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpMethod; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Component; import org.springframework.web.client.RestTemplate; import org.springframework.web.util.UriComponentsBuilder;import java.util.Date;/*** 微信號登入策略.*/ @Component public class WeCheatLoginStrategy implements LoginStrategy {private static final Logger log = LoggerFactory.getLogger(WeCheatLoginStrategy.class);private static final String ERR_CODE = "errcode";private static final String OPEN_ID = "openid";private static final String WX_ACCESS_TOKEN_URL = "https://api.weixin.qq.com/sns/oauth2/access_token";private static final String AUTHORIZATION_CODE = "authorization_code";@Value("${wechat.appId}")private String appId;@Value("${wechat.appSecret}")private String appSecret;@Autowiredprivate RestTemplate restTemplate;@Overridepublic boolean support(String loginType) {return LoginTypeEnum.WE_CHAT.getType().equals(loginType);}@Overridepublic UserLoginInfo login(UserLoginParam userLoginParam) {// 零時憑證codeString code = userLoginParam.getLoginId();log.info("獲取微信信息入參,code:{}", code);UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(WX_ACCESS_TOKEN_URL).queryParam("appid", appId).queryParam("secret", appSecret).queryParam("code", code).queryParam("grant_type", AUTHORIZATION_CODE);ResponseEntity<JSONObject> response = restTemplate.exchange(builder.toUriString(),HttpMethod.GET,null,JSONObject.class);JSONObject body = response.getBody();log.info("拉取微信信息返回結果:{}", body);if (body == null || null != body.getString(ERR_CODE)) {throw new BaseException("獲取微信信息失敗");}String openId = body.getString(OPEN_ID);// String access_token = Convert.toStr(data.get("access_token")); // String expires_in = Convert.toStr(data.get("expires_in")); // String refresh_token = Convert.toStr(data.get("refresh_token")); // String unionid = Convert.toStr(data.get("unionid"));return UserLoginInfo.builder().loginId(openId).loginType(LoginTypeEnum.WE_CHAT).loginTime(new Date()).build();} }?????????接口調用我用的是spring提供的webclient的第三方接口調用封裝類Rest Template,功能十分強大,配合UriComponentsBuilder可以模擬許多接口請求,比較簡單的接口調用也可以使用httpclient,在獲取微信小程序用戶唯一標識時我也有使用到,大家可以去參觀參觀。對于結果返回,用Json處理一下就能得到
總結
????????與第三方平臺互聯時程序員開發路上不可避免地,可以系統的學習一下接口的模擬請求,多瀏覽平臺的官方文檔,也是挺有益處。以上就是我通過RestTemplate請求第三方接口拿到我想要的數據,實現我碰到的需求功能。大家有不足的地方或者更好的建議可以提出來,互相進步!
總結
以上是生活随笔為你收集整理的微信登入获取用户唯一标识(后端实现)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 有活着的感觉就有未来————《时生》读后
- 下一篇: 在解决prob中遇到的prob...