Java微信公眾號開發(fā)之通過微信公眾號獲取用戶信息
最近由于公司業(yè)務,就開始研究微信開發(fā)的流程,說實話,這東西剛開始看到時候和看天書的一樣,總算,看了一天的文檔,測試代碼終于出來了。
1、首先需要到微信網站去設置一下,我是直接用的微信測試號。
接口配置信息必須要填寫的,所以說必須能將自己的服務發(fā)布出去




到此微信配置完畢,接下來就是直接上代碼了
2、獲取用戶信息的方式一共是兩種,前提都是用戶關注微信公眾號,一種是靜默獲取(snsapi_base,這種方式只能獲取openid),另一種是授權獲取(snsapi_userinfo,可以獲取用戶的詳細信息)。
先說第一種
(1)首先需要先訪問微信的鏈接
這里的 uri就是直接回掉我們的服務地址,一定要記住,服務校驗的判斷,我是按照來判斷的echostr(第二種方式也是這樣)
package net.itraf.controller;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.alibaba.fastjson.JSONObject;
@Controller
@RequestMapping("/open")
public class OpenController {
@RequestMapping("/toOpenId")
public @ResponseBody String getOpenId(String code,String echostr,HttpServletResponse res) throws IOException{
if(echostr==null){
String url="https://api.weixin.qq.com/sns/oauth2/access_token?appid=wx24d47d2080f54c5b&secret=95011ac70909e8cca2786217dd80ee3f&code="+code+"&grant_type=authorization_code";
System.out.println(code);
String openId="";
try {
URL getUrl=new URL(url);
HttpURLConnection http=(HttpURLConnection)getUrl.openConnection();
http.setRequestMethod("GET");
http.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
http.setDoOutput(true);
http.setDoInput(true);
http.connect();
InputStream is = http.getInputStream();
int size = is.available();
byte[] b = new byte[size];
is.read(b);
String message = new String(b, "UTF-8");
JSONObject json = JSONObject.parseObject(message);
openId = json.getString("openid");
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return openId;
}else{
PrintWriter out = res.getWriter();
out.print(echostr);
return null;
}
}
//做服務器校驗
@RequestMapping("/tovalid")
public void valid(String echostr,HttpServletResponse res) throws IOException{
PrintWriter out = res.getWriter();
out.print(echostr);
}
}
第二種
(1)
https://open.weixin.qq.com/connect/oauth2/authorize?appid=xxxxxxxx&redirect_uri=http:// 域名
/open/openid&response_type=code&scope=snsapi_userinfo&state=1&connect_redirect=1#wechat_redirect
package net.itraf.controller;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.json.JSONObject;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/weixin")
public class Oauth2Action {
@RequestMapping("/oauth")
public void auth(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String echostr = request.getParameter("echostr");
if(echostr==null){
String appId = "wx24d47d2080f54c5b";
String appSecret = "95011ac70909e8cca2786217dd80ee3f";
//拼接
String get_access_token_url = "https://api.weixin.qq.com/sns/oauth2/access_token?"
+ "appid="
+ appId
+ "&secret="
+ appSecret
+ "&code=CODE&grant_type=authorization_code";
String get_userinfo = "https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN";
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
String code = request.getParameter("code");
System.out.println("******************code=" + code);
get_access_token_url = get_access_token_url.replace("CODE", code);
String json = HttpsGetUtil.doHttpsGetJson(get_access_token_url);
JSONObject jsonObject = JSONObject.fromObject(json);
String access_token = jsonObject.getString("access_token");
String openid = jsonObject.getString("openid");
get_userinfo = get_userinfo.replace("ACCESS_TOKEN", access_token);
get_userinfo = get_userinfo.replace("OPENID", openid);
String userInfoJson = HttpsGetUtil.doHttpsGetJson(get_userinfo);
JSONObject userInfoJO = JSONObject.fromObject(userInfoJson);
String user_openid = userInfoJO.getString("openid");
String user_nickname = userInfoJO.getString("nickname");
String user_sex = userInfoJO.getString("sex");
String user_province = userInfoJO.getString("province");
String user_city = userInfoJO.getString("city");
String user_country = userInfoJO.getString("country");
String user_headimgurl = userInfoJO.getString("headimgurl");
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.print(" This is ");
out.print(this.getClass());
out.println(", using the POST method \n");
out.println("openid:" + user_openid + "\n\n");
out.println("nickname:" + user_nickname + "\n\n");
out.println("sex:" + user_sex + "\n\n");
out.println("province:" + user_province + "\n\n");
out.println("city:" + user_city + "\n\n");
out.println("country:" + user_country + "\n\n");
out.println("<img src=/" + user_headimgurl + "/");
out.println(">");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}else{
PrintWriter out = response.getWriter();
out.print(echostr);
}
}
}
package net.itraf.controller;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
public class HttpsGetUtil {
public static String doHttpsGetJson(String Url)
{
String message = "";
try
{
System.out.println("doHttpsGetJson");//TODO:dd
URL urlGet = new URL(Url);
HttpURLConnection http = (HttpURLConnection) urlGet.openConnection();
http.setRequestMethod("GET"); //必須是get方式請求 24
http.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
http.setDoOutput(true);
http.setDoInput(true);
System.setProperty("sun.net.client.defaultConnectTimeout", "30000");//連接超時30秒28
System.setProperty("sun.net.client.defaultReadTimeout", "30000"); //讀取超時30秒29 30
http.connect();
InputStream is =http.getInputStream();
int size =is.available();
byte[] jsonBytes =new byte[size];
is.read(jsonBytes);
message=new String(jsonBytes,"UTF-8");
}
catch (MalformedURLException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
return message;
}
}
以上所述是小編給大家介紹的Java微信公眾號開發(fā)之通過微信公眾號獲取用戶信息,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!
- java微信公眾號企業(yè)付款開發(fā)
- Java版微信公眾號支付開發(fā)全過程
- 微信公眾號開發(fā)之設置自定義菜單實例代碼【java版】
- java微信公眾號支付開發(fā)之現金紅包
- 微信公眾號開發(fā)之回復圖文消息java代碼
- java微信公眾號開發(fā)案例
- 用Java設計模式中的觀察者模式開發(fā)微信公眾號的例子
- java微信公眾號開發(fā)第一步 公眾號接入和access_token管理
- Java開發(fā)微信公眾號接收和被動回復普通消息
- java微信公眾號開發(fā)(搭建本地測試環(huán)境)
- java開發(fā)微信公眾號支付
- Java 微信公眾號開發(fā)相關總結
相關文章
springmvc請求轉發(fā)和重定向問題(攜帶參數和不攜帶參數)
這篇文章主要介紹了springmvc請求轉發(fā)和重定向問題(攜帶參數和不攜帶參數),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-10-10
SpringBoot Maven打包插件spring-boot-maven-plugin無法解析原因
spring-boot-maven-plugin是spring boot提供的maven打包插件,本文主要介紹了SpringBoot Maven打包插件spring-boot-maven-plugin無法解析原因,具有一定的參考價值,感興趣的可以了解一下2024-03-03
SpringBoot接受前臺參數的6種方式以及統(tǒng)一響應代碼示例
這篇文章主要給大家介紹了關于SpringBoot接受前臺參數的6種方式以及統(tǒng)一響應的相關資料,前端負責展示頁面和用戶交互,而后端則負責處理業(yè)務邏輯和數據存儲,在這種架構下前端需要將用戶輸入的數據發(fā)送給后端進行處理,需要的朋友可以參考下2023-12-12

