微信h5靜默和非靜默授權(quán)獲取用戶openId的方法和步驟
一、openId是什么?
openId是用戶在當(dāng)前公眾號(hào)下的唯一標(biāo)識(shí)(‘身份證'),就是說通過這個(gè)openId,就能區(qū)分在這個(gè)公眾號(hào)下具體是哪個(gè)用戶。
二、openId有什么用?
假如用戶A在當(dāng)前公眾號(hào)下購買了一件商品,用戶的下單信息肯定要存儲(chǔ)到后臺(tái)數(shù)據(jù)庫,那根據(jù)什么進(jìn)行存儲(chǔ)呢?openId是用戶在當(dāng)前公眾號(hào)下的唯一標(biāo)識(shí),通過openId和用戶的下單購買信息進(jìn)行鍵值對的數(shù)據(jù)綁定。那么我要查詢該用戶購買過什么商品,就能夠通過openId去查詢,并且數(shù)據(jù)是唯一的,不會(huì)和另外的用戶數(shù)據(jù)有沖突。
拓展:UnionID:一個(gè)商家或公司可能會(huì)有多個(gè)公眾號(hào),假如用戶A同時(shí)都關(guān)注了這個(gè)公司下面的三個(gè)公眾號(hào),那么這個(gè)用戶就會(huì)有三個(gè)openId(一個(gè)公眾號(hào)就對應(yīng)一個(gè)openID)。如果作為開發(fā)者的我們,要對這個(gè)用戶在這三個(gè)公眾號(hào)下消費(fèi)的數(shù)據(jù)進(jìn)行匯總,我怎么獲取到這三份數(shù)據(jù)(同一用戶的)?答案是 UnionId,微信開發(fā)者文檔:如果開發(fā)者擁有多個(gè)移動(dòng)應(yīng)用、網(wǎng)站應(yīng)用和公眾帳號(hào),可通過獲取用戶基本信息中的unionid來區(qū)分用戶的唯一性,因?yàn)橥挥脩?,對同一個(gè)微信開放平臺(tái)下的不同應(yīng)用(移動(dòng)應(yīng)用、網(wǎng)站應(yīng)用和公眾帳號(hào)),unionid是相同的。就是說如果要獲取用戶在同一公司不同公眾號(hào)下的數(shù)據(jù),后臺(tái)表結(jié)構(gòu)不但要關(guān)聯(lián)openId,還要關(guān)聯(lián)UnionId。
三、怎么獲取openId?
(一)登錄微信公眾平臺(tái)后臺(tái)獲取公眾號(hào)的AppId,設(shè)置回調(diào)地址。

回調(diào)地址設(shè)置頁面向?qū)В洪_發(fā)>接口權(quán)限>網(wǎng)頁服務(wù)>網(wǎng)頁授權(quán)>修改。開發(fā)的項(xiàng)目需要放到已經(jīng)解析好服務(wù)器域名的服務(wù)器下,同時(shí)把Mp***.text文件放到服務(wù)器根目錄下,此時(shí)你的服務(wù)器必須能聯(lián)通外網(wǎng)也就是有公網(wǎng)IP,并且80端口是打開的,可以使用阿里云等服務(wù)器,默認(rèn)配置就可以了。

(二)根據(jù)開發(fā)需要,靜默授權(quán)還是非靜默授權(quán)
① 靜默授權(quán):snsapi_base,沒有彈窗,只能獲取用戶的openId。
②非靜默授權(quán):snsapi_userinfo,有彈框彈出需要用戶手動(dòng)點(diǎn)擊確認(rèn)授權(quán)??梢垣@取openId,用戶的頭像、昵稱等

(三)前端代碼,配置的參數(shù)要一一對應(yīng),獲取code,并調(diào)用后臺(tái)接口,把code傳給后臺(tái)

redirect_uri,這個(gè)的意思是:授權(quán)完成后再重新回到當(dāng)前頁面(又刷新了一次頁面)
getUrlParam的方法,可以百度下,就是獲取頁面路徑的某個(gè)字段所對應(yīng)的參數(shù)。


如果配置參數(shù)一一對應(yīng),那么此時(shí)已經(jīng)通過回調(diào)地址刷新頁面后,你就會(huì)看到在地址欄中的code了。

(四)前端截取地址欄中的code后通過調(diào)接口把code傳給后臺(tái),后臺(tái)通過code獲取openId和用戶頭像昵稱等信息并返回給前端
為什么,前端不能一起把獲取code和獲取openId的操作一并做了,還要請求后臺(tái),讓后臺(tái)獲取openId?

(五)后臺(tái)通過 code、AppSecret(公眾號(hào)平臺(tái)后臺(tái)取得)請求微信鏈接獲取openId



