.replace("JSCODE", code).replace("authorization_code", WxConfig.GRANTTYPE);
JSONObject jsonObject = CommonUtil.httpsRequest(requestUrl, "GET", null);
if (jsonObject != null) {
try {
// 业务操作
String openid = jsonObject.getString("openid");
wechatService.selectUserByOpenId(openid, headurl, nickname, sex, country, province, city);
return openid;
} catch (Exception e) {
System.out.println("业务操作失败");
e.printStackTrace();
}
} else {
System.out.println("code无效");
}
}
} catch (Exception e) {
e.printStackTrace();
}
return "错误";
}//可能代码复制过来,错位了,你们自己格式化一下吧 。
登录后复制
?
首先获取openid根据文档需要访问一个https接口 如下:
;secret=SECRETjs_code=JSCODEgrant_type=authorization_code
appid是你小程序的appid,secret是你小程序的appsercet,js_code是前台登陆成功后返回给你的code,grant_type为固定值authorization_code.
appid跟secret的查看在微信公众平台:
注意:appid跟secret只有小程序的管理员可以看到,如果只是有权限的话,还是看不到,必须管理员扫码才可以看到,进去之后就在 设置→→→开发设置
controller中涉及到三个类,CommonUtil是用来请求微信接口的,TrustManager是管理器,WxConfig是配置一些你的小程序信息
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ConnectException;
import java.net.URL;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import net.sf.json.JSONObject;
public class CommonUtil {
/**
* 发送https请求
* @param requestUrl 请求地址
* @param requestMethod 请求方式(GET、POST)
* @param outputStr 提交的数据
* @return JSONObject(通过JSONObject.get(key)的方式获取json对象的属性值)
*/
public static JSONObject httpsRequest(String requestUrl, String requestMethod, String outputStr) {
JSONObject jsonObject = null;
try {
// 创建SSLContext对象 , 并使用我们指定的信任管理器初始化
TrustManager[] tm = { new MyX509TrustManager() };
SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");
sslContext.init(null, tm, new java.security.SecureRandom());
// 从上述SSLContext对象中得到SSLSocketFactory对象
SSLSocketFactory ssf = sslContext.getSocketFactory();
URL url = new URL(requestUrl);
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.setSSLSocketFactory(ssf);
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setUseCaches(false);
// 设置请求方式(GET/POST)
conn.setRequestMethod(requestMethod);
// 当outputStr不为null时向输出流写数据
if (null != outputStr) {
OutputStream outputStream = conn.getOutputStream();
// 注意编码格式
outputStream.write(outputStr.getBytes("UTF-8"));
outputStream.close();
}
// 从输入流读取返回内容
InputStream inputStream = conn.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;
conn.disconnect();
jsonObject = JSONObject.fromObject(buffer.toString());
推荐阅读
- pdf转电路图,pdf转电子图板
- 如何对付电商白酒,如何对付电商白酒销售
- 华为子母路由器怎么拆卸,华为路由子母装使用方法
- vb.net如何字体 vb窗体字体怎么设置
- redis和数据库同步更新问题的简单介绍
- 单机游戏exe下载,游戏exe
- 可以做装备的单机游戏,可以自己做装备的游戏
- linux命令行换用户 linux命令行怎么切换用户
- flutter调用微信登录schema,flutter集成微信登录