公众号获取openid:
1.在网页端构建链接进行跳转:
redirect_uri:为回调、接受code的地址;
appid:为公众号后台提供。
https://open.weixin.qq.com/connect/oauth2/authorize?redirect_uri=*******
&appid=************&response_type=code&scope=snsapi_base
&state=1#wechat_redirect
2.回调地址的代码:
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.json.JSONObject;
/**
* Servlet implementation class WxOpenIdServlet
*/
@WebServlet("/WxOpenIdServlet")
public class WxOpenIdServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public WxOpenIdServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.setContentType("text/html");
request.setCharacterEncoding("gbk");
response.setCharacterEncoding("gbk");
String code = request.getParameter("code");//获取code
Map params = new HashMap();
// 下面两个来自公众号后台
params.put("secret", "***********");
params.put("appid", "***************");
params.put("grant_type", "authorization_code");
params.put("code", code);
String result = httpRequestToString("https://api.weixin.qq.com/sns/oauth2/access_token", params);
JSONObject jsonObject = JSONObject.fromObject(result);
String openid = jsonObject.get("openid").toString();
// 带openid的链接
String url = "https://www.baidu.com/index.html?openid="+openid;
response.sendRedirect(url);
}
//网络请求
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;
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
还有公纵号设置分析样式,需要用到微信的jsapi,可设置标题、图片和内容,下次分享。
小程序获取openid:
小程序设置获取请求:
wx.login({
success: function (res) {
if (res.code) {
wx.getUserInfo({
success: function (data1) {
// console.log("res.code", res.code, d.appid, d.secret)
//用code通过接口换取openid
var l = 'https://www.baidu.com/getopenid?' + 'code=' + res.code;
wx.request({
url: l,
data: {},
method: 'GET',
success: function (resss) {
// console.log("请求openid",resss);
var openid1 = resss.data.openid;
},
fail: function (e) {
console.log("请求openid失败")
}
})
}
})
} else {}
},
fail: function (e) {
console.log("登录失败")
}
})
接收接口:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class getopenid
*/
@WebServlet("/getopenid")
public class getopenid extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public getopenid() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.setHeader("Access-Control-Allow-Origin", "*");
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
String url="https://api.weixin.qq.com/sns/jscode2session";
String param="appid=*************&secret=*******************&js_code="+request.getParameter("code")+"&grant_type=authorization_code";
out.print(sendGet(url,param));
out.flush();
}
/**
* 向指定URL发送GET方法的请求
*
* @param url 发送请求的URL
* @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
* @return URL 所代表远程资源的响应结果
*/
public static String sendGet(String url, String param) {
String result = "";
BufferedReader in = null;
// System.out.println(url);
// System.out.println(param);
try {
String urlNameString = url + "?" + param;
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<String, List<String>> map = connection.getHeaderFields();
// 遍历所有的响应头字段
for (String key : map.keySet()) {
// System.out.println(key + "--->" + map.get(key));
}
// 定义 BufferedReader输入流来读取URL的响应
// in = new BufferedReader(new InputStreamReader(
// connection.getInputStream()));
in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "utf-8"));
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;
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}