• 小程序换取openId


      1 package com.shanxilgong.linxi.controllers;
      2 
      3 import com.alibaba.fastjson.JSON;
      4 import com.alibaba.fastjson.JSONObject;
      5 import com.shanxilgong.linxi.listener.MyTimerTask;
      6 import org.apache.catalina.servlet4preview.http.HttpServletRequest;
      7 import org.apache.http.HttpEntity;
      8 import org.apache.http.HttpResponse;
      9 import org.apache.http.client.HttpClient;
     10 import org.apache.http.client.methods.HttpGet;
     11 import org.apache.http.impl.client.DefaultHttpClient;
     12 import org.apache.http.util.EntityUtils;
     13 import org.slf4j.Logger;
     14 import org.slf4j.LoggerFactory;
     15 import org.springframework.beans.factory.annotation.Value;
     16 import org.springframework.web.bind.annotation.RequestMapping;
     17 import org.springframework.web.bind.annotation.RequestMethod;
     18 import org.springframework.web.bind.annotation.RequestParam;
     19 import org.springframework.web.bind.annotation.RestController;
     20 
     21 import javax.servlet.http.HttpServletResponse;
     22 import javax.servlet.http.HttpSession;
     23 import java.io.IOException;
     24 import java.util.Map;
     25 
     26 import static com.shanxilgong.linxi.tokenManager.TokenManager.tokenManager;
     27 
     28 /**
     29  * 该接口用于换取openId,进行用户状态维护
     30  * 1、在进行参数绑定时,默认是必填参数。
     31  * 2、微信小程序侧在传递参数时,使用Get方法,
     32  *    将wx.login()获取到的临时凭证拼接值url后面
     33  *
     34  * 小程序当前实现逻辑:
     35  *      小程序页签每次进入到“我的”页签都会自动登录。
     36  *
     37  *    返回值: {"session_key":"JHdZspvydvulDWF8BnfUew==","expires_in":7200,"openid":"oGo8D0RMEW4KK55RMOpQR2XaJQA8"}
     38  *    过期时间,单位为秒,1小时=1*60*60  过期时间是2小时
     39  */
     40 @RestController
     41 @RequestMapping(value = {"/login"},method = RequestMethod.GET)
     42 public class LoginGetInfo
     43 {
     44     // Spring boot 里面本身已经集成了 log4j 的jar相关
     45     private static Logger logger = LoggerFactory.getLogger(LoginGetInfo.class);
     46 
     47     @Value("${appid}")
     48     private String appid;
     49 
     50     @Value("${secret}")
     51     private String secret;
     52 
     53     private static final  String URL =
     54             "https://api.weixin.qq.com/sns/jscode2session?" +
     55                     "appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code";
     56 
     57     @RequestMapping(value = {"/getInfo"})
     58     public JSONObject getInfo(@RequestParam(value = "data") String  js_code,
     59                               HttpServletRequest request, HttpServletResponse response)
     60     {
     61 
     62         JSONObject result = new JSONObject();
     63         HttpClient httpClient=new DefaultHttpClient();
     64         HttpGet httpGet = new HttpGet(
     65                 URL.replace("APPID",appid)
     66                         .replace("SECRET",secret)
     67                         .replace("JSCODE",js_code));
     68         try
     69         {
     70             HttpResponse resp =  httpClient.execute(httpGet);
     71             if(200 != resp.getStatusLine().getStatusCode())
     72             {
     73                 logger.error("execute request of get is error.");
     74                 result.put("code","-1");
     75                 result.put("msg","error");
     76                 return result;
     77             }
     78             HttpEntity entity=resp.getEntity();
     79             String msg= EntityUtils.toString(entity,"utf-8");
     80             JSONObject json = JSON.parseObject(msg);
     81             String openId = json.getString("openid"); // 拿到当前用户在微信服务器的唯一凭证
     82 
     83             // 在token缓存中去查看当前用户的凭证是否已经存在
     84             if (!tokenManager.containsKey(openId))
     85             {
     86                 // 添加用户凭证
     87                 tokenManager.put(openId,true);
     88             }
     89         }
     90         catch (IOException e)
     91         {
     92             logger.error("execute request of get is error.");
     93             result.put("code","-1");
     94             result.put("msg","error");
     95             return result;
     96         }
     97         result.put("code","0");
     98         result.put("msg","success");
     99         return result;
    100     }
    101 }
  • 相关阅读:
    Spring创建复杂对象
    navicat中mysql中文数据显示乱码
    cmd黑窗口查询数据库中数据时中文乱码
    springboot中的文件上传与下载
    springboot中定义拦截器
    springboot中的AOP开发
    springboot集成logback日志
    开启springboot中对jsp页面修改后的热部署
    IntelliJ Idea中常用快捷键(持续更新中)
    jsp页面中格式化展示日期
  • 原文地址:https://www.cnblogs.com/nevegiveup/p/8993354.html
Copyright © 2020-2023  润新知