`

一个微信小程序服务端开发实例

 
阅读更多

前段时间因工作需要,研究了一下微信小程序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#微信小程序服务端获取用户解密信息实例代码

    在C#中开发微信小程序的服务端,获取用户解密信息是关键步骤...这在开发微信小程序服务端功能时具有很高的参考价值。开发者需要理解微信小程序的授权流程、API调用机制以及相关的加密解密技术,才能正确实现这一功能。

    微信小程序服务端开发demo102.zip

    这个名为"微信小程序服务端开发demo102.zip"的压缩包文件,很可能是为教学或实践目的而准备的一个示例项目,它包含了一个服务端开发的实例。 首先,我们来了解一下“小程序”。小程序是一种基于微信运行的应用程序...

    《微信小程序云开发》教学大纲+教学进度表+教案.pdf

    在教学大纲中,课程分为13个章节,逐步引导学生从零基础到熟练掌握微信小程序云开发。首先,课程介绍微信小程序的基本原理和开发环境,让学生理解小程序开发的特点,以及在没有云服务的情况下小程序的项目构成。接着...

    Delphi 微信小程序控件 前端小程序演示源程序Api_Demo.rar

    《Delphi微信小程序控件与前端小程序演示源程序解析》 在当今的移动互联网时代,微信小程序因其轻便快捷的特点,已经成为许多开发者和企业...对于想要涉足微信小程序开发的Delphi程序员,这是一个值得深入研究的实例。

    微信小程序开发项目实例--物流智慧管理平台设计代码(源码).rar

    微信小程序开发项目实例,源码完整,亲测可正常运行。 【项目技术】 微信开发者工具+java+springboot+b/s+Mysql 【实现功能】 该小程序主要包括服务端和用户端。服务端主要包括货物信息管理、类别管理、订单管理、...

    asp微信小程序(授权登录+微信支付)案例demo

    ASP微信小程序(授权登录+微信支付)案例DEMO是一个实用的教学资源,涵盖了微信小程序开发中的核心功能:授权登录和微信支付。在这个项目中,开发者可以学习如何利用ASP后端技术和微信开放平台接口来构建一个完整的...

    微信点餐系统(微信小程序完整前后端代码).zip

    微信点餐系统是一款基于微信小程序...综上所述,这个微信点餐系统项目提供了丰富的学习资源,涵盖了微信小程序开发、后端服务构建、数据库管理等多个方面,对于想深入了解和实践这些技术的人来说,是一个极好的实例。

    微信小程序-微信小程序开发实例

    这个“WXNewsAndMovie”实例涵盖了微信小程序开发的多个方面,从UI设计到功能实现,再到数据获取和用户体验优化,是学习和实践微信小程序开发的一个很好的案例。通过分析和研究这个项目,开发者可以深入理解微信小...

    微信小程序python服务端

    微信小程序是一种轻量级的应用开发平台,主要针对移动端,它允许开发者通过微信生态系统提供丰富的功能和服务。Python作为后端服务端语言,可以为微信...掌握这些知识,能够帮助我们构建稳定、高效的微信小程序服务端。

    微信小程序框架(个人总结)

    微信小程序框架是腾讯推出的一种轻量级应用开发平台,它允许开发者通过编写JavaScript、WXML(微信小程序标记语言)和WXSS(微信小程序样式语言)来构建用户界面,并且能够实现与微信服务端的交互。这个框架具有独特...

    微信小程序开发-调查问卷-案例实现.pptx

    【微信小程序开发】是当前移动应用领域中的一个重要话题,它允许开发者构建轻量级的应用,无需用户下载安装,只需在微信内搜索或扫描二维码即可使用。本案例将深入讲解如何利用微信小程序进行一个调查问卷的开发,...

    微信小程序开发项目实例-物业缴费系统的设计与实现(源码).zip

    微信小程序开发项目实例,源码完整,亲测可正常运行。 【项目技术】 微信开发者工具+java+mysql+ssm+b/s 【实现功能】 主要使用者分为服务端和微信端,实现功能包括管理员:首页、个人中心、业主管理、抄表员管理、...

    微信小程序合集案例源码.zip

    最后的"微信小程序服务端开发demo"则可能包含了后端服务的开发示例,展示了如何与小程序前端进行数据交互,包括API接口设计、鉴权和数据安全等方面。 通过这些案例,开发者不仅可以学习到微信小程序的基本语法和...

    微信小程序 测试 实例源码下载

    在这个实例中,我们看到的是一个微信小程序与WebService(基于Asp.net)进行数据交互的测试案例。这涉及到两个核心部分:客户端(微信小程序)和服务器端(WebService)。 首先,我们要理解微信小程序的开发环境。...

    微信小程序开发项目实例-街舞交流平台代码(源码).rar

    在这个“微信小程序开发项目实例-街舞交流平台代码”中,我们可以深入理解微信小程序的开发流程以及如何结合后端服务构建一个完整的交互平台。 首先,该项目使用了微信开发者工具,这是微信官方提供的集成开发环境...

    微信小程序的书籍销售系统--(源码+部署说明+演示视频+源码介绍+lw).zip

    微信小程序的书籍销售系统是一个基于微信小程序平台开发的电子商务应用,旨在为用户提供便捷的在线购书体验。该系统采用了多种前沿技术和设计理念,以确保用户界面友好、操作流畅,并具备丰富的功能。 技术框架: ...

    微信小程序开发项目实例-寸金校园租车平台(源码).zip

    微信小程序开发项目实例,源码完整,亲测可正常运行。 【项目技术】 微信开发者工具+java+mysql+ssm 【实现功能】 微信端: 用户登录和注册; 用户登陆系统后,可以对首页、车辆信息、平台公告、我的等功能模块进行...

    基于微信小程序的毕业设计-校园二手物品交易系统(源码+数据库+演示视频).zip

    微信小程序项目实例、开发实例,可做计算机毕业设计、课程设计等参考。 【项目技术】 微信小程序开发工具+mysql+java+b/s 【实现功能】 服务端: 后台首页:可以直接跳转到后台首页。 用户信息管理:管理所有申请...

    基于微信小程序的点餐系统 (1).pdf

    在具体实现方面,微信小程序点餐系统使用了Nami后台作为服务端容器,Nami后台专门为微信小程序服务端开发设计,它允许开发者通过JavaScript脚本操作数据库。系统后台通过处理来自微信小程序的请求并与本地服务器上的...

    微信小程序开发项目实例-学校通小程序(源码).zip

    微信小程序开发项目实例,源码完整,亲测可正常运行。 【项目技术】 微信开发者工具+java+ssm+mysql 【实现功能】 学生客户端功能: 学生通过登录进入到系统操作界面后,可以根据需求对首页、教师、班级通知、线上...

Global site tag (gtag.js) - Google Analytics