前端具體代碼如下,可復(fù)制(記得把文中的 window.APPID改為自己公眾號(hào)的APPID)
<template>
<div></div>
</template>
<script>
import GetUrlParam from '@/assets/js/util/getUrlParam.js'
export default {
name: 'Index',
data () {
return {
}
},
created () {
this.getCode()
},
methods: {
getCode () { // 非靜默授權(quán),第一次有彈框
const code = GetUrlParam('code') // 截取路徑中的code,如果沒有就去微信授權(quán),如果已經(jīng)獲取到了就直接傳code給后臺(tái)獲取openId
const local = window.location.href
if (code == null || code === '') {
window.location. + window.APPID + '&redirect_uri=' + encodeURIComponent(local) + '&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect'
} else {
this.getOpenId(code) //把code傳給后臺(tái)獲取用戶信息
}
},
getOpenId (code) { // 通過code獲取 openId等用戶信息,/api/user/wechat/login 為后臺(tái)接口
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>
<style lang="less" scoped>
</style>
(六)通過openId做用戶的數(shù)據(jù)綁定或查詢等操作
前后端都獲取了openId后,就能通過openId做用戶數(shù)據(jù)的綁定和查詢了。
(七)補(bǔ)充說明
使用上述方法進(jìn)行的微信授權(quán),在手機(jī)端會(huì)有兩次空白頁跳轉(zhuǎn),時(shí)間雖然很短暫,但有些產(chǎn)品經(jīng)理會(huì)覺得這種體驗(yàn)不好(實(shí)在很欠揍)。解決方法是:可以把跳轉(zhuǎn)到微信獲取code的這段鏈接拼接好直接復(fù)制到 微信公眾平臺(tái) 后臺(tái)管理系統(tǒng)菜單列表里面。這樣點(diǎn)擊菜單,在回調(diào)頁通過截取url中的code,就能直接獲取到code了,就避免了多次跳轉(zhuǎn)的情況。


(八)解決微信授權(quán)成功進(jìn)入項(xiàng)目后,點(diǎn)擊手機(jī)物理返回鍵或返回會(huì)出現(xiàn)空白頁或者報(bào)錯(cuò)的情況,空白頁是因?yàn)槭跈?quán)頁就是空白頁??梢詤⒖嘉业牧硪黄恼拢?/p>
解決微信授權(quán)成功后點(diǎn)擊按返回鍵出現(xiàn)空白頁和報(bào)錯(cuò)的問題
http://www.dhdzp.com/article/188238.htm
到此這篇關(guān)于微信h5靜默和非靜默授權(quán)獲取用戶openId的方法和步驟的文章就介紹到這了,更多相關(guān)微信h5靜默和非靜默授獲取openId內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
利用BootStrap的Carousel.js實(shí)現(xiàn)輪播圖動(dòng)畫效果
這篇文章主要介紹了利用BootStrap的Carousel.js實(shí)現(xiàn)輪播圖動(dòng)畫效果的相關(guān)資料,需要的朋友可以參考下2016-12-12
微信小程序如何實(shí)現(xiàn)數(shù)據(jù)共享與方法共享詳解
這篇文章主要給大家介紹了關(guān)于微信小程序如何實(shí)現(xiàn)數(shù)據(jù)共享與方法共享的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-01-01
經(jīng)典的解除許多網(wǎng)站無法復(fù)制文字的絕招
經(jīng)典的解除許多網(wǎng)站無法復(fù)制文字的絕招...2006-12-12
使用JavaScript實(shí)現(xiàn)表格編輯器(實(shí)例講解)
下面小編就為大家?guī)硪黄褂肑avaScript實(shí)現(xiàn)表格編輯器(實(shí)例講解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-08-08
JavaScript采用遞歸算法計(jì)算階乘實(shí)例
這篇文章主要介紹了JavaScript采用遞歸算法計(jì)算階乘,簡單分析了javascript遞歸算法的相關(guān)使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-08-08
js 索引下標(biāo)之li集合綁定點(diǎn)擊事件
本文通過一段實(shí)例代碼給大家講解了js索引下標(biāo)之li集合綁定點(diǎn)擊事件的相關(guān)知識(shí),代碼簡單易懂,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧2018-01-01
uniapp實(shí)現(xiàn)單選組件覆蓋選中樣式的方法
最近使用uniapp開發(fā),有些組件渲染之后會(huì)生成一些標(biāo)簽,需要修改生成標(biāo)簽的樣式,下面通過實(shí)例代碼講解uniapp實(shí)現(xiàn)單選組件覆蓋選中樣式的方法,感興趣的朋友一起看看吧2024-03-03
JavaScript實(shí)現(xiàn)帶標(biāo)題的圖片輪播特效
這里給大家分享的是4屏帶標(biāo)題和文字描述的js圖片輪播代碼,完美兼容IE6。圖片滾動(dòng)切換,鼠標(biāo)放到數(shù)字選項(xiàng)卡即可切換圖片。點(diǎn)擊圖片跳轉(zhuǎn)到指定頁面,有需要的小伙伴可以參考下。2015-05-05

