微信小程序獲取用戶openid的圖文教程(含源碼)
小程序端直接獲?。?/h2>
實(shí)現(xiàn)代碼:直接簡單
wx.login({ success(res) { if (res.code) { //發(fā)起網(wǎng)絡(luò)請求 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í)行的動作}, fail(data){//失敗要執(zhí)行的動作 } }) } else {console.log('登錄失??!' + res.errMsg)} } })
問題: 前端直接暴露appid和appsecret
最開始使用這種方式,到了小程序發(fā)布的階段,因?yàn)橹苯颖┞蹲约旱腶ppid和appsecret在前端,經(jīng)過反編譯小程序會直接獲取到你的這些信息,并且不改的話也發(fā)布不了。。。之后就改成云函數(shù)獲取了
云函數(shù)獲取oppenid
方便并且沒有暴露信息的風(fēng)險:
步驟1:創(chuàng)建云函數(shù)
打開云開發(fā)控制臺:
選擇云函數(shù),創(chuàng)建一個函數(shù),函數(shù)名為get
步驟2:建立一個云函數(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 => { //你想要完成的功能,比如存儲openid到全局 that.globalData.openid = res.result.openid; } }) },
上線兩個星期左右,云函數(shù)收費(fèi)了。。。
后面還是使用后端完成openid的獲取
后端獲取openid
小程序端
wx.login({ success(res) { if (res.code) { //發(fā)起網(wǎng)絡(luò)請求 wx.request({ url: "你的接口"+res.code, method: "POST", success(res){//成功后的邏輯處理 } }) } else { wx.showToast({ title: '出現(xiàn)錯誤', icon: 'fail', duration: 5000 }) console.log('出現(xiàn)錯誤!' + 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ā)送請求 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對象) JSONObject json = JSONObject.parseObject(res); log.info("解析code請求結(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)行域名購買和備案的,以及后端https的配置。
總結(jié)
到此這篇關(guān)于微信小程序獲取用戶openid的文章就介紹到這了,更多相關(guān)微信小程序獲取用戶openid內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何使用JavaScript實(shí)現(xiàn)無縫滾動自動播放輪播圖效果
這篇文章主要介紹了如何使用JavaScript實(shí)現(xiàn)“無縫滾動 自動播放”輪播圖效果,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-08-08URL的參數(shù)中有加號傳值變?yōu)榭崭竦膯栴}(URL特殊字符)
今天在調(diào)試客戶端向服務(wù)器傳遞參數(shù)時,參數(shù)中的“+”全部變成了空格,原因是URL中默認(rèn)的將“+”號轉(zhuǎn)義了,經(jīng)過以下步驟解決了,需要的朋友可以參考一下2016-11-11jquery的.click()點(diǎn)擊事件為什么無效,on('click',function())如何使
jquery的.click()點(diǎn)擊事件,通常都是可以正常使用的,有時選中的選擇器被點(diǎn)擊時無法觸發(fā)回調(diào)函數(shù),這是為什么呢?改成on綁定click就可以了嗎?面對這樣的情況,on('click',function())應(yīng)該如何使用?2023-08-08js+html5實(shí)現(xiàn)手機(jī)九宮格密碼解鎖功能
這篇文章主要為大家詳細(xì)介紹了js+html5實(shí)現(xiàn)手機(jī)九宮格密碼解鎖功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-07-07『JavaScript』限制Input只能輸入數(shù)字實(shí)現(xiàn)思路及代碼
一個文字方塊必須限制只能輸入數(shù)字(或是小數(shù)點(diǎn))并且要支援 IE 和 Firefox,接下來為大家介紹下如何解決這個需求2013-04-04js中g(shù)etter和setter用法實(shí)例分析
這篇文章主要介紹了js中g(shù)etter和setter用法,結(jié)合實(shí)例形式分析了javascript中g(shù)etter和setter的功能、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2018-08-08