Java微信公众号开发之通过微信公众号获取用户信息

网友投稿 277 2023-05-14


Java微信公众号开发之通过微信公众号获取用户信息

最近由于公司业务,就开始研究微信开发的流程,说实话,这东西刚开始看到时候和看天书的一样,总算,看了一天的文档,测试代码终于出来了。

1、首先需要到微信网站去设置一下,我是直接用的微信测试号。

接口配置信息必须要填写的,所以说必须能将自己的服务发布出去

到此微信配置完毕,接下来就是直接上代码了

先说第一种

(1)首先需要先访问微信的链接

https://open.weixin.qq.com/connect/oauth2/authorize?appid=xxxxxxxxxxxxxxxx&redirect_uri=http://xxxxxx/open/openid&response_type=code&scope=snsapi_base

这里的 uri就是直接回掉我们的服务地址,一定要记住,服务校验的判断,我是按照来判断的echostr(第二种方式也是这样)

package net.itraf.controller;

import java.io.IOException;

imporhttp://t 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(" ");

out.println("");

out.println("

out.println("

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 +http:// "\n\n");

out.println("

out.println(">");

out.println(" ");

out.println("");

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;

}

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:接口引用实现类(怎么使用接口引用)
下一篇:easyUI下拉列表点击事件使用方法
相关文章

 发表评论

暂时没有评论,来抢沙发吧~