本文主要介绍使用springmvc基于Java语言的微信小程序的服务器端登录开发。
登录功能是小程序的必要功能。通过登录,我们可以在小程序中记录用户的某些行为。我们还可以隐约地在后台确认用户(小程序仅提供用户的昵称化身和化身的两个值不是唯一的。尽管获得的openid是唯一的,但它是由微信服务器生成的在我们自己的服务器的后台,并且不能与某个用户相关联
小程序登录过程
微信的正式文档详细介绍了登录过程,我们可以从中提取关键信息:
1 小程序客户端可以调用wx.login()接口进行编码
2 小程序客户端可以通过wx.request()与自己的服务器通信
3获取代码后,您的服务器必须与微信的服务器通信以获取openid和session_key
3生成一个随机值作为密钥,并使用openid和session_key作为该值来保持用户登录。
4服务器向小程序的客户端返回一个随机值,随后小程序的请求将伴随返回的随机值以确保用户的合法性
首先,我们必须首先构造一个GET请求,以实现我们自己的服务器与微信的服务器之间的通信:
public static String GET(String url){ String result = ""; BufferedReader in = null; InputStream is = null; InputStreamReader isr = null; try { URL realUrl = new URL(url); URLConnection conn = realUrl.openConnection(); conn.connect(); Map> map = conn.getHeaderFields(); is = conn.getInputStream(); isr = new InputStreamReader(is); in = new BufferedReader(isr); String line; while ((line = in.readLine()) != null) { result += line; } } catch (Exception e) { //异常记录 }finally{ try { if(in!=null){ in.close(); } if(is!=null){ is.close(); } if(isr!=null){ isr.close(); } } catch (Exception e2) { //异常记录 } } return result; }
通讯界面
我们在控制器中获取代码的值,然后检查appid和密码以完成通信接口。通过GET方法,我们完成了服务器与微信服务器之间的通信。
如果通信正常,我们可以解析结果以获取openid和session_key,然后生成唯一值作为key,并生成openid + session_key作为值来保存用户的登录状态,然后将唯一值返回给前端
Jedis jedis = new Jedis("localhost");String openid = openid;String session_key = session_key;String uid = UUID.randomUUID().toString();StringBuffer sb = new StringBuffer();sb.append(openid);sb.append(","+session_key);jedis.set(uid, sb.toString());return uid;
问题处理:
如果需要获取登录用户的用户名和昵称,则需要注意一个问题。如果昵称中有中文,则会出现乱码。这是因为微信按照中文的ISO-8859-1编码。我们需要的utf8编码,我们可以通过以下简单处理来解决在用户昵称中出现乱码的问题:
String nickNameDecode = new String(nickName.getBytes("ISO-8859-1"),"utf-8");