微信授權獲取用戶openId的方法和步驟

原文鏈接:https://blog.csdn.net/qq_35430000/article/details/79299529

微信h5靜默、非靜默授權獲取用戶openId的方法和步驟:
一、openId是什麼?
openId是用戶在當前公衆號下的唯一標識(‘身份證’),就是說通過這個openId,就能區分在這個公衆號下具體是哪個用戶。

二、openId有什麼用?

假如用戶A在當前公衆號下購買了一件商品,用戶的下單信息肯定要存儲到後臺數據庫,那根據什麼進行存儲呢?openId是用戶在當前公衆號下的唯一標識,通過openId和用戶的下單購買信息進行鍵值對的數據綁定。那麼我要查詢該用戶購買過什麼商品,就能夠通過openId去查詢,並且數據是唯一的,不會和另外的用戶數據有衝突。

拓展:UnionID:一個商家或公司可能會有多個公衆號,假如用戶A同時都關注了這個公司下面的三個公衆號,那麼這個用戶就會有三個openId(一個公衆號就對應一個openID)。如果作爲開發者的我們,要對這個用戶在這三個公衆號下消費的數據進行彙總,我怎麼獲取到這三份數據(同一用戶的)?答案是 UnionId,微信開發者文檔:如果開發者擁有多個移動應用、網站應用和公衆帳號,可通過獲取用戶基本信息中的unionid來區分用戶的唯一性,因爲同一用戶,對同一個微信開放平臺下的不同應用(移動應用、網站應用和公衆帳號),unionid是相同的。就是說如果要獲取用戶在同一公司不同公衆號下的數據,後臺表結構不但要關聯openId,還要關聯UnionId。

三、怎麼獲取openId?

(一)登錄微信公衆平臺後臺獲取公衆號的AppId,設置回調地址。
在這裏插入圖片描述
回調地址設置頁面嚮導:開發>接口權限>網頁服務>網頁授權>修改。開發的項目需要放到已經解析好服務器域名的服務器下,同時把Mp***.text文件放到服務器根目錄下,此時你的服務器必須能聯通外網也就是有公網IP,並且80端口是打開的,可以使用阿里雲等服務器,默認配置就可以了。
在這裏插入圖片描述

(二)根據開發需要,靜默授權還是非靜默授權

① 靜默授權:snsapi_base,沒有彈窗,只能獲取用戶的openId。

②非靜默授權:snsapi_userinfo,有彈框彈出需要用戶手動點擊確認授權。可以獲取openId,用戶的頭像、暱稱等
在這裏插入圖片描述
(三)前端代碼,配置的參數要一一對應,獲取code,並調用後臺接口,把code傳給後臺
在這裏插入圖片描述
redirect_uri,這個的意思是:授權完成後再重新回到當前頁面(又刷新了一次頁面)

getUrlParam的方法,可以百度下,就是獲取頁面路徑的某個字段所對應的參數。
在這裏插入圖片描述在這裏插入圖片描述

如果配置參數一一對應,那麼此時已經通過回調地址刷新頁面後,你就會看到在地址欄中的code了。
在這裏插入圖片描述

(四)前端截取地址欄中的code後通過調接口把code傳給後臺,後臺通過code獲取openId和用戶頭像暱稱等信息並返回給前端

爲什麼,前端不能一起把獲取code和獲取openId的操作一併做了,還要請求後臺,讓後臺獲取openId?

(五)後臺通過 code、AppSecret(公衆號平臺後臺取得)請求微信鏈接獲取openId
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

前端具體代碼如下,可複製(記得把文中的 window.APPID改爲自己公衆號的APPID)

<script>
import GetUrlParam from '@/assets/js/util/getUrlParam.js'
export default {
    name: 'Index',
    data () {
        return {
        }
    },
    created () {
        this.getCode()
    },
    methods: {
        getCode () { // 非靜默授權,第一次有彈框
            const code = GetUrlParam('code') // 截取路徑中的code,如果沒有就去微信授權,如果已經獲取到了就直接傳code給後臺獲取openId
            const local = window.location.href
            if (code == null || code === '') {
                window.location.href = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' + window.APPID + '&redirect_uri=' + encodeURIComponent(local) + '&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect'
            } else {
                this.getOpenId(code) //把code傳給後臺獲取用戶信息
            }
        },
        getOpenId (code) { // 通過code獲取 openId等用戶信息,/api/user/wechat/login 爲後臺接口
            let _this = this
            this.$http.post('/api/user/wechat/login', {code: code}).then((res) => {
                let datas = res.data
                if (datas.code === 0 ) {
                    console.log('成功')
                }
            }).catch((error) => {
                console.log(error)
            })
        }
    }
}
</script>

(六)通過openId做用戶的數據綁定或查詢等操作

前後端都獲取了openId後,就能通過openId做用戶數據的綁定和查詢了。

歷史文章:
JAVA微信企業付款到零錢(十分鐘搞定)
微信授權獲取用戶openId的方法和步驟
一個微信號同時支持多個環境網頁授權
微信兩種簽名算法MD5和HMAC-SHA256

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章