文档章节

微信开发

来份儿蛋炒饭
 来份儿蛋炒饭
发布于 2017/10/30 15:23
字数 581
阅读 60
收藏 0

1 网页OAuth2.0授权获得用户信息(openId,头像,昵称等)

  1. 配置授权回调页面域名,域名不要带Http

  2. 用户授权并获取code

    https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

    微信内访问此链接,会重定向到redirect_uri对应的链接地址,其中红色参数必填,绿色选填:
        appid公众号的唯一标识
        redirect_uri授权后重定向的回调链接地址
        response_type返回类型,请填写code
        scopesnsapi_base(不弹出授权页面),snsapi_userinfo(弹出授权页面)
        state重定向后会带上state参数,开发者可以填写任意参数值
        #wechat_redirect: 直接在微信打开链接,可以不填此参数。

    String code = request.getParameter("code");
  3. 使用code获取openId和access_token

    https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

    后台访问此链接,其中:
        appid公众号的唯一标识
        secret 公众号的appsecret
        code 填写上一步获取的code参数
        grant_type 填写为authorization_code
    //发送网络请求
    public static String sendGet(String url, String param) {
        String result = "";
        BufferedReader in = null;
        try {
            String urlNameString = url + "?" + param;
            URL realUrl = new URL(urlNameString);
            // 打开和URL之间的连接
            URLConnection connection = realUrl.openConnection();
            // 设置通用的请求属性
            connection.setRequestProperty("accept", "*/*");
            connection.setRequestProperty("Accept-Charset", "UTF-8");
            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(), "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;
    }
    String url = "https://api.weixin.qq.com/sns/oauth2/access_token";
    String param = "appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code";
    String resultJson = sendGet(url, param);
    可得到如下结果:
    {
        "access_token": "OezXcEiiBSKSxW0eoylIeAsR0GmYd1awCffdHgb4fhS_KKf2CotGj2cBNUKQQvj-G0ZWEE5-uBjBz941EOPqDQy5sS_GCs2z40dnvU99Y5AI1bw2uqN--2jXoBLIM5d6L9RImvm8Vg8cBAiLpWA8Vw",
        "expires_in": 7200,
        "refresh_token": "OezXcEiiBSKSxW0eoylIeAsR0GmYd1awCffdHgb4fhS_KKf2CotGj2cBNUKQQvj-G0ZWEE5-uBjBz941EOPqDQy5sS_GCs2z40dnvU99Y5CZPAwZksiuz_6x_TfkLoXLU7kdKM2232WDXB3Msuzq1A",
        "openid": "oLVPpjqs9BhvzwPj5A-vTYAX3GLc",
        "scope": "snsapi_userinfo,"
    }

    然后用Gosn解析出相关参数:
    Gson gs = new Gson(); Map<String,String> map = gs.fromJson(resultJson, Map.class);
    String openid = map.get("openid");
    String access_token = map.get("access_token");
    再根据这个获得用户名等信息:
    https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID
    String url = "https://api.weixin.qq.com/sns/userinfo";
    String param = "access_token=ACCESS_TOKEN&openid=OPENID";
    String resultJson = sendGet(url, param);
    可得如下结果:
    {
        "openid": "oLVPpjqs9BhvzwPj5A-vTYAX3GLc",
        "nickname": "刺猬宝宝",
        "sex": 1,
        "language": "简体中文",
        "city": "深圳",
        "province": "广东",
        "country": "中国",
        "headimgurl": "http://wx.qlogo.cn/mmopen/utpKYf69VAbCRDRlbUsPsdQN38DoibCkrU6SAMCSNx558eTaLVM8PyM6jlEGzOrH67hyZibIZPXu4BK1XNWzSXB3Cs4qpBBg18/0",
        "privilege": []
    }

    然后再用Gson解析。




     

© 著作权归作者所有

共有 人打赏支持
来份儿蛋炒饭
粉丝 0
博文 8
码字总数 1641
作品 0
郑州
程序员
私信 提问
C#开发微信门户及应用(24)-微信小店货架信息管理

在前面微信小店系列篇《C#开发微信门户及应用(22)-微信小店的开发和使用》里面介绍了一些微信小店的基础知识,以及《C#开发微信门户及应用(23)-微信小店商品管理接口的封装和测试》里面详细介...

walb呀
2017/12/04
0
0
C#开发微信门户及应用(7)-微信多客服功能及开发集成

最近一直在弄微信的集成功能开发,发现微信给认证账户开通了一个多客服的功能,对于客户的咨询,可以切换至客服处理的方式,而且可以添加多个客服进行处理,这个在客户咨询比较多的时候,是一...

walb呀
2017/12/04
0
0
C#开发微信门户及应用(20)-微信企业号的菜单管理

前面几篇陆续介绍了很多微信企业号的相关操作,企业号和公众号一样都可以自定义菜单,因此他们也可以通过API进行菜单的创建、获取列表、删除的操作,因此本篇继续探讨这个主体,介绍企业号的...

walb呀
2017/12/04
0
0
C#开发微信门户及应用(2)--微信消息的处理和应答

微信应用如火如荼,很多公司都希望搭上信息快车,这个是一个商机,也是一个技术的方向,因此,有空研究下、学习下微信的相关开发,也就成为计划的安排事情之一了。本系列文章希望从一个循序渐...

walb呀
2017/12/04
0
0
Java微信开发_00_资源汇总贴

1.微信公众平台技术文档(https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1445241432) 2.微信企业号开发接口文档(http://qydev.weixin.qq.com/wiki/index.php?title=%E4%B8%BB%E......

rayner
2017/08/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Tomcat的管理功能

Tomcat的管理功能 host-manager(管理虚拟主机) 这个功能是用来管理虚拟主机的,可以通过这个WEB界面,来停止、启动以及增加虚拟主机。首先要配置用户角色: 浏览器输入host-manager地址 # ...

wzb88
44分钟前
0
0
Java引用传递和JVM堆栈的关系说明

通过代码说明 Java 引用传递在堆栈上的关系。 可以从JVM的内存空间存放上说明,值传递 和引用传递。 堆(线程共享):对象、对象的全局变量、数组 栈(线程私有):声明为局部变量的 基本数据...

冷基
48分钟前
2
0
直接插入排序

直接插入排序的基本操作是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增1的有序表。直接插入排序的时间复杂度为O(n^2),但性能比冒泡排序和简单选择排序的性能要好一点...

niithub
48分钟前
2
0
data.world、远观数据

产品思路: 1、共享数据集。 2、数据结构化。 3、数据展示。 https://data.world

colin_86
今天
3
0
Akka实战:HTTP大文件断点上传、下载,秒传

访问:https://github.com/yangbajing/scala-applications/tree/master/file-upload 获取本文所述完整源码,包括Akka HTTP后端和HTML5实现的前端。 在很多应用里面都会有类似大文件上传的需求...

羊八井
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部