一、openId是什么凸丸?
openId是用戶在當前公眾號下的唯一標識(‘身份證’)拷邢,就是說通過這個openId,就能區(qū)分在這個公眾號下具體是哪個用戶屎慢。
二瞭稼、openId有什么用?
假如用戶A在當前公眾號下購買了一件商品腻惠,用戶的下單信息肯定要存儲到后臺數據庫环肘,那根據什么進行存儲呢?openId是用戶在當前公眾號下的唯一標識集灌,通過openId和用戶的下單購買信息進行鍵值對的數據綁定悔雹。那么我要查詢該用戶購買過什么商品,就能夠通過openId去查詢,并且數據是唯一的腌零,不會和另外的用戶數據有沖突梯找。
拓展:UnionID:一個商家或公司可能會有多個公眾號,假如用戶A同時都關注了這個公司下面的三個公眾號益涧,那么這個用戶就會有三個openId(一個公眾號就對應一個openID)初肉。如果作為開發(fā)者的我們,要對這個用戶在這三個公眾號下消費的數據進行匯總饰躲,我怎么獲取到這三份數據(同一用戶的)牙咏?答案是 UnionId,微信開發(fā)者文檔:如果開發(fā)者擁有多個移動應用嘹裂、網站應用和公眾帳號妄壶,可通過獲取用戶基本信息中的unionid來區(qū)分用戶的唯一性,因為同一用戶寄狼,對同一個微信開放平臺下的不同應用(移動應用丁寄、網站應用和公眾帳號),unionid是相同的泊愧。就是說如果要獲取用戶在同一公司不同公眾號下的數據伊磺,后臺表結構不但要關聯openId,還要關聯UnionId。
三删咱、怎么獲取openId屑埋?
(一)登錄微信公眾平臺后臺獲取公眾號的AppId,設置回調地址痰滋。
回調地址設置頁面向導:開發(fā)>接口權限>網頁服務>網頁授權>修改摘能。開發(fā)的項目需要放到已經解析好服務器域名的服務器下,同時把Mp***.text文件放到服務器根目錄下敲街,此時你的服務器必須能聯通外網也就是有公網IP,并且80端口是打開的团搞,可以使用阿里云等服務器,默認配置就可以了多艇。
(二)根據開發(fā)需要逻恐,靜默授權還是非靜默授權
① 靜默授權: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. + 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微信企業(yè)付款到零錢(十分鐘搞定)
轉載自 https://blog.csdn.net/angryjiji/article/details/98268754