微信小程序獲取unionid

小程序能夠獲取到unionid的前提

1.小程序必須綁定在微信開放平臺(tái)上剂跟,不綁定是沒有的(PS:綁定開放平臺(tái)需要開發(fā)者資質(zhì)認(rèn)證减途,認(rèn)證收費(fèi)的奧)

2.需要微信用戶授權(quán)小程序

具體的代碼實(shí)現(xiàn)(我在index.js的onLoad中實(shí)現(xiàn)的)

encryptedData的解密:模仿 官網(wǎng)給的例子中的 Node 的demo,使用?CryptoJS實(shí)現(xiàn)純 js 下解密用戶信(網(wǎng)上大部分都是用的java服務(wù)器解密的曹洽,但是我在調(diào)的時(shí)候鳍置,到了解密的那一句時(shí),一直報(bào)錯(cuò)送淆。我們現(xiàn)在用的是直接在微信代碼里解密)

借鑒的 https://www.cnblogs.com/cai-rd/p/6816849.html

1.加入解密需要的文件税产,將 CryptoJS 的包放入 小程序的 utils 中(點(diǎn)擊下載)(RdWXBizDataCrypt.js不在其中需要自己寫,下面有附的代碼偷崩,直接復(fù)制即可)

RdWXBizDataCrypt.js

/**

* Created by rd on 2017/5/4.

*/

// 引入CryptoJSvar

Crypto =require('/cryptojs.js').Crypto;

varapp = getApp();

functionRdWXBizDataCrypt(appId, sessionKey){

this.appId = appId

this.sessionKey = sessionKey

}

RdWXBizDataCrypt.prototype.decryptData =function(encryptedData, iv){

// base64 decode :使用 CryptoJS 中 Crypto.util.base64ToBytes()進(jìn)行 base64解碼?

varencryptedData = Crypto.util.base64ToBytes(encryptedData)

varkey = Crypto.util.base64ToBytes(this.sessionKey);

variv = Crypto.util.base64ToBytes(iv);

// 對稱解密使用的算法為 AES-128-CBC辟拷,數(shù)據(jù)采用PKCS#7填充?

varmode =newCrypto.mode.CBC(Crypto.pad.pkcs7);

try{

// 解密? ?

varbytes = Crypto.AES.decrypt(encryptedData, key, {

asBpytes:true,

iv: iv,

mode: mode

});? ?

vardecryptResult =JSON.parse(bytes);

}catch(err) {

console.log(err)

}?

if(decryptResult.watermark.appid !==this.appId) {

console.log(err)

}?

returndecryptResult

}

module.exports = RdWXBizDataCrypt


2.我在index.js中調(diào)用解密的

index.js:

//index.js

//這是關(guān)鍵 引入RdWXBizDataCrypt.js 這個(gè)JS文件是用來解密用的,下面會(huì)說到

//這個(gè)地方一定要注意了阐斜,路徑一定要寫正確衫冻,不要用系統(tǒng)提示的會(huì)報(bào)錯(cuò),../../才是根路徑

varWXBizDataCrypt =require('../../utils/cryptojs/RdWXBizDataCrypt.js');

//獲取應(yīng)用實(shí)例

varapp = getApp()

varappId ="你的小程序id";

varsecret ='你的小程序secret ';

