前段时间因工作需要,研究了一下微信小程序Java服务端开发,今天简单整理一下相关步骤。
1、获取code、encryptedData、iv:
code需要前端通过调用微信api --> wx.login(OBJECT)获取。
encryptedData和iv需要前端通过调用微信api --> wx.getUserInfo(OBJECT)获取。
其中encryptedData是包含用户信息的加密数据,需要服务端解密。
2、服务端获取sessionkey和openid:
首先,服务端拿到code以后,先通过调用微信api接口:
https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
来换取sessionkey。
其中的appid、secret都是申请小程序时微信已经分配好的常量。js_code是上面步骤中从前端获取。
调用接口后,会返回sessionkey和openid。
3、解密用户信息:
根据官方文档,解密数据算法如下:
对称解密使用的算法为 AES-128-CBC,数据采用PKCS#7填充。 对称解密的目标密文为 Base64_Decode(encryptedData)。 对称解密秘钥 aeskey = Base64_Decode(session_key), aeskey 是16字节。 对称解密算法初始向量 为Base64_Decode(iv),其中iv由数据接口返回。
网上查找了一些资料,由于jdk本身不支持aes-128-cbc pksc#7算法,所以如果使用java语言进行解密,需要下载算法工具包。官网地址如下 http://www.bouncycastle.org/latest_releases.html 。
最后,根据上面的解密算法步骤,Java版实现代码如下:
byte[] encryptedDataBytes = new BASE64Decoder().decodeBuffer(encryptedData); byte[] keyBytes = new BASE64Decoder().decodeBuffer(sessionKey); byte[] ivBytes = new BASE64Decoder().decodeBuffer(iv); AlgorithmParameters params = AlgorithmParameters.getInstance("AES"); params.init(new IvParameterSpec(ivBytes)); Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); Key secretKey = new SecretKeySpec(keyBytes,"AES"); Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding"); cipher.init(Cipher.DECRYPT_MODE,secretKey,params); byte[] data = cipher.doFinal(encryptedDataBytes); String decryptedData = new String(data,"UTF-8");
解密后的decryptedData是一个json,
{ "openId": "OPENID", "nickName": "NICKNAME", "gender": GENDER, "city": "CITY", "province": "PROVINCE", "country": "COUNTRY", "avatarUrl": "AVATARURL", "unionId": "UNIONID", "watermark": { "appid":"APPID", "timestamp":TIMESTAMP } }
其中的unionId,可以唯一标识当前用户。
可再使用该unionId换取自己系统的userId做到登陆打通。
备注:
以上整理了一个微信小程序服务端的简单流程,但根据官方api文档,还有一些如签名校验、水印校验、checkSession等步骤,官方文档写的很清楚,这里就不写了,直接看文档吧(小程序官方文档开放接口部分):https://mp.weixin.qq.com/debug/wxadoc/dev/api/api-login.html
相关推荐
主要介绍了 C#微信小程序服务端获取用户解密信息实例代码的相关资料,需要的朋友可以参考下
微信小程序开发项目实例,源码完整,亲测可正常运行。 【项目技术】 微信开发者工具+java+springboot+b/s+Mysql 【实现功能】 该小程序主要包括服务端和用户端。服务端主要包括货物信息管理、类别管理、订单管理、...
微信小程序开发项目实例,源码完整,亲测可正常运行。 【项目技术】 微信开发者工具+java+mysql+ssm+b/s 【实现功能】 主要使用者分为服务端和微信端,实现功能包括管理员:首页、个人中心、业主管理、抄表员管理、...
微信小程序开发项目实例,源码完整,亲测可正常运行。 【项目技术】 微信开发者工具+java+mysql+ssm 【实现功能】 微信端: 用户登录和注册; 用户登陆系统后,可以对首页、车辆信息、平台公告、我的等功能模块进行...
微信小程序项目实例、开发实例,可做计算机毕业设计、课程设计等参考。 【项目技术】 微信小程序开发工具+mysql+java+b/s 【实现功能】 服务端: 后台首页:可以直接跳转到后台首页。 用户信息管理:管理所有申请...
微信小程序开发项目实例,源码完整,亲测可正常运行。 【项目技术】 微信开发者工具+java+ssm+mysql 【实现功能】 学生客户端功能: 学生通过登录进入到系统操作界面后,可以根据需求对首页、教师、班级通知、线上...
微信小程序开发项目实例,源码完整,亲测可正常运行。 【项目技术】 微信开发者工具+java+ssm+mysql 【实现功能】 用户服务端功能: 用户登录、通过页面输入用户名、密码进行登陆信息无误进入到二手车交易平台主...
微信小程序开发工具+mysql+java+b/s 【实现功能】 前端:投票主题查询,投票类别查询;在线投票,一个用户只能投票一个主题一次,投票也可以投票图片;投票结果查看;公告查看; 后台服务端:管理员管理、用户管理、...
【微信小程序毕业设计】物业缴费系统项目实例(源码+数据库+开发说明).zip 【项目技术】 微信开发者工具+java+mysql+ssm+b/s 【实现功能】 主要使用者分为服务端和微信端,实现功能包括管理员:首页、个人中心、业主...
Node.js Koa2 实战开发微信小程序服务端API接口。 项目使用 首先使克隆项目,然后进入项目根目录使用命令安装包,最后命令启动项目,代码会根据模型自动创建数据库表的。 # 克隆项目代码 $ git clone ...
微信小程序 微信支付服务端集 理论上集成微信支付的全部工作可以在小程序端完成,因为小程序js有访问网络的能力,但是为了安全,不暴露敏感key,而且可以使用官方提供的现成php demo更省力,于是在服务端完成签名与...
微信小程序项目实例、开发实例,可做计算机毕业设计、课程设计等参考。 【项目技术】 微信小程序开发工具+mysql+java+b/s 【实现功能】 前端:投票主题查询,投票类别查询;在线投票,一个用户只能投票一个主题一次...
微信小程序项目实例、开发实例,可做计算机毕业设计、课程设计等参考。 【项目技术】 微信小程序开发工具+mysql+java+b/s 【实现功能】 前端: 打卡功能:打卡功能是小程序的主要功能,打卡功能主要目的是实现单人或...
【微信小程序项目实例】二手物品交易(源码+说明+数据库+演示视频).zip 【项目技术】 微信小程序开发工具+mysql+java+b/s 【实现功能】 服务端: 后台首页:可以直接跳转到后台首页。 用户信息管理:管理所有申请通过...
【微信小程序项目实例】校园二手物品交易系统(源码+说明+数据库+演示视频).zip 【项目技术】 微信小程序开发工具+mysql+java+b/s 【实现功能】 服务端: 后台首页:可以直接跳转到后台首页。 用户信息管理:管理所有...
最近微信小程序被炒得很火热,本人也抱着试一试的态度下载了微信web开发者工具,开发工具比较简洁,功能相对比较少,个性化设置也没有。了解完开发工具之后,顺便看了一下小程序的官方开发文档,大概了解了小程序的...
【微信小程序毕业设计】寸金校园租车平台项目实例(源码+数据库+开发说明).zip 【项目技术】 微信开发者工具+java+mysql+ssm 【实现功能】 微信端: 用户登录和注册; 用户登陆系统后,可以对首页、车辆信息、平台...
【微信小程序毕业设计】二手物品交易项目实例(源码+演示视频).zip 【项目技术】 微信小程序开发工具+mysql+java+b/s 【实现功能】 服务端: 后台首页:可以直接跳转到后台首页。 用户信息管理:管理所有申请通过的...
【微信小程序毕业设计】二手车交易平台项目实例(源码+数据库+开发说明).zip 【项目技术】 微信开发者工具+java+ssm+mysql 【实现功能】 用户服务端功能: 用户登录、通过页面输入用户名、密码进行登陆信息无误进入...
微信及小程序开发等。 小程序基于微信,无缝衔接,利用了微信强大的API,将用户登录、状态保持、微信支付、数据统计等完美的进行了结合。 新手入门 资料汇总 开发框架 项目实战 DEMO 微信支付系列 1 2 3 附录:基础...