gpt4 book ai didi

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

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章Java微信公众号开发之通过微信公众号获取用户信息由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

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

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

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

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

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

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

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

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

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 。

最后此篇关于Java微信公众号开发之通过微信公众号获取用户信息的文章就讲到这里了,如果你想了解更多关于Java微信公众号开发之通过微信公众号获取用户信息的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com