1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 微信小程序获取unionID思路整理

微信小程序获取unionID思路整理

时间:2019-09-12 00:15:31

相关推荐

微信小程序获取unionID思路整理

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

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

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

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

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

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

RdWXBizDataCrypt.js

// 引入CryptoJSvar Crypto = require('/cryptojs.js').Crypto;var app = getApp();function RdWXBizDataCrypt(appId, sessionKey) {this.appId = appIdthis.sessionKey = sessionKey}RdWXBizDataCrypt.prototype.decryptData = function (encryptedData, iv) {// base64 decode :使用 CryptoJS 中 Crypto.util.base64ToBytes()进行 base64解码var encryptedData = Crypto.util.base64ToBytes(encryptedData)var key = Crypto.util.base64ToBytes(this.sessionKey);var iv = Crypto.util.base64ToBytes(iv);// 对称解密使用的算法为 AES-128-CBC,数据采用PKCS#7填充var mode = new Crypto.mode.CBC(Crypto.pad.pkcs7);try {// 解密var bytes = Crypto.AES.decrypt(encryptedData, key, {asBpytes: true,iv: iv,mode: mode});var decryptResult = JSON.parse(bytes);} catch (err) {console.log(err)}if (decryptResult.watermark.appid !== this.appId) {console.log(err)}return decryptResult}module.exports = RdWXBizDataCrypt

2.index.js页面中调用解密演示

index.js

//获取应用实例var app = getApp()var util = require('../../utils/util.js');var WXBizDataCrypt = require('../../utils/cryptojs/RdWXBizDataCrypt.js');var appId = '你的微信appid';var secret = '你的微信secret';Page({onLoad: function (options) {var that = thissetInterval(function () {that.setData({nowTemp: app.globalData.nowTemp,})}, 1000) //循环时间 这里是1wx.login({success: res => {//发起网络请求,这里可能需要服务器来求情https://api./sns/jscode2session,不过刚才我试了试,开发者模式下也能获取到,好久不玩微信小程序了,不知道现在更新成什么样,你试一下wx.request({url: 'https://api./sns/jscode2session',data: {appid: appId,secret: secret,js_code: res.code,grant_type: 'authorization_code'},header: {"Content-Type": "application/x-www-form-urlencoded"},method: 'GET',success: function (res) {var pc = new WXBizDataCrypt(appId, res.data.session_key)wx.getUserInfo({success: function (res) {var data = pc.decryptData(res.encryptedData, res.iv)app.globalData.unionid = data.unionId//解密后的idconsole.log('解密后 unionid: ', app.globalData.unionid)}})},fail: function (res) { },complete: function (res) { }});}})},})

3.当写到这里时在index中的解密方法(decryptData())能用了,现在可以运行一下了

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

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

具体步骤 :

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

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

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

4.完事

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

获取unionid时注意

附录

微信官方文档

https://developers./miniprogram/dev/framework/open-ability/getPhoneNumber.html

https://developers./miniprogram/dev/framework/open-ability/signature.html#%E5%8A%A0%E5%AF%86%E6%95%B0%E6%8D%AE%E8%A7%A3%E5%AF%86%E7%AE%97%E6%B3%95

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。