最近由于公司业务,就开始研究微信开发的流程,说实话,这东西刚开始看到时候和看天书的一样,总算,看了一天的文档,测试代码终于出来了。
1、首先需要到微信网站去设置一下,我是直接用的微信测试号。
接口配置信息必须要填写的,所以说必须能将自己的服务发布出去
到此微信配置完毕,接下来就是直接上代码了
2、获取用户信息的方式一共是两种,前提都是用户关注微信公众号,一种是静默获取(snsapi_base,这种方式只能获取openid),另一种是授权获取(snsapi_userinfo,可以获取用户的详细信息)。
先说第一种
(1)首先需要先访问微信的链接
这里的 uri就是直接回掉我们的服务地址,一定要记住,服务校验的判断,我是按照来判断的echostr(第二种方式也是这样)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
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)
域名
/open/openid&response_type=code&scope=snsapi_userinfo&state=1&connect_redirect=1#wechat_redirect
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
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); } } } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
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微信公众号开发之通过微信公众号获取用户信息,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!
原文链接:http://www.cnblogs.com/yangming5423/archive/2017/05/18/6873267.html