热门IT资讯网

MMJ-Spring Boot(Java)获取小程序Openid

发表于:2024-11-25 作者:热门IT资讯网编辑
编辑最后更新 2024年11月25日,背景开发小程序,想使用微信账号唯一码,API是这么说的wx.login...code 换取 session_key接口地址:https://api.weixin.qq.com/sns/jscode2s

背景

开发小程序,想使用微信账号唯一码,API是这么说的
wx.login...
code 换取 session_key
接口地址:
https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code

问题

开放的api并且是get,直接浏览器地址正确传参就可以获取到openid。
但是
小程序要求,请求的域名必须配置合法,而微信的api接口域名不让配置

解决办法

只能后台服务编写请求,小程序访问自己的服务端,服务端返回openid即可

具体步骤

使用Apache HttpClient实现请求第三方api接口

提供这么几个通用类,直接拷贝后调用

        //如果有code,说明是微信小程序,根据code获取openId        //classify用于标识使用哪个小程序的授权码        String openid = "{ErrorMsg:\"获取失败.\"}";        if (!CheckUtil.checkNulls(jscode,classify)){            //            openid = OpenIdUtil.oauth3GetOpenid(jscode,classify);        }        return openid;

1、请求参数组装OpenIdUtil

package com.wondersgroup.xa.healthyCard.user;/** * @author xsx */public class OpenIdUtil {    public static String oauth3GetOpenid(String code,String classify) {        String appid="";        String appsecret="";        switch (classify){            case "jiankangka":                //自己的配置appid                appid = "********";                //自己的配置APPSECRET;                appsecret = "*********";                break;        }        //授权(必填)        String grant_type = "authorization_code";        //URL        String requestUrl = "https://api.weixin.qq.com/sns/jscode2session";        //请求参数        String params = "appid=" + appid + "&secret=" + appsecret + "&js_code=" + code + "&grant_type=" + grant_type;        //发送请求        String data = HttpUtil.get(requestUrl, params);        return data;    }}

2、HttpClient请求工具类HttpUtil

package com.wondersgroup.xa.healthyCard.user;import java.io.BufferedReader;import java.io.InputStreamReader;import java.net.URL;import java.net.URLConnection;import java.util.List;import java.util.Map;/** * @author xsx */public class HttpUtil {    /**     * 向指定URL发送GET方法的请求     *     * @param url     *            发送请求的URL     * @param param     *            请求参数,请求参数应该是 name1=value1&name2=value2 的形式。     * @return String 所代表远程资源的响应结果     */    @SuppressWarnings("unused")    public static String get(String url,String param){        String result = "";        BufferedReader in = null;        try {            String urlNameString = url + "?" + param;            //System.out.println(urlNameString);            URL realUrl = new URL(urlNameString);            // 打开和URL之间的连接            URLConnection connection = realUrl.openConnection();            // 设置通用的请求属性            connection.setRequestProperty("accept", "*/*");            connection.setRequestProperty("connection", "Keep-Alive");            connection.setRequestProperty("user-agent",                    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");            // 建立实际的连接            connection.connect();            // 获取所有响应头字段            Map> map = connection.getHeaderFields();            // 遍历所有的响应头字段            /*for (String key : map.keySet()) {                System.out.println(key + "--->" + map.get(key));            }*/            // 定义 BufferedReader输入流来读取URL的响应            in = new BufferedReader(new InputStreamReader(                    connection.getInputStream()));            String line;            while ((line = in.readLine()) != null) {                result += line;            }        } catch (Exception e) {            System.out.println("发送GET请求出现异常!" + e);            e.printStackTrace();        }        // 使用finally块来关闭输入流        finally {            try {                if (in != null) {                    in.close();                }            } catch (Exception e2) {                e2.printStackTrace();            }        }        return result;    }}

3、程序健壮性验证通用类CheckUtil

package com.wondersgroup.xa.healthyCard.user;import org.apache.commons.lang.StringUtils;public class CheckUtil {    /**     * 验证是否有空值的参数,只要有一个,就返回true     *     * @param args     * @return true     */    public static boolean checkNulls(String... args) {        if (args.length == 0) {            return true;        }        //        for (String str : args) {            if (StringUtils.isEmpty(str)) {                return true;            }        }        return false;    }}

结束

以上工具类,拷贝到自己的服务,调用就可以正常使用了

我是沫沫金,我得朋友经常找我开发软件,你也可以,百度沫沫金和我取得联系

0