写在前面
Client: 微信小程序
Server: Java Servlet running on local Tomcat 9.0
Tools: 微信开发者工具 && Eclipse
获取思路
参考试水微信小程序与Java后台通信一文,我们可以快速建立起小程序与 Java 后台之间的通信。而获取 openid 之前,我们首先要知道微信小程序官方如何定义 openid 的工作机制。参考微信小程序公众平台的开发文档:小程序登录,可以得知 openid 的工作机制主要为下图所示:
由此可以得知小程序若想在后台获取到 openid 就必须在前端发送一个临时生成的 code 到 Java 后台,然后 Java 后台使用 code 向微信相关 API 请求并获得 session_key 以及 openid。请求的 API 为:
https://api.weixin.qq.com/sns/jscode2session?appid=xxx&secret=xxx&js_code=xxx&grant_type=authorization_code
其中 appid 和 secret 秘钥需要在开发者平台的开发设置中获取,且 secret 秘钥不会明文保存,生成后记得保存下来,否则如果忘记需要重新生成。js_code 则是小程序传回的临时 code。
小程序端
小程序端制作一个简单的测试界面,并在 js 中向后台发送生成的 code:
//app.js
App({
globalData: {
userInfo: null
}
})
<!--index.wxml-->
<view>
<view class="userinfo">
<block wx:if="{
{!hasUserInfo && canIUse}}">
<image class="userinfo-avatar" src="{
{usernoneSrc}}" mode="cover"></image>
<button open-type="getUserInfo" bindgetuserinfo="getUserInfo" style='margin-bottom:50rpx' bindtap="login"> 点击授权 </button>
</block>
<block wx:else>
<image class="userinfo-avatar" src="{
{userInfo.avatarUrl}}" mode="cover"></image>
<text class="userinfo-nickname">{
{userInfo.nickName}}</text>
</block>
</view>
<view class="vipText">
<block wx: