微信小程序> unionid,微信小程序获取unionid走过的坑手把手教你获取

unionid,微信小程序获取unionid走过的坑手把手教你获取

浏览量:560 时间: 来源:a493001894
小程序能够获取到unionid的前提1.小程序必须绑定在微信开放平台上,不绑定是没有的(PS:绑定开放平台需要开发者资质认证,认证收费的奥)
2.需要微信用户授权小程序
具体的代码实现(我在index.js的onLoad中实现的)encryptedData的解密:模仿官网给的例子中的Node的demo,使用实现纯js下解密用户信(网上大部分都是用的java服务器解密的,但是我在调的时候,到了解密的那一句时,一直报错。我们现在用的是直接在微信代码里解密)
借鉴的https://www.cnblogs.com/cai-rd/p/6816849.html
1.加入解密需要的文件,将CryptoJS的包放入小程序的utils中()(RdWXBizDataCrypt.js不在其中需要自己写,下面有附的代码,直接复制即可)
RdWXBizDataCrypt.js/Createdbyrdon2017/5/4.///引入CryptoJSvarCrypto=require('/cryptojs.js').Crypto;varapp=getApp();functionRdWXBizDataCrypt(appId,sessionKey){this.appId=appIdthis.sessionKey=sessionKey}RdWXBizDataCrypt.prototype.decryptData=function(encryptedData,iv){//base64decode:使用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:'HelloWorld',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_keyurl:'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.unionIdconsole.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服务器收到请求,开始请求
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就能获取到,前提是我上面说的几个条件都具备。CSDN着实是让人恶心,为了钱钱钱,想尽了法子压榨,剥削。又把积分改成了二十五,我上传到了百度网盘,免费分享给大家,大家一定要保持程序员开元的优良传统。复制这段内容后打开百度网盘手机App,操作更方便哦链接:https://pan.baidu.com/s/1UPGZ1DH1JzwfOkzgcOwqZA提取码:h14y

版权声明

即速应用倡导尊重与保护知识产权。如发现本站文章存在版权问题,烦请提供版权疑问、身份证明、版权证明、联系方式等发邮件至197452366@qq.com ,我们将及时处理。本站文章仅作分享交流用途,作者观点不等同于即速应用观点。用户与作者的任何交易与本站无关,请知悉。

产品经理

手机 : 13312967497

擅长 : 小程序流量变现

扫码领取礼包

热门模板

  • 头条
  • 搜狐
  • 微博
  • 百家
  • 一点资讯
  • 知乎