Page({

data: {

motto:'Hello World',

userInfo: {},

hasUserInfo:false,

canIUse: wx.canIUse('button.open-type.getUserInfo'),

openId:'',//用戶唯一標(biāo)識(shí)? ?

date:"1999-12-22",

unionId:'',

encryptedData:''},

//事件處理函數(shù)?

bindViewTap:function(){

wx.navigateTo({? ? ?

url:'../logs/logs'

})?

},

onLoad:function(){

varthat =this;

wx.login({

success:res=>{

//發(fā)起網(wǎng)絡(luò)請求

? ? ? ? wx.request({

//這是我自己的java服務(wù)器的接口谒出,將login()獲得的code發(fā)送的服務(wù)器換取session_key

url:'https://abc.anzhonghui.xyz/WxtestServlet/UserController?method=getUnionId',

data: {

js_code: res.code,

? ? ? ? ? },

header: {

'content-type':'application/x-www-form-urlencoded'

? ? ? ? ? },

method:'GET',

success:function(res){

console.log(res.data.session_key)

//拿到session_key實(shí)例化WXBizDataCrypt()這個(gè)函數(shù)在下面解密用

varpc =newWXBizDataCrypt(appId, res.data.session_key)

? ? ? ? ? ? wx.getUserInfo({

success:function(res){

//拿到getUserInfo()取得的res.encryptedData, res.iv隅俘,調(diào)用decryptData()解密

vardata = pc.decryptData(res.encryptedData, res.iv)

// data.unionId就是咱們要的東西了

? ? ? ? ? ? ? ? app.globalData.unionid = data.unionId

console.log('解密后 unionid: ', app.globalData.unionid)

? ? ? ? ? ? ? ? ? },

fail:function(res){

console.log(res)

? ? ? ? ? ? ? }

? ? ? ? ? ? })

? ? ? ? ? },

fail:function(res){ },

complete:function(res){ }

? ? ? ? });

? ? ? }

? ? })

}



3.當(dāng)寫到這里時(shí)在index中的解密方法(decryptData())能用了,現(xiàn)在可以運(yùn)行一下了

在這再補(bǔ)充一下關(guān)于java服務(wù)器的事:

其實(shí)java做的事很簡單笤喳,微信小程序有些接口不能用为居,比如https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code,這個(gè)接口現(xiàn)在就不能在小程序用了杀狡,但是他又是必須的蒙畴,微信官方就讓咱們用自己的服務(wù)器去用這個(gè)接口。

具體步驟 :

1.小程序請求自己的java服務(wù)器接口

2.java服務(wù)器收到請求捣卤,開始請求https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code? 這個(gè)接口

3.java服務(wù)器將請求到的數(shù)據(jù)返回給微信小程序

4.完事

對就這么簡單忍抽,java就做了一個(gè)中間過度的作用,這樣就起到了安全作用董朝,具體為什么安全我也不知道鸠项,官方說安全我也這樣說了

獲取unionid時(shí)走的坑

先看一下官方的說法

GUANFANG?



官方說的很好,在滿足unionid的條件下接口https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code 返回unionid子姜,可是自始至終我也沒搞明白這個(gè)條件是啥祟绊,我一直以為微信開放品臺(tái)沒有給我分配unionid,但是當(dāng)我用解密后才發(fā)現(xiàn)原來我有unionid哥捕,只是這個(gè)接口沒返回牧抽。 所以,通過這個(gè)接口獲得unionid的小伙伴千萬別再這個(gè)上面死磕了扬舒,趕緊試試解密吧凫佛。我死磕兩天孕惜,都絕望了晨炕。


有知道什么時(shí)候https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&

grant_type=authorization_code

這個(gè)接口才返回unionid的小伙伴,麻煩評論一下謝謝削罩。

我寫了一個(gè)獲取unionid的小demo费奸,注釋都寫了弥激,按照這個(gè)demo就能獲取到,前提是我上面說的幾個(gè)條件都具備货邓。

復(fù)制這段內(nèi)容后打開百度網(wǎng)盤手機(jī)App,操作更方便哦 鏈接:https://pan.baidu.com/s/1UPGZ1DH1JzwfOkzgcOwqZA 提取碼:h14y


參考文檔原文出處

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末职辨,一起剝皮案震驚了整個(gè)濱河市戈二,隨后出現(xiàn)的幾起案子觉吭,更是在濱河造成了極大的恐慌,老刑警劉巖鲜滩,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件伴鳖,死亡現(xiàn)場離奇詭異,居然都是意外死亡徙硅,警方通過查閱死者的電腦和手機(jī)榜聂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進(jìn)店門嗓蘑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來桩皿,“玉大人,你說我怎么就攤上這事拒贱》疰遥” “怎么了岩调?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵缰揪,是天一觀的道長钝腺。 經(jīng)常有香客問我,道長艳狐,這世上最難降的妖魔是什么毫目? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮空猜,結(jié)果婚禮上辈毯,老公的妹妹穿的比我還像新娘谆沃。我一直安慰自己入客,他們只是感情好桌硫,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布夭咬。 她就那樣靜靜地躺著,像睡著了一般卓舵。 火紅的嫁衣襯著肌膚如雪掏湾。 梳的紋絲不亂的頭發(fā)上融击,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天匣屡,我揣著相機(jī)與錄音拇涤,去河邊找鬼捣作。 笑死,一個(gè)胖子當(dāng)著我的面吹牛鹅士,可吹牛的內(nèi)容都是我干的券躁。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼掉盅,長吁一口氣:“原來是場噩夢啊……” “哼也拜!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起怔接,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤搪泳,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后扼脐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體岸军,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年瓦侮,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了艰赞。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,622評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡肚吏,死狀恐怖方妖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情罚攀,我是刑警寧澤党觅,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站斋泄,受9級特大地震影響杯瞻,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜炫掐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一魁莉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦旗唁、人聲如沸畦浓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽讶请。三九已至,卻和暖如春电谣,著一層夾襖步出監(jiān)牢的瞬間秽梅,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工剿牺, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人环壤。 一個(gè)月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓晒来,卻偏偏與公主長得像,于是被迫代替她去往敵國和親郑现。 傳聞我的和親對象是個(gè)殘疾皇子湃崩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容