溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Java后端如何實(shí)現(xiàn)使用uni-app獲取微信小程序openid

發(fā)布時(shí)間:2021-11-10 09:46:01 來(lái)源:億速云 閱讀:530 作者:柒染 欄目:大數(shù)據(jù)

這篇文章將為大家詳細(xì)講解有關(guān)Java后端如何實(shí)現(xiàn)使用uni-app獲取微信小程序openid,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

前言

這個(gè)是純前端(uniapp)獲取openid的:https://my.oschina.net/u/4284277/blog/3168782

但是這個(gè)有一個(gè)問(wèn)題就是小程序正式上線后無(wú)法拿到openid,所以更新了下面這個(gè)后端(Java)獲取的,希望對(duì)你有幫助。

一、 介紹openid

微信開(kāi)發(fā)時(shí), 用戶使用小程序需要授權(quán), 這時(shí)就要用到openid進(jìn)行綁定這個(gè)用戶。 openid是微信用戶在公眾號(hào)appid下的唯一用戶標(biāo)識(shí)(appid不同,則獲取到的openid就不同),可用于永久標(biāo)記一個(gè)用戶,同時(shí)也是微信JSAPI支付的必傳參數(shù)。

1. 為什么要使用openid呢?

openid是指這個(gè)用戶在某一個(gè)小程序中授權(quán)后的唯一標(biāo)識(shí)(比如你的身份證)

2. 如果不使用會(huì)帶來(lái)什么問(wèn)題呢?

第一次授權(quán)時(shí)將用戶數(shù)據(jù)保存到數(shù)據(jù)庫(kù), 然后用戶把緩存清理了, 第二次授權(quán)的時(shí)候我們就無(wú)法知道這個(gè)用戶是否授權(quán)過(guò)。用戶就會(huì)重新保存一份新的數(shù)據(jù)進(jìn)數(shù)據(jù)庫(kù)。這是不符合正常邏輯的,因?yàn)槿绻撚脩糍I(mǎi)過(guò)東西,再次授權(quán),東西都看不到了,會(huì)像新的號(hào)一樣。當(dāng)然了, 有的設(shè)計(jì)是有自己的記錄方式的,比如需要注冊(cè)登錄。

3. openid如何獲?。?/h3>

需要用到wx指定的接口

二、 實(shí)現(xiàn)

1. uniapp

//@author 兮赫
uni.login({
   success: res => {
     //code值(5分鐘失效)
     console.info(res.code);
     uni.request({
        //改成自己的服務(wù)地址
        url:'http://192.168.1.4:10010/wx/getOpenid/'+res.code,
        method:'GET',
        success: (res) => {
           //這里就拿到openid了,不過(guò)一般都是直接在后端使用了,不需要拿到前端了,我就是為了做個(gè)演示。
           console.info(res);
        }
     })
   }
});

2. pom依賴

HttpClient的依賴和json轉(zhuǎn)換的依賴

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.54</version>
</dependency>
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.10</version>
</dependency>

3. Java接口

/**
 * @author 兮赫
 * 微信controller
 */
@RestController
@RequestMapping("/wx")
public class WChat {
    //小程序appid ,需要改為真實(shí)的
    private final static String APPID = "wx3599fdagf87366c9";

    //小程序secret ,需要改為真實(shí)的
    private final static String SECRET = "1a5567978djhs875ss8s2397er57jce";

    /**
     * 通過(guò) appid & secret & code 獲取 openid
     * @param code
     */
    @GetMapping("/getOpenid/{code}")
    public String getOpenid(@PathVariable String code) throws IOException {
        //wx接口路徑
        String url = "https://api.weixin.qq.com/sns/jscode2session?grant_type=authorization_code&" +
                    "appid=" + APPID + "&secret=" + SECRET + "&js_code=" + code;
        //使用HttpClient發(fā)送請(qǐng)求
        CloseableHttpClient httpclient = HttpClients.createDefault();
        //發(fā)送Get請(qǐng)求
        HttpGet request = new HttpGet(url);
        request.addHeader("Content-Type", "application/json");
        //獲得響應(yīng)
        CloseableHttpResponse response = httpclient.execute(request);
        //拿到響應(yīng)體
        HttpEntity httpEntity = response.getEntity();
        //使用工具轉(zhuǎn)換
        String result = EntityUtils.toString(httpEntity, "UTF-8");// 轉(zhuǎn)成string
        JSONObject jsonObject = JSONObject.parseObject(result);
        System.out.println(jsonObject);//拿到的所有內(nèi)容
        String openid = jsonObject.get("openid").toString();
        System.out.println(openid);//拿到的openid
        return openid;
    }
}

關(guān)于Java后端如何實(shí)現(xiàn)使用uni-app獲取微信小程序openid就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI