java使用HttpURLConnection 方式将userid转成openid

本文介绍如何通过Java代码实现微信企业号中从UserID到OpenID的转换过程,强调了JSON格式参数的重要性,并提供了完整的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如有问题,欢迎指正,谢谢

参数最重要,参数一定要是json格式的,自己在用其他格式一直报错找不到userid


结果如下

{"errcode":0,"errmsg":"ok","openid":"11","appid":"22"}


package com.manpower.iapplication;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class Test {
	public static void main(String[] args) throws Exception {
		String access_token = "...";
		post("https://qyapi.weixin.qq.com/cgi-bin/user/convert_to_openid?access_token="+access_token,
				"userid");
	}

	public static String post(String urlPath, String userid) throws Exception {
		// 设置参数
		String param = "{\"userid\":\"" + userid + "\",\"agentid\":\"1\"}";
		// 建立连接
		URL url = new URL(urlPath);
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setDoOutput(true); // 需要输出
		httpConn.setDoInput(true); // 需要输入
		httpConn.setUseCaches(false); // 不允许缓存
		httpConn.setRequestMethod("POST");
		// 设置请求属性
		httpConn.setRequestProperty("Content-Type",
				"application/x-www-form-urlencoded");
		// 维持长连接
		httpConn.setRequestProperty("Connection", "Keep-Alive");
		httpConn.setRequestProperty("Charset", "UTF-8");
		// 连接,也可以不用明文connect,使用下面的httpConn.getOutputStream()会自动connect
		httpConn.connect();
		// 建立输入流,向指向的URL传入参数
		httpConn.getOutputStream().write(param.getBytes());// 输入参数

		// 获得响应状态
		int resultCode = httpConn.getResponseCode();
		if (HttpURLConnection.HTTP_OK == resultCode) {
			StringBuffer sb = new StringBuffer();
			String readLine = new String();
			BufferedReader responseReader = new BufferedReader(
					new InputStreamReader(httpConn.getInputStream(), "UTF-8"));
			while ((readLine = responseReader.readLine()) != null) {
				sb.append(readLine).append("\n");
			}
			responseReader.close();
			System.out.println(sb.toString());
			return sb.toString();
		}
		return "error";
	}

}


@ApiOperation(value = "前端发送code给后端,这一步在授权那里必须要调") @GetMapping("/sendCode") //获取凭证校检接口 public JsonResult getLoginCode(String code) throws IOException, BizException { // 小程序登录接口 System.out.println(code+"1111"); String url = "https://api.weixin.qq.com/sns/jscode2session?appid=" + APPID + "&secret=" + APPSECRET + "&js_code=" + code + "&grant_type=authorization_code"; System.out.println(code); // java HTTP发送请求 HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection(); connection.setRequestMethod("GET"); connection.setConnectTimeout(50000); connection.setReadTimeout(50000); // 获取响应数据 InputStream inputStream = connection.getInputStream(); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); StringBuilder response = new StringBuilder(); String line; while ((line = bufferedReader.readLine()) != null) { response.append(line); } System.out.println(response); bufferedReader.close(); inputStream.close(); connection.disconnect(); // 解析响应数据,获取openid和session_key String openid = getJsonValue(response.toString(), "openid"); // String sessionKey = getJsonValue(response.toString(), "session_key"); // return openid + "," + sessionKey; HashMap map = new HashMap<String,String>(); map.put("openid",openid); // map.put("sessionKey",sessionKey); //这个时候应该把sessionKey和openid存在数据库 和对应的人的电话号码相绑定 User user = userService.getUserByOpenid(openid); // user.setSessionKey(sessionKey); //现在这个user里面 两种情况 第一种认证过后的什么都有 第二种 有useridopenid没有电话号码 return ResponseUtil.success("授权成功,已经可以开始认证了!",map); } /** * 获取json格式数据中某个字段的值 */ private String getJsonValue(String json, String key) { int index = json.indexOf(key); if (index < 0) { return null; } String value = json.substring(index + key.length() + 3); int endIndex = value.indexOf("\""); return value.substring(0, endIndex); }我这段接口为什么前端传入code提示报错:没有传入code呢
04-23
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值