国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java - 微信小程序授權(quán)手機(jī)號(hào)登錄

這篇具有很好參考價(jià)值的文章主要介紹了Java - 微信小程序授權(quán)手機(jī)號(hào)登錄。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

? ? ? ? 最近做了一個(gè)關(guān)于商城的項(xiàng)目,B端選用若依的開源框架,C端還是vue前后端分離。其中C端主要是小程序的形式,所以想著來總結(jié)一下對(duì)接微信小程序登錄中Java部分遇到的坑即代碼分享!

廢話不多說,直接上代碼!

1、controller 層代碼

? ? ? ??入?yún)⑽疫@邊是直接使用request來接收,大家可以改成自己的DTO來接收入?yún)?/p>

    @GetMapping("/letsLogin")
    @ApiOperation("微信授權(quán)登錄")
    public R letsLogin(HttpServletRequest request){
        return remoteMallUserService.letsLogin(request);
    }

2、service 層代碼

????????其中涉及到幾個(gè)基本配置參數(shù),我這邊單獨(dú)列出,大家可以放入配置文件進(jìn)行引用,也可以直接作為常量引用;

同時(shí)可以參考微信公眾平臺(tái)提供的開發(fā)文檔(服務(wù)端):接口調(diào)用憑證 | 微信開放文檔

// APP_ID 小程序注冊時(shí)由微信提供 
private final static String APP_ID = "....";
// APP_SERCRET 小程序注冊時(shí)由微信提供 
private final static String APP_SERCRET = ".....";
// 請求地址這邊用了多個(gè)所以我們按照調(diào)用的順序來說明
// 首先是這個(gè)TOKENURL 用于獲取微信用戶的授權(quán)認(rèn)證 來拿到“accessToken”
private final static String TOKENURL = "https://api.weixin.qq.com/cgi-bin/token";
// 第二是用于請求獲取用戶手機(jī)號(hào)的地址(結(jié)尾的“access_token”需要拼接上TOKENURL返回的參數(shù))
private final static String PHONENURL = "https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=";
// 最后才是登錄url了
private final static String URL = "https://api.weixin.qq.com/sns/jscode2session";

????????由于我自身的業(yè)務(wù)中存在通過手機(jī)號(hào)驗(yàn)證登錄這個(gè)功能模塊,所以我在入?yún)⒌臅r(shí)候會(huì)做一個(gè)是否存在手機(jī)號(hào)的判斷,不存在時(shí)才通過微信去請求;存在時(shí)直接調(diào)用登錄URL即可;

?這邊還需要簡單解釋一下入?yún)?span style="color:#be191c;">(紅色為必傳參數(shù)):

? ? ? ? 1、userPhone? 用戶手機(jī)號(hào);

? ? ? ? 2、code:前端通過getPhoneNum() 獲得的code;

? ? ? ? 3、loginCode:前端通過wx.login() 獲得的code;

@Autowired
    private RestTemplate restTemplate;

@Override
    public R letsLogin(HttpServletRequest request){
        // 先拿到前端通過wx.login()拿到的code -- 5分鐘過期哦
        String loginCode = request.getParameter("loginCode");
        if(StringUtils.isBlank(loginCode)){
            return R.fail(101,"loginCode不可以為空!");
        }
        String userPhone = request.getParameter("userPhone");
        // 如果手機(jī)號(hào)為空則判斷是否有code(該code是前端通過獲取手機(jī)號(hào)方法拿到的)
        if (StringUtils.isBlank(userPhone)){
            String code = request.getParameter("code");
            if(StringUtils.isBlank(code)){
                return R.fail(101,"code為空,無法獲取手機(jī)號(hào)!");
            }
            // 獲取手機(jī)號(hào) -- 這邊需要定義一個(gè)傳參的map
            Map<String, String> params1 = new HashMap<>();
            // 此處為固定值不需要修改
            params1.put("grant_type", "client_credential");  
            // APP_ID和APP_SERCRET需要根據(jù)實(shí)際情況進(jìn)行傳參
            params1.put("appid", APP_ID);  
            params1.put("secret", APP_SERCRET);
            // 調(diào)用TOKENURL獲取授權(quán)憑證access_token
            // 我這邊用的是Hultool的HTTP請求工具 -- 之后會(huì)附上maven依賴
            String resultToken = HttpUtil.sendGet(TOKENURL, params1);
            // fastjson 框架自帶 大家可以選擇自己的JSON轉(zhuǎn)換工具
            JSONObject tokenJson = JSONObject.parseObject(resultToken);
            String accessToken = (String)tokenJson.get("access_token");
            // 使用前端code獲取手機(jī)號(hào)碼(accessToken一定要以get的方式請求)其他參數(shù)為json格式
            String url1 = PHONEURL + accessToken;
            Map<String, String> paramMap = new HashMap<>();
            paramMap.put("code", code);
            HttpHeaders headers = new HttpHeaders();
            HttpEntity<Map<String, String>> httpEntity = new HttpEntity<>(paramMap, headers);
            ResponseEntity<Object> response = restTemplate.postForEntity(url1, httpEntity, Object.class);
            Object body = response.getBody();
            Map<String, Object> map = new ObjectMapper().convertValue(body, Map.class);
            Object phoneInfo = map.get("phone_info");
            Map<String, Object> map1 = new ObjectMapper().convertValue(phoneInfo, Map.class);
            // 以上都是response參數(shù)的處理 最終拿到userPhone 可以進(jìn)行下一步 微信登陸了
            userPhone = (String)map1.get("phoneNumber");
        }

        // 構(gòu)建 一個(gè)map傳登錄的參數(shù)
        Map<String, String> params = new HashMap<>();
        params.put("appid", APP_ID);
        params.put("secret", APP_SERCRET);
        // 這里的code是前端通過wx.login()獲取到的
        params.put("js_code", loginCode); 
        // 固定參數(shù)
        params.put("grant_type", "authorization_code");
        String resultJson = HttpUtil.sendGet(URL, params);
        JSONObject json = JSONObject.parseObject(resultJson);
        if (!json.containsKey("errcode")) {
            // 拿到openid(用戶在該小程序的唯一用戶標(biāo)識(shí))
            String openId = (String)json.get("openid");

            // 之后的可以根據(jù)自己的業(yè)務(wù)進(jìn)行處理 比如:新增用戶...
            
            return R.ok("","登錄成功");
        } else {
            return R.fail(101,"登錄失??!");
        }
    }

3、util 層代碼。添加一個(gè)RestTemplateConfig配置類

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;

@Configuration
public class RestTemplateConfig {

    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

    @Bean
    public ClientHttpRequestFactory simpleClientHttpRequestFactory() {
        SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
        factory.setReadTimeout(5000);//ms
        factory.setConnectTimeout(15000);//ms
        return factory;
    }
}

4、Hultool的依賴

     <!-- hutool 工具包-->
     <dependency>
        <groupId>cn.hutool</groupId>
        <artifactId>hutool-all</artifactId>
        <version>5.2.4</version>
     </dependency>

? ? ? ? 最后說一下在開發(fā)中踩到的坑,就是獲取手機(jī)號(hào)返回的response這邊進(jìn)行了兩次的map轉(zhuǎn)換才拿到最終的手機(jī)號(hào),但是官方文檔中的返回格式是一個(gè)JSON對(duì)象,如果是一個(gè)JSON串的話就不需要這么麻煩了,所以各位大神可以在開發(fā)的時(shí)候優(yōu)化一下這部分!文章來源地址http://www.zghlxwxcb.cn/news/detail-445294.html

到了這里,關(guān)于Java - 微信小程序授權(quán)手機(jī)號(hào)登錄的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【微信小程序】如何獲取用戶手機(jī)號(hào)授權(quán)登錄

    【微信小程序】如何獲取用戶手機(jī)號(hào)授權(quán)登錄

    目前該接口針對(duì)非個(gè)人開發(fā)者,且完成了認(rèn)證的小程序開放(不包含海外主體),也就是說只針對(duì)企業(yè)認(rèn)證小程序開放。若用戶舉報(bào)較多或被發(fā)現(xiàn)在不必要場景下使用,微信有權(quán)永久回收該小程序的該接口權(quán)限。 在使用該接口時(shí),用戶可使用微信綁定手機(jī)號(hào)進(jìn)行授權(quán),也添加

    2024年02月16日
    瀏覽(28)
  • 微信小程序中如何獲取用戶手機(jī)號(hào)授權(quán)登錄

    隨著微信小程序的普及,許多應(yīng)用程序需要用戶登錄才能提供更好的服務(wù)。而獲取用戶手機(jī)號(hào)碼是驗(yàn)證用戶身份和確保賬戶安全的重要步驟之一。因此,在本文中,我們將介紹如何在微信小程序中實(shí)現(xiàn)手機(jī)號(hào)授權(quán)登錄。 首先,在小程序后臺(tái)開發(fā)設(shè)置中勾選“獲取手機(jī)號(hào)”選項(xiàng)

    2024年02月11日
    瀏覽(98)
  • uniapp微信小程序授權(quán)登錄并獲取手機(jī)號(hào)

    新版:前端要授權(quán)兩次,一次獲取用戶信息授權(quán)碼code,另外一次獲取用戶手機(jī)授權(quán)碼code,全部傳給后端。后端通過用戶信息授權(quán)碼獲取openid,通過手機(jī)授權(quán)碼獲取手機(jī)號(hào)碼。老版:前端傳給后端授權(quán)碼code和用戶手機(jī)授權(quán)回調(diào)?里的iv和encryptedData給后端,后端通過code獲取ope

    2024年02月11日
    瀏覽(30)
  • UNIAPP---實(shí)現(xiàn)微信小程序登錄授權(quán)和手機(jī)號(hào)授權(quán)(uniapp做微信小程序)

    UNIAPP---實(shí)現(xiàn)微信小程序登錄授權(quán)和手機(jī)號(hào)授權(quán)(uniapp做微信小程序)

    描述:uniapp開發(fā)小程序,先授權(quán)用戶信息后再出現(xiàn)手機(jī)號(hào)授權(quán)的頁面進(jìn)行手機(jī)號(hào)授權(quán)。完成后返回上一頁面并把信息存入后臺(tái)以及前臺(tái)緩存中,方便使用。 1.在uniapp的manifest.json進(jìn)行微信小程序配置 2.封裝request請求api.js(如果已封裝可跳過) 3.封裝微信授權(quán)登錄以及獲取手機(jī)

    2024年02月11日
    瀏覽(36)
  • 微信小程序:授權(quán)登錄獲取手機(jī)號(hào)及獲取基本信息等

    微信小程序:授權(quán)登錄獲取手機(jī)號(hào)及獲取基本信息等

    微信文檔 1)需要將 button 組件 open-type 的值設(shè)置為 getPhoneNumber,當(dāng)用戶點(diǎn)擊并同意之后,通過 getphonenumber 事件獲取回調(diào)信息; 2)將 getphonenumber 事件回調(diào)中的動(dòng)態(tài)令牌code傳到開發(fā)者后臺(tái),并在開發(fā)者后臺(tái)調(diào)用微信后臺(tái)提供的 phonenumber.getPhoneNumber 接口,消費(fèi)code來換取用戶手機(jī)

    2024年02月06日
    瀏覽(24)
  • 微信小程序?qū)崙?zhàn)十七:手機(jī)號(hào)授權(quán)登錄及報(bào)警推送

    微信小程序?qū)崙?zhàn)十七:手機(jī)號(hào)授權(quán)登錄及報(bào)警推送

    說明:根據(jù)項(xiàng)目需求我們需要開發(fā)一個(gè)報(bào)表小程序,用的帆軟報(bào)表生成頁面,通過webview集成url地址,需要用戶手機(jī)號(hào)授權(quán)登錄及接受項(xiàng)目中的預(yù)警信息并通過訂閱的方式長期持續(xù)多次的對(duì)用戶進(jìn)行推送。小程序已申請好企業(yè)版進(jìn)去分類屬于政府行業(yè),滿足這些條件可以免費(fèi)調(diào)

    2024年01月19日
    瀏覽(18)
  • 微信小程序授權(quán)登錄(含獲取基本信息及綁定的手機(jī)號(hào))

    微信小程序授權(quán)登錄(含獲取基本信息及綁定的手機(jī)號(hào))

    1、授權(quán)獲取微信個(gè)人信息 2、調(diào)用 wx.login() 獲取臨時(shí)登錄憑證code 3、用code調(diào)用接口換取用戶唯一標(biāo)識(shí)openId、用戶在微信開放平臺(tái)賬號(hào)下的唯一標(biāo)識(shí)unionId和會(huì)話密鑰session_key (1)前端獲取 注意點(diǎn) :正常開發(fā)中不會(huì)通過這種方法獲取,會(huì)通過后臺(tái)獲取調(diào)用微信公眾平臺(tái)接口獲

    2024年02月09日
    瀏覽(17)
  • .NET6使用微信小程序授權(quán)登錄,獲取手機(jī)號(hào)

    1.在appsettings配置你的小程序配置信息 2.請求接口時(shí)先獲取Access_token 3.授權(quán)時(shí)獲取手機(jī)號(hào) 4.微信接口要求必須使用Post請求方法 //小程序官方文檔 https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/user-info/phone-number/getPhoneNumber.html

    2024年02月13日
    瀏覽(23)
  • mpVue 微信小程序授權(quán)登錄流程(即登錄鑒權(quán)流程)及獲取手機(jī)號(hào)一鍵登錄教程(getPhoneNumber使用)

    mpVue 微信小程序授權(quán)登錄流程(即登錄鑒權(quán)流程)及獲取手機(jī)號(hào)一鍵登錄教程(getPhoneNumber使用)

    微信小程序登錄 鑒權(quán)流程 如下: 因 wx.getUserProfile 與 wx.getUserInfo 接口被收回了,都不能彈出授權(quán)窗口,只能使用頭像昵稱填寫能力去獲取微信用戶信息。 在鑒權(quán)頁面如下操作 : 1、在 onShow 中調(diào)用微信登錄 wx.login 獲取到唯一的code(用來獲取 openid ); 2、根據(jù) wx.login 獲取的c

    2024年02月12日
    瀏覽(28)
  • 微信小程序獲取手機(jī)號(hào)登錄(Java后端)

    微信小程序獲取手機(jī)號(hào)登錄(Java后端)

    1.前端請求getPhoneNumber方法獲取code傳給后端接口; 2.后端接口通過配置的appid、secretKey請求接口https://api.weixin.qq.com/cgi-bin/token獲取access_token參數(shù); 3.后端通過參數(shù)code和參數(shù)access_token,去請求接口https://api.weixin.qq.com/wxa/business/getuserphonenumber來獲取手機(jī)號(hào)。

    2024年02月11日
    瀏覽(94)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包