JAVA获取微信小程序openid和获取公众号openid,以及通过openid获取用户信息

时间:2023-01-24 18:08:23

一,首先说明下这个微信的openid

  为了识别用户,每个用户针对每个公众号会产生一个安全的OpenID,如果需要在多公众号、移动应用之间做用户共通,则需前往微信开放平台,将这些公众号和应用绑定到一个开放平台账号下,绑定后,一个用户虽然对多个公众号和应用有多个不同的OpenID,但他对所有这些同一开放平台账号下的公众号和应用,只有一个UnionID

我用简单自己理解的话来说就是  这个  你在每个公众号 或者小程序  都是在这个小程序或者这个公众号下会有一个openid   你去别的公众号 或者 小程序 这个是会改变的  但是unionid是不管你在哪个小程序或者公众号是唯一不变的。

微信官方提供了 了一个  可以通过用户的openid来获取用户信息,前提是用户必须关注了你的公众号,这个好像要做的话需要关联一个需要三百块钱认证的那个啥来着。这个就先不说了吧,现在我们要说的问题是如何获取openid

二,小程序获取openid

 /**
* 微信小程序获取openid
* @author Mr.Lin
*/
public class GetOpenIDUtil {
// 网页授权接口
// public final static String GetPageAccessTokenUrl = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code";//
// public final static String GetPageAccessTokenUrl = "https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=CODE&grant_type=authorization_code";
public final static String GetPageAccessTokenUrl = "https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=CODE&grant_type=authorization_code";
public static Map<String,Object> oauth2GetOpenid(String appid,String code,String appsecret) {
String requestUrl = GetPageAccessTokenUrl.replace("APPID", appid).replace("SECRET", appsecret).replace("CODE", code);
HttpClient client = null;
Map<String,Object> result =new HashMap<String,Object>();
try {
client = new DefaultHttpClient();
HttpGet httpget = new HttpGet(requestUrl);
ResponseHandler<String> responseHandler = new BasicResponseHandler();
String response = client.execute(httpget, responseHandler);
JSONObject OpenidJSONO=JSONObject.fromObject(response);
String openid =String.valueOf(OpenidJSONO.get("openid"));
String session_key=String.valueOf(OpenidJSONO.get("session_key"));
String unionid=String.valueOf(OpenidJSONO.get("unionid"));
String errcode=String.valueOf(OpenidJSONO.get("errcode"));
String errmsg=String.valueOf(OpenidJSONO.get("errmsg")); result.put("openid", openid);
result.put("sessionKey", session_key);
result.put("unionid", unionid);
result.put("errcode", errcode);
result.put("errmsg", errmsg);
} catch (Exception e) {
e.printStackTrace();
} finally {
client.getConnectionManager().shutdown();
}
return result;
}
}
/**
* 小程序换取openid
*
* @param code 识别得到用户id必须的一个值 得到网页授权凭证和用户id
* @return
*/
@RequestMapping("/get/openid")
public @ResponseBody
Object GetOpenid(String 你的小程序APPID, String code, String 你的小程序秘钥) {
if (code == null || code.length() == 0) {
throw new CustomException("code不能为空!");
}
return GetOpenIDUtil.oauth2GetOpenid(appid, code, appsecret); }
这个code的话我这个一般是前端生成比较好,所以你后台的话,把接口给前端,让他那边传个code,

 三,获取公众号openid~

 public class HttpGetUtil {
public static String httpRequestToString(String url,
Map<String,String> params) {
String result = null;
try {
InputStream is = httpRequestToStream(url, params);
BufferedReader in = new BufferedReader(new InputStreamReader(is,
"UTF-8"));
StringBuffer buffer = new StringBuffer();
String line = "";
while ((line = in.readLine()) != null) {
buffer.append(line);
}
result = buffer.toString();
} catch (Exception e) {
return null;
}
return result;
} private static InputStream httpRequestToStream(String url,
Map<String, String> params) {
InputStream is = null;
try {
String parameters = "";
boolean hasParams = false;
for(String key : params.keySet()){
String value = null;
try {
value = URLEncoder.encode(params.get(key), "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
parameters += key +"="+ value +"&";
hasParams = true;
}
if(hasParams){
parameters = parameters.substring(0, parameters.length()-1);
} url += "?"+ parameters; URL u = new URL(url);
HttpURLConnection conn = (HttpURLConnection) u.openConnection();
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty("Accept-Charset", "UTF-8");
conn.setRequestProperty("contentType", "utf-8");
conn.setConnectTimeout(50000);
conn.setReadTimeout(50000);
conn.setDoInput(true);
//设置请求方式,默认为GET
conn.setRequestMethod("GET"); is = conn.getInputStream();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return is;
} public static String GetCodeRequest1 = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect";
public static String getCodeRequest(String appid){
HttpClient client = null;
String result = null;
String appId = appid;
String REDIRECT_URI= "";//回调请求地址
String SCOPE="snsapi_base"; GetCodeRequest1 = GetCodeRequest1.replace("APPID", urlEnodeUTF8(appId));
GetCodeRequest1 = GetCodeRequest1.replace("REDIRECT_URI",urlEnodeUTF8(REDIRECT_URI));
GetCodeRequest1 = GetCodeRequest1.replace("SCOPE", SCOPE);
result = GetCodeRequest1; System.out.println(REDIRECT_URI); return result;
}
public static String urlEnodeUTF8(String str){
String result = str;
try {
result = URLEncoder.encode(str,"UTF-8");
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
}
@RequestMapping("/get/gzh/openid")
public @ResponseBody
String GetGZHOpenid(HttpServletRequest request, HttpServletResponse response) throws IOException { String code = request.getParameter("code");//获取code
Map params = new HashMap();
params.put("secret", 你的公众号秘钥);
params.put("appid", 你的公众号APPID);
params.put("grant_type", "authorization_code");
params.put("code", code);
String result = HttpGetUtil.httpRequestToString(
"https://api.weixin.qq.com/sns/oauth2/access_token", params);
JSONObject jsonObject = JSONObject.fromObject(result); String openid = jsonObject.get("openid").toString();
LOGGER.debug("code------" + code);
LOGGER.debug("得到的openid为:" + openid);
return openid; }

四,通过微信获取的openid来获取用户信息

 /**
* 获取accessToken
*
*/
public class GetAccessTokenUtil {
// 网页授权接口
public final static String GetPageAccessTokenUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";
public static Map<String, String> getAccessToken(String appid, String appsecret) {
String requestUrl = GetPageAccessTokenUrl.replace("APPID", appid).replace("APPSECRET", appsecret);
HttpClient client = null;
Map<String, String> result = new HashMap<String, String>();
String accessToken = null;
try {
client = new DefaultHttpClient();
HttpGet httpget = new HttpGet(requestUrl);
ResponseHandler<String> responseHandler = new BasicResponseHandler();
String response = client.execute(httpget, responseHandler);
JSONObject OpenidJSONO = JSONObject.fromObject(response);
accessToken = String.valueOf(OpenidJSONO.get("access_token"));
result.put("accessToken", accessToken);
} catch (Exception e) {
e.printStackTrace();
} finally {
client.getConnectionManager().shutdown();
}
return result;
}
}
//通过openid获取用户的信息,这个看你需要获取用户的哪些信息,
// https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140839 这个是微信官方的获取unionid机制 用户信息
public class GetBasicInformation {
// 网页授权接口
public final static String GetPageAccessTokenUrl = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN"; public static Map<String, String> getAccessToken(String access_token, String openid) {
String requestUrl = GetPageAccessTokenUrl.replace("ACCESS_TOKEN", access_token).replace("OPENID", openid);
HttpClient client = null;
Map<String, String> result = new HashMap<String, String>();
try {
client = new DefaultHttpClient();
HttpGet httpget = new HttpGet(requestUrl);
ResponseHandler<String> responseHandler = new BasicResponseHandler();
String response = client.execute(httpget, responseHandler);
JSONObject OpenidJSONO = JSONObject.fromObject(response); // String accessToken = String.valueOf(OpenidJSONO.get("access_token"));
String subscribe = String.valueOf(OpenidJSONO.get("subscribe"));
String nickname = new String(String.valueOf(OpenidJSONO.get("nickname")).getBytes("ISO8859-1"),"UTF-8");
String sex = String.valueOf(OpenidJSONO.get("sex"));
String language = String.valueOf(OpenidJSONO.get("language"));
String city = new String(String.valueOf(OpenidJSONO.get("city")).getBytes("ISO8859-1"),"UTF-8");
String province = new String(String.valueOf(OpenidJSONO.get("province")).getBytes("ISO8859-1"),"UTF-8");
String country = new String(String.valueOf(OpenidJSONO.get("country")).getBytes("ISO8859-1"),"UTF-8");
String headimgurl = String.valueOf(OpenidJSONO.get("headimgurl"));
String subscribeTime = String.valueOf(OpenidJSONO.get("subscribe_time"));
String unionid = String.valueOf(OpenidJSONO.get("unionid"));
// String accessToken =new String(String.valueOf(OpenidJSONO.get("access_token")).getBytes("ISO8859-1"),"UTF-8");
// String openid =new String(String.valueOf(OpenidJSONO.get("openid")).getBytes("ISO8859-1"),"UTF-8");
// String openid =new String(String.valueOf(OpenidJSONO.get("openid")).getBytes("ISO8859-1"),"UTF-8");
// String openid =new String(String.valueOf(OpenidJSONO.get("openid")).getBytes("ISO8859-1"),"UTF-8");
// String openid =new String(String.valueOf(OpenidJSONO.get("openid")).getBytes("ISO8859-1"),"UTF-8");
// String openid =new String(String.valueOf(OpenidJSONO.get("openid")).getBytes("ISO8859-1"),"UTF-8");
// String openid =new String(String.valueOf(OpenidJSONO.get("openid")).getBytes("ISO8859-1"),"UTF-8");
// String openid =new String(String.valueOf(OpenidJSONO.get("openid")).getBytes("ISO8859-1"),"UTF-8");
// String openid =new String(String.valueOf(OpenidJSONO.get("openid")).getBytes("ISO8859-1"),"UTF-8");
// String openid =new String(String.valueOf(OpenidJSONO.get("openid")).getBytes("ISO8859-1"),"UTF-8");
// String openid =new String(String.valueOf(OpenidJSONO.get("openid")).getBytes("ISO8859-1"),"UTF-8"); // String openid = String.valueOf(OpenidJSONO.get("openid"));
// result.put("accessToken", accessToken);
result.put("subscribe", subscribe);
result.put("nickname", nickname);
result.put("sex", sex);
result.put("language", language);
result.put("city", city);
result.put("province", province);
result.put("country", country);
result.put("headimgurl", headimgurl);
result.put("subscribeTime", subscribeTime);
result.put("unionid", unionid); // System.out.println(accessToken+"==================="+unionid);
} catch (Exception e) {
e.printStackTrace();
} finally {
client.getConnectionManager().shutdown();
}
return result;
}
}
 /**
* 微信公众号获取微信unionid和其他个人信息 需要关注公众号
*
* @param openid
* @return
*/
@RequestMapping("/basic/Information")
public @ResponseBody
Map basicInformation(String openid) {
//得到access_token
String accessToken = GetAccessTokenUtil.getAccessToken(你的公众号APPID, 你的公众号APPID对应的秘钥).get("accessToken");
LOGGER.debug("accessToken------" + accessToken);
return GetBasicInformation.getAccessToken(accessToken, openid);
}

总结:这个就是微信小程序和微信公众号获取openid  以及通过openid获取unionid以及用户信息的代码,微信开发文档上面看感觉功力不深厚是很难看懂的,这个我也是通过网上或者同事慢慢总结出来的。  请大家多多指教,谢谢!

JAVA获取微信小程序openid和获取公众号openid,以及通过openid获取用户信息的更多相关文章

  1. java后台获取微信小程序openid

    一.jar包准备 1.在网盘下载 链接:https://pan.baidu.com/s/15HAAWOg_yn768g4s9IrcPg 提取码:hgj0 二.在pom文件中添加依赖 1.将外部的引入的 ...

  2. 微信小程序开发之如何哪获取微信小程序的APP ID

    微信小程序的开发工具,在新建项目的时候,默认提示填写APP ID,如果不填写AppID 也是可以本地测试和开发的,但是无法通过手机调试,只能在开发工具里查看 如果需要真机调试微信小程序,需要安装微信6 ...

  3. java实现微信小程序服务端&lpar;登录&rpar;

    微信小程序如今被广泛使用,微信小程序按照微信官网的定义来说就是: 微信小程序是一种全新的连接用户与服务的方式,它可以在微信内被便捷地获取和传播,同时具有出色的使用体验. 这就是微信小程序的魅力所在,有 ...

  4. Java 后端微信小程序支付demo &lpar;网上说的坑里面基本上都有&rpar;

    Java 后端微信小程序支付 一.遇到的问题 1. 商户号该产品权限未开通,请前往商户平台>产品中心检查后重试 2.签名错误 3.已经调起微信统一下单接口,可以拿到预支付ID,但是前端支付的时候 ...

  5. Java 获取微信小程序二维码(可以指定小程序页面 与 动态参数)

    一.准备工作 微信公众平台接口调试工具 小程序的唯一标识(appid) 小程序的密钥(secret) 二.获取access_token 打开微信公众平台接口调试工具,在参数列表中输入小程序的appid ...

  6. C&num; 获取微信小程序access&lowbar;token

    /// <summary> /// 获取access_token /// </summary> /// <returns></returns> publ ...

  7. 微信小程序背景音乐官方实例代码无效问题解决及音乐src获取方法

    最近在学习微信小程序时遇到了个问题:官方的背景音乐的api实例代码中的音乐src不管用(可能有期限,后面的方法获取的src同样可能有期限),因此本人只能自己去寻找办法获取src,现将方法记录在下面.( ...

  8. 如何获取微信小程序for循环的index

    在微信小程序开发中,对于wx:for,可以使用wx:for-index="index"来获取数组中的元素的索引值(下标). <view class="item&qu ...

  9. 备忘录——C&num;获取微信小程序的云数据库中数据

    目录 0. 背景说明 0.2 获取AccessToken 0.3 数据库查询 0.4 文件下载 2. 简单的封装 3. 简单测试 4. 参考文档 shanzm-2021年8月17日 17:14:24 ...

随机推荐

  1. Hibernate中的锁机制

    锁机制:是数据库为了保证数据的一致性<一个事务的各种操作不相互影响>而使各种共享资源在被并发访问访问变得有序所设计的一种规则,用来保证在当前用户进行操作数据的时候其他的用户不能对同一数据进 ...

  2. php发送ssl邮件

    <?php /** * 邮件发送类 * 支持发送纯文本邮件和HTML格式的邮件,可以多收件人,多抄送,多秘密抄送,带附件(单个或多个附件),支持到服务器的ssl连接 * 需要的php扩展:soc ...

  3. O2O模式成功案例分享 汲取精华化为己用

    本文通过分享一些公司的o2o成功案例让您了解什么是O2O,o2o的优势,o2o模式有哪些,未来我们要如何做o2o才更有竞争力,学牛人的o2o创新玩法,摸索适合自己的o2o思路.拥抱o2o - 传统企业 ...

  4. mysql 直接从date 文件夹备份表,还原数据库之后提示 table doesn&grave;t exist的原因和解决方法

    补充:正常情况下,建议数据库备份最好用工具进行备份,通过拷贝数据库表进行数据迁移,不同的环境会出现各种不同的意外问题. 背景:今天在整理一个网站的时候,操作系统由于系统自动更新导致一直出现系统蓝屏死机 ...

  5. HOWTO&colon; Setup XCode 6&period;1 to work with OpenCV3 libraries

    HOWTO: Setup XCode 6.1 to work with OpenCV3 libraries Overview This post demonstrates how to setup y ...

  6. bzoj3575&lbrack;Hnoi2014&rsqb;道路堵塞

    http://www.lydsy.com/JudgeOnline/problem.php?id=3575 总赶脚第二题总是比第三题难...... 好吧,这题一点思路都没有 听说用民科可以过掉大部分数据 ...

  7. 轻量级sqlite是增删改查

    --创建数据库 create database ios --使用数据库 use ios --创建数据表 create table student ( stuid int primary key aut ...

  8. CUDA学习,使用shared memory实现Reverse Array

  9. jQuery省市区三级联动菜单

    <style> select{ padding:5px 0; } .outer{ width:500px; margin:20px auto; } </style> <d ...

  10. 承接VR外包&vert;AR外包&vert;Unity3D外包&vert;UE4外包(内附案例演示)

    北京团队长年承接VR/AR项目外包 咨询QQ:372900288  微信:liuxiang0884