微信小程序獲取用戶openid的圖文教程(含源碼)
小程序端直接獲?。?/h2>
實(shí)現(xiàn)代碼:直接簡(jiǎn)單
wx.login({
success(res) {
if (res.code) {
//發(fā)起網(wǎng)絡(luò)請(qǐng)求
wx.request({
//這里填你自己的appid 和 wxspSecret
url: "https://api.weixin.qq.com/sns/jscode2session?appid=" + wxspAppid+"&secret=" + wxspSecret + "&js_code=" + res.code + "&grant_type=authorization_code" ,
method: "POST",
success(res){//獲取成功要執(zhí)行的動(dòng)作},
fail(data){//失敗要執(zhí)行的動(dòng)作 }
})
} else {console.log('登錄失?。? + res.errMsg)}
}
})
問題: 前端直接暴露appid和appsecret
最開始使用這種方式,到了小程序發(fā)布的階段,因?yàn)橹苯颖┞蹲约旱腶ppid和appsecret在前端,經(jīng)過反編譯小程序會(huì)直接獲取到你的這些信息,并且不改的話也發(fā)布不了。。。之后就改成云函數(shù)獲取了
云函數(shù)獲取oppenid
方便并且沒有暴露信息的風(fēng)險(xiǎn):
步驟1:創(chuàng)建云函數(shù)
打開云開發(fā)控制臺(tái):

選擇云函數(shù),創(chuàng)建一個(gè)函數(shù),函數(shù)名為get

步驟2:建立一個(gè)云函數(shù),命名為剛剛的get

步驟3:
index.js
// 云函數(shù)入口函數(shù)
exports.main = async (event, context) => {
const wxContext = cloud.getWXContext()
console.log("OPENID",wxContext.OPENID);
return {
event,
openid: wxContext.OPENID,
appid: wxContext.APPID,
unionid: wxContext.UNIONID,
}
}
config.json
{
"permissions": {
"openapi": [
]
}
}
在你需要獲取的地方直接調(diào)用即可,比如在app.js中
getOpenid() {
let that = this;
wx.cloud.callFunction({
name: 'get',
complete: res => {
//你想要完成的功能,比如存儲(chǔ)openid到全局
that.globalData.openid = res.result.openid;
}
})
},
上線兩個(gè)星期左右,云函數(shù)收費(fèi)了。。。
后面還是使用后端完成openid的獲取
后端獲取openid
小程序端
wx.login({
success(res) {
if (res.code) {
//發(fā)起網(wǎng)絡(luò)請(qǐng)求
wx.request({
url: "你的接口"+res.code,
method: "POST",
success(res){//成功后的邏輯處理 }
})
} else {
wx.showToast({
title: '出現(xiàn)錯(cuò)誤',
icon: 'fail',
duration: 5000
})
console.log('出現(xiàn)錯(cuò)誤!' + res.errMsg)
}
}
})
后端(springboot)
@PostMapping("你的接口")
public Response decodeOpenid(HttpServletResponse response, @RequestParam String code){
response.setContentType("text/html;charset=UTF-8");
response.setCharacterEncoding("utf-8");
String wxspAppid = "你的appid";
String wxspSecret = "你的密鑰";
try {
Map<String, String> map = new HashMap<>();
// 授權(quán)(必填)固定
String grant_type = "authorization_code";
// 發(fā)送請(qǐng)求
String res = HttpRequest.post("https://api.weixin.qq.com/sns/jscode2session")
.form("appid",wxspAppid)
.form("secret",wxspSecret)
.form("js_code",code)
.form("grant_type",grant_type)
.execute().body();
// 解析相應(yīng)內(nèi)容(轉(zhuǎn)換成json對(duì)象)
JSONObject json = JSONObject.parseObject(res);
log.info("解析code請(qǐng)求結(jié)果:"+json.toString());
//獲取openid
String openid = json.getString("openid");
log.info("openid:"+openid);
return Response.success(openid);
} catch (Exception e) {
e.printStackTrace();
return Response.fail("openId生成失敗");
}
}
需要導(dǎo)入hutools工具包和slf4j的依賴
ps: 微信小程序如果要發(fā)布的話是需要進(jìn)行域名購(gòu)買和備案的,以及后端https的配置。
總結(jié)
到此這篇關(guān)于微信小程序獲取用戶openid的文章就介紹到這了,更多相關(guān)微信小程序獲取用戶openid內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
textarea不能通過maxlength屬性來限制字?jǐn)?shù)的解決方法
textarea稱文本域,又稱文本區(qū),其不能通過maxlength屬性來限制字?jǐn)?shù),為此必須尋求其他方法來加以限制以達(dá)到預(yù)設(shè)的需求2014-09-09
JS使用正則實(shí)現(xiàn)去掉字符串左右空格的方法
這篇文章主要介紹了JS使用正則實(shí)現(xiàn)去掉字符串左右空格的方法,結(jié)合實(shí)例形式分析了JS針對(duì)首尾匹配及空格匹配的簡(jiǎn)單實(shí)現(xiàn)技巧,需要的朋友可以參考下2016-12-12
Typescript模塊的導(dǎo)入導(dǎo)出與繼承方式
這篇文章主要介紹了Typescript模塊的導(dǎo)入導(dǎo)出與繼承方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09
在JavaScript中call()與apply()區(qū)別
這篇文章主要介紹了在JavaScript中call()與apply()區(qū)別 的相關(guān)資料,需要的朋友可以參考下2016-01-01
JavaScript獲取網(wǎng)頁(yè)的寬高及如何兼容詳解
這篇文章主要給大家介紹了關(guān)于JavaScript獲取網(wǎng)頁(yè)的寬高及如何兼容的相關(guān)資料,主要介紹了三個(gè)方式,分別是window.innerWidth / window.innerHeight、document.documentElement.clientWidth以及混雜模式/怪異模式 下的寬高的獲取,需要的朋友可以參考下2021-05-05
JS實(shí)現(xiàn)iframe自適應(yīng)高度的方法示例
這篇文章主要介紹了JS實(shí)現(xiàn)iframe自適應(yīng)高度的方法,結(jié)合實(shí)例形式分析了JS實(shí)現(xiàn)iframe高度自適應(yīng)的實(shí)現(xiàn)技巧,并給出了項(xiàng)目示例供大家參考,需要的朋友可以參考下2017-01-01
javascript中的注釋使用與注意事項(xiàng)小結(jié)
在javascript中有兩種注釋方式,單行注釋與多行注釋。2011-09-09

