微信小程序获取unionid

小程序能够获取到unionid的前提

1.小程序必须绑定在微信开放平台上,不绑定是没有的(PS:绑定开放平台需要开发者资质认证,认证收费的奥)

2.需要微信用户授权小程序

具体的代码实现(我在index.js的onLoad中实现的)

encryptedData的解密:模仿 官网给的例子中的 Node 的demo,使用 CryptoJS实现纯 js 下解密用户信(网上大部分都是用的java服务器解密的,但是我在调的时候,到了解密的那一句时,一直报错。我们现在用的是直接在微信代码里解密)

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

1.加入解密需要的文件,将 CryptoJS 的包放入 小程序的 utils 中(点击下载)(RdWXBizDataCrypt.js不在其中需要自己写,下面有附的代码,直接复制即可)

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()进行 base64解码 

varencryptedData = Crypto.util.base64ToBytes(encryptedData)

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

variv = Crypto.util.base64ToBytes(iv);

// 对称解密使用的算法为 AES-128-CBC,数据采用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中调用解密的

index.js:

//index.js

//这是关键 引入RdWXBizDataCrypt.js 这个JS文件是用来解密用的,下面会说到

//这个地方一定要注意了,路径一定要写正确,不要用系统提示的会报错,../../才是根路径

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

//获取应用实例

varapp = getApp()

varappId ="你的小程序id";

varsecret ='你的小程序secret ';

Page({

data: {

motto:'Hello World',

userInfo: {},

hasUserInfo:false,

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

openId:'',//用户唯一标识   

date:"1999-12-22",

unionId:'',

encryptedData:''},

//事件处理函数 

bindViewTap:function(){

wx.navigateTo({     

url:'../logs/logs'

}) 

},

onLoad:function(){

varthat =this;

wx.login({

success:res=>{

//发起网络请求

        wx.request({

//这是我自己的java服务器的接口,将login()获得的code发送的服务器换取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实例化WXBizDataCrypt()这个函数在下面解密用

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

            wx.getUserInfo({

success:function(res){

//拿到getUserInfo()取得的res.encryptedData, res.iv,调用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.当写到这里时在index中的解密方法(decryptData())能用了,现在可以运行一下了

在这再补充一下关于java服务器的事:

其实java做的事很简单,微信小程序有些接口不能用,比如https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code,这个接口现在就不能在小程序用了,但是他又是必须的,微信官方就让咱们用自己的服务器去用这个接口。

具体步骤 :

1.小程序请求自己的java服务器接口

2.java服务器收到请求,开始请求https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code  这个接口

3.java服务器将请求到的数据返回给微信小程序

4.完事

对就这么简单,java就做了一个中间过度的作用,这样就起到了安全作用,具体为什么安全我也不知道,官方说安全我也这样说了

获取unionid时走的坑

先看一下官方的说法

GUANFANG 



官方说的很好,在满足unionid的条件下接口https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code 返回unionid,可是自始至终我也没搞明白这个条件是啥,我一直以为微信开放品台没有给我分配unionid,但是当我用解密后才发现原来我有unionid,只是这个接口没返回。 所以,通过这个接口获得unionid的小伙伴千万别再这个上面死磕了,赶紧试试解密吧。我死磕两天,都绝望了。


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

grant_type=authorization_code

这个接口才返回unionid的小伙伴,麻烦评论一下谢谢。

我写了一个获取unionid的小demo,注释都写了,按照这个demo就能获取到,前提是我上面说的几个条件都具备。

复制这段内容后打开百度网盘手机App,操作更方便哦 链接:https://pan.baidu.com/s/1UPGZ1DH1JzwfOkzgcOwqZA 提取码:h14y


参考文档原文出处

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,558评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,002评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,024评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,144评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,255评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,295评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,068评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,478评论 1 305
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,789评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,965评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,649评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,267评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,982评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,800评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,847评论 2 351

推荐阅读更多精彩内容