• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >微信公众号 > 微信开发之获取OAuth2.0网页授权认证和获取用户信息进行关联的实例详解

微信开发之获取OAuth2.0网页授权认证和获取用户信息进行关联的实例详解

作者:匿名 字体:[增加 减小] 来源:互联网

匿名通过本文主要向大家介绍了OAuth2.0,网页授权认证,获取用户信息,微信开发等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
最近有做了关于微信公众号和自己网站用户进行用户关联授权登录的一个功能,主要是用户关注该公众号,点击会员中心,则会弹出需要关联授权的网页授权:OAuth2.0网页授权,然后用户同意获取用户信息,进行用户和网站的关联,然后用户则可以使用微信进行登录。

本次做的是一个在Java的Action层处理各个返回参数获取数据。

一、 使用到的工具:

1、ngrok,将你自己的本机映射到公网,这样保证可以随时测试开发;

1、下载ngrok,网址:www.tunnel.mobi/

2、将文件放到Tomcat目录下,在cmd中运行ngrok -config ngrok.cfg -subdomain xinzhi 8080

3、ngrok工具为在慕课网@LAOBI 看到的

2、微信公众号测试账号,随时测试,首先保证在测试账号下没有问题后在进行公众号的移植。

二、使用到在Java中发送一个Http请求,然后返回JSON参数,获得JSON参数,然后进行处理。

首先,获取将公众号测试号放到properties文件中,以便我们进行调用或者更换,如:url请用https

Properties代码 收藏代码

  1. AppID = wxf00**c3dd2ebfa0  
    AppSecret = 3cb220755f****506dc35391aa5c03ec  
    url = https://xinzhi.tunnel.mobi

这里url为我们映射到外网的地址,一会需要用到。然后需要两个工具类,该工具类作用是在Java的Action中发送http请求后获取到去返回值

这里使用的是@柳峰,关于服务器请求的代码http://blog.csdn.net/lyq8479/article/details/9841371,启用自己有相应的改动,以适应本项目的需求:

WeixinUtil.java 和 MyX509TrustManager.java

Java代码 收藏代码

  1. package com.zhtx.common.util;  
    import java.io.BufferedReader;  
    import java.io.InputStream;  
    import java.io.InputStreamReader;  
    import java.io.OutputStream;  
    import java.net.ConnectException;  
    import java.net.URL;  
    import javax.net.ssl.HttpsURLConnection;  
    import javax.net.ssl.SSLContext;  
    import javax.net.ssl.SSLSocketFactory;  
    import javax.net.ssl.TrustManager;  
    import org.slf4j.Logger;  
    import org.slf4j.LoggerFactory;  
    /**
     * 公众平台通用接口工具类
     * 
     * @author xinz
     * @date 2015-10-14
     */
    public class WeixinUtil {  
        private static Logger log = LoggerFactory.getLogger(WeixinUtil.class);  
        /**
         * 发起https请求并获取结果
         * 
         * @param requestUrl 请求地址
         * @param requestMethod 请求方式(GET、POST)
         * @param outputStr 提交的数据
         * @return JSONObject(通过JSONObject.get(key)的方式获取json对象的属性值)
         */
        public static String httpRequest(String requestUrl, String requestMethod, String outputStr) {  
            StringBuffer buffer = new StringBuffer();  
            try {  
                // 创建SSLContext对象,并使用我们指定的信任管理器初始化
                TrustManager[] tm = { new MyX509TrustManager() };  
                SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");  
                sslContext.init(null, tm, new java.security.SecureRandom());  
                // 从上述SSLContext对象中得到SSLSocketFactory对象
                SSLSocketFactory ssf = sslContext.getSocketFactory();  
                URL url = new URL(requestUrl);  
                HttpsURLConnection httpUrlConn = (HttpsURLConnection) url.openConnection();  
                httpUrlConn.setSSLSocketFactory(ssf);  
                httpUrlConn.setDoOutput(true);  
                httpUrlConn.setDoInput(true);  
                httpUrlConn.setUseCaches(false);  
                // 设置请求方式(GET/POST)
                httpUrlConn.setRequestMethod(requestMethod);  
                if ("GET".equalsIgnoreCase(requestMethod))  
                    httpUrlConn.connect();  
                // 当有数据需要提交时
                if (null != outputStr) {  
                    OutputStream outputStream = httpUrlConn.getOutputStream();  
                    // 注意编码格式,防止中文乱码
                    outputStream.write(outputStr.getBytes("UTF-8"));  
                    outputStream.close();  
                }  
                // 将返回的输入流转换成字符串
                InputStream inputStream = httpUrlConn.getInputStream();  
                InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");  
                BufferedReader bufferedReader = new BufferedReader(inputStreamReader);  
                String str = null;  
                while ((str = bufferedReader.readLine()) != null) {  
                    buffer.append(str);  
                }  
                bufferedReader.close();  
                inputStreamReader.close();  
                // 释放资源
                inputStream.close();  
                inputStream = null;  
                httpUrlConn.disconnect();  
            } catch (ConnectException ce) {  
                log.error("Weixin server connection timed out.");  
            } catch (Exception e) {  
                log.error("https request error:{}", e);  
            }  
            return buffer.toString();  
        }  
    }

对于https请求,我们需要一个证书信任管理器,这个管理器类需要自己定义,但需要实现X509TrustManager接口,代码如下:

Java代码 收藏代码

  1. package com.zhtx.common.util;  
    import java.security.cert.CertificateException;  
    import java.security.cert.X509Certificate;  
    import javax.net.ssl.X509TrustManager;  
    /**
     * 证书信任管理器(用于https请求)
     * 
     * @author xinz
     * @date 2015-10-14
     */
    public class MyX509TrustManager implements X509TrustManager {  
        public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {  
        }  
        public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {  
        }  
        public X509Certificate[] getAcceptedIssuers() {  
            return null;  
        }  
    }

微信返回参数的一个POJO类:

Java代码 收藏代码

  1. private String  openid;  //用户的唯一标识 
    private String  nickname;//用户昵称 
    private Integer sex;// 用户的性别,值为1时是男性,值为2时是女性,值为0时是未知 
    private String  province;//用户个人资料填写的省份 
    private String  city;//普通用户个人资料填写的城市 
    private String  country;// 国家,如中国为CN 
    private String  headimgurl;  // 用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空。若用户更换头像,原有头像URL将失效。 
    private String  privilege;// 用户特权信息,json 数组,如微信沃卡用户为(chinaunicom) 
    private String  unionid;// 只有在用户将公众号绑定到微信开放平
    
    
    
     
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 微信开发之获取OAuth2.0网页授权认证和获取用户信息进行关联的实例详解
  • ASP.NET实现QQ、微信、新浪微博OAuth2.0授权登录的实例详解

相关文章

  • 微信公众平台开发:OAuth2.0说明
  • 接收微信服务器post消息体的java代码示例
  • php微信开发之上传临时素材介绍
  • 微信开发之JS API支付的实例详解
  • 详细讲解微信指数与百度指数到底有什么区别
  • 自定义微信登录扫码样式解决办法
  • Force.com微信开发系列申请测试账号及回复图文消息
  • asp.net开发微信公众平台(2)多层架构框架搭建和入口实现
  • 微信公众平台开发:解决用户上下文(Session)问题
  • 微信开发之调起摄像头、本地展示图片、上传下载图片方法

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 微信微网站开发视频教程
    • 详解Android编程实现微信分享信息的方法
    • 微信web开发者工具介绍
    • 使用.NET微信开发PC端微信扫码注册和登录功能实现代码
    • 微信开发之判断当前客户端是否支持指定的js接口的方法
    • 微信公众平台开发获取关注者列表
    • asp.net开发微信公众平台(6)阶段总结、服务搭建、接入
    • 微信公众号开发系列教程一(调试环境部署)
    • 微信开发Emoji表情的实例教程
    • 关于技术窍门的详细介绍

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有