zoukankan      html  css  js  c++  java
  • Java微信小程序登录接口获取openid

    根据官方文档,wx.login()的回调函数中,需要我们传递生成的用户登录凭证到code2accessToken的接口中

     
    小程序登录方法

    code2accessToken的方法中要求传入如下参数

     
    code2accessToken的方法中要求传入如下参数

    获取Appid与appSecret,登录微信公众平台,知道你申请的小程序,开发者设置中有appid,然后生成secret即可

     
    开发者设置

    官方文档:

    https://developers.weixin.qq.com/miniprogram/dev/api/open-api/login/wx.login.html

    微信公众平台:

    https://mp.weixin.qq.com/

    首先,要在微信开发者工具中,修改utils下app.js中的wx.login()方法

    // 登录
    wx.login({
      success: function (res) {
        if (res.code) {
          // 发起网络请求
          wx.request({
            // 这里是接口地址,建议部署配置域名为https,否则可能会出问题,nginx加密证书配置见文章尾
            url: 'http://127.0.0.1:8099/api/v1/minipro/login',
            data: {
              code: res.code
            }
          })
        } else {
          console.log('登录失败!' + res.errMsg)
        }
      }
    })
    

    微信小程序登录接口的书写

    @Controller
    @RequestMapping("/api/v1/minipro")
    public class MainController implements Serializable {
    
        private static final long serialVersionUID = 1L;
        private static Logger logger = LoggerFactory.getLogger(MainController.class);
    
        /**
         * 登录
         * @param
         */
        @ResponseBody
        @GetMapping(value="/login")
        public Result login(String code) {
            
            // 微信小程序ID
            String appid = "";
            // 微信小程序秘钥
            String secret = "";
            
            // 根据小程序穿过来的code想这个url发送请求
            String url = "https://api.weixin.qq.com/sns/jscode2session?appid=" + appid + "&secret=" + secret + "&js_code=" + code + "&grant_type=authorization_code";
            // 发送请求,返回Json字符串
            String str = WeChatUtil.httpRequest(url, "GET", null);
            // 转成Json对象 获取openid
            JSONObject jsonObject = JSONObject.parseObject(str);
            
            // 我们需要的openid,在一个小程序中,openid是唯一的
            String openid = jsonObject.get("openid").toString();
            
            
            // 然后书写自己的处理逻辑即可
            
        }
    
    

    微信小程序工具类

    /**
     * 微信工具类
     */
    public class WeChatUtil {
    
        public static String httpRequest(String requestUrl,String requestMethod,String output){
            try{
                URL url = new URL(requestUrl);
                HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
                connection.setDoOutput(true);
                connection.setDoInput(true);
                connection.setUseCaches(false);
                if(null != output){
                    OutputStream outputStream = connection.getOutputStream();
                    outputStream.write(output.getBytes("utf-8"));
                    outputStream.close();
                }
                // 从输入流读取返回内容
                InputStream inputStream = connection.getInputStream();
                InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
                BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
                String str = null;
                StringBuffer buffer = new StringBuffer();
                while ((str = bufferedReader.readLine()) != null){
                    buffer.append(str);
                }
                bufferedReader.close();
                inputStreamReader.close();
                inputStream.close();
                inputStream = null;
                connection.disconnect();
                return buffer.toString();
            }catch(Exception e){
                e.printStackTrace();
            }
            return "";
        }
    }
    

    因为审核上线的小程序接口都必须要https开头,也就是说必须开启加密证书才可以使用。

     
  • 相关阅读:
    线段的类
    计算三角形的类
    关于狗的类
    [poj2234] Matches Game
    bzoj[2655] calc
    拉格朗日插值和牛顿插值 菜鸟教程
    NOI模拟赛(3.15) sequence(序列)
    NOI模拟赛(3.13)Hike (远行)
    二分图讲解
    NOI模拟赛(3.8)Problem B
  • 原文地址:https://www.cnblogs.com/yelanggu/p/12958158.html
Copyright © 2011-2022 走看看