首页 > 编程语言 >Java 微信小程序登录接口获取openid

Java 微信小程序登录接口获取openid

时间:2022-11-04 14:47:29浏览次数:44  
标签:openid code Java String 微信 connection login

根据官方文档,wx.login()的回调函数中,需要我们传递生成的用户登录凭证到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)
    }
  }
})

 

微信小程序登录 JAVA接口

@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();
        
        
        // 然后书写自己的处理逻辑即可
        
    }
 

 

微信小程序 JAVA工具类

/**
 * 微信工具类
 */
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开头,也就是说必须开启加密证书才可以使用。



 

标签:openid,code,Java,String,微信,connection,login
From: https://www.cnblogs.com/Fooo/p/16857707.html

相关文章

  • 总结出Java的语法特性
    子类与父类拥有一样的方法,并对象是子类型,就调用子类型的方法,是父类型,就调用父类型的方法子类与父类有相同的字段,子类的字段会代替或隐藏父类的字段,子类方法中访问的是子......
  • Java 19 新功能介绍
    点赞再看,动力无限。微信搜「程序猿阿朗」。本文Github.com/niumoo/JavaNotes和未读代码博客已经收录,有很多知识点和系列文章。Java19在2022年9月20日......
  • java:compilation failed:internal java compiler error java-source 1.5中不支持 t
    具体参考:Error:java:Compilationfailed:internaljavacompilererror解决办法-程序猿的故事-CSDN博客1、查看项目的jdk(Ctrl+Alt+shift+S)File->ProjectStru......
  • 微信小程序隐私指引完整填写范本(开发者收集你选中的照片或视频信息,用于?)
    为了分辨用户,开发者将在获取你的明示同意后,收集你的微信昵称、头像。为了显示距离,开发者将在获取你的明示同意后,收集你的位置信息。开发者收集你的地址,用于获取位置信息。......
  • JAVA并发容器-ConcurrentLinkedQueue 源码分析
    在并发编程中,有时候需要使用线程安全的队列。如果要实现一个线程安全的队列有两种方式:一种是使用阻塞算法,另一种是使用非阻塞算法。使用阻塞算法的队列可以用一个锁(入队和......
  • JAVA并发容器-ConcurrentSkipListMap,ConcurrentSkipListSet
    ConcurrentSkipListMap其实是TreeMap的并发版本。TreeMap使用的是红黑树,并且按照key的顺序排序(自然顺序、自定义顺序),但是他是非线程安全的,如果在并发环境下,建议使用Concurre......
  • JAVA并发容器-写时复制容器
    写时复制的容器。通俗的理解是当我们往一个容器添加元素的时候,不直接往当前容器添加,而是先将当前容器进行Copy,复制出一个新的容器,然后新的容器里添加元素,添加完元素之后,再将......
  • Java中的指令重排
    在执行程序时,为了提高性能,编译器和处理器常常会对指令做重排序。重排序分3种类型:编译器优化的重排序。编译器在不改变单线程程序语义的前提下,可以重新安排语句的执行顺序。......
  • JAVA并发容器-ConcurrentHashMap 1.7和1.8 源码解析
    HashMap是一个线程不安全的类,在并发情况下会产生很多问题,详情可以参考​​HashMap源码解析​​;HashTable是线程安全的类,但是它使用的是synchronized来保证线程安全,线程竞争......
  • Java中的锁
    锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁能够防止多个线程同时访问共享资源(但是有些锁可以允许多个线程并发的访问共享资源,比如读写锁)。Lock和synchronized......