微信开发登录公众号_微信公众号开发非微信登录与注册 - CSDN
  • SpringBoot开发微信公众号(一)

    万次阅读 2017-12-08 15:50:41
    java开发微信公众号的环境搭建 前言:这段时间接触了下微信公众号开发,回顾下学习的过程,做了学习的总结。微信公众号开发有两种模式,第一种微信公众号提供的编辑模式,使用起来还是挺方便的。可以进行信息...

    java开发微信公众号的环境搭建

    前言:这段时间接触了下微信公众号的开发,回顾下学习的过程,做了学习的总结。微信公众号的开发有两种模式,第一种微信公众号提供的编辑模式,使用起来还是挺方便的。可以进行信息回复,自定义菜单等等。第二种提供了开发者模式。本学习系列采用的是java语言做后台服务器开发。当然也可以用其他语言实现,例如PHP等。本系列采用的是SpringBoot框架基础上开发,实现自定义菜单的建立,自定义回复消息,图片,音乐,实现智能翻译等等。

    一、完成个人订阅号的认证

      进行微信公众平台进行个人订阅号的注册和个人认证,官网地址https://mp.weixin.qq.com/。注册流程,课点击注册流程查看,个人订阅号注册完成进入主页,如下图


    有兴趣的可以在编辑模式进行尝试

    二、进入开发者模式下的配置

    在左侧的导航栏下方,选择开发下的基本配置


    说明:URL为java服务器的地址,此处需要用到内网穿透功能,实现的将内网的tomcat'服务的地址映射到公网的80端口,实现的方式有不少,这里推荐的是自己尝试的两种方式,相信大家也有所了解,一种ngrok,推荐使用的国内的服务器,低延时,实现域名固定。第二种,采用花生壳进行穿透。具体实现网上也有挺多,注册了一个,认证时需要6元。token与后台设置的保持一致就行。

    三.java后台配置

    3.1 springBoot项目搭建

    springBoot近段时间流行的微框架,减少了大量的xml配置,简化环境的搭建。介绍一种简单的springboot项目搭建,在官网http://start.spring.io/配置自己需要的组件,下载到本地,Myeclipse通过Maven导入,即可完成


    3.2 微信接入后台服务器

         参考官网api文档,https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421135319

    代码实现

    配置后台服务处理微信平台请求的处理器

    /**
     * 
     * 类名称: LoginController
     * 类描述: 与微信对接登陆验证
     * @author yuanjun
     * 创建时间:2017年12月5日上午10:52:13
     */
    @Controller
    public class LoginController {
    	@RequestMapping(value = "wx",method=RequestMethod.GET)
    	public void login(HttpServletRequest request,HttpServletResponse response){
    		System.out.println("success");
    		String signature = request.getParameter("signature");
    		String timestamp = request.getParameter("timestamp");
    		String nonce = request.getParameter("nonce");
    		String echostr = request.getParameter("echostr");
    		PrintWriter out = null;
    		try {
    			  out = response.getWriter();
    			if(CheckUtil.checkSignature(signature, timestamp, nonce)){
    				out.write(echostr);
    			}
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}finally{
    			out.close();
    		}
    		
    	}
    }

    import java.util.Arrays;
    /**
     * 
     * 类名称: CheckUtil
     * 类描述: 请求校验
     * @author yuanjun
     * 创建时间:2017年12月8日上午10:54:16
     */
    public class CheckUtil {
    
    	private static final String token = "自己设置,要与微信页面设置的一致";
    	public static boolean checkSignature(String signature,String timestamp,String nonce){
    		String[] str = new String[]{token,timestamp,nonce};
    		//排序
    		Arrays.sort(str);
    		//拼接字符串
    		StringBuffer buffer = new StringBuffer();
    		for(int i =0 ;i<str.length;i++){
    			buffer.append(str[i]);
    		}
    		//进行sha1加密
    		String temp = SHA1.encode(buffer.toString());
    		//与微信提供的signature进行匹对
    		return signature.equals(temp);
    	}
    }

    SHA1加密

    import java.security.MessageDigest;
    
    /**
     * 
     * 类名称: SHA1
     * 类描述: sha1加密
     * @author yuanjun
     * 创建时间:2017年12月5日上午11:10:01
     */
    public final  class SHA1 {
    	 private static final char[] HEX_DIGITS = {'0', '1', '2', '3', '4', '5',  
             '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};  
    	
    	/** 
    	* Takes the raw bytes from the digest and formats them correct. 
    	* 
    	* @param bytes the raw bytes from the digest. 
    	* @return the formatted bytes. 
    	*/  
    	private static String getFormattedText(byte[] bytes) {  
    		int len = bytes.length;  
    		StringBuilder buf = new StringBuilder(len * 2);  
    		// 把密文转换成十六进制的字符串形式  
    		for (int j = 0; j < len; j++) {  
    		buf.append(HEX_DIGITS[(bytes[j] >> 4) & 0x0f]);  
    		buf.append(HEX_DIGITS[bytes[j] & 0x0f]);  
    		}  
    		return buf.toString();  
    	}  
    	
    	public static String encode(String str) {  
    		if (str == null) {  
    		return null;  
    		}  
    		try {  
    		MessageDigest messageDigest = MessageDigest.getInstance("SHA1");  
    		messageDigest.update(str.getBytes());  
    		return getFormattedText(messageDigest.digest());  
    		} catch (Exception e) {  
    		throw new RuntimeException(e);  
    		}  
    	}  
    }
    

    3.3 application的配置,也可以不配置数据源,在启用项目时,则需要排除数据库的连接

    server.port = 8080
    server.context-path = /weixin
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver
    spring.datasource.url=jdbc:mysql://localhost:3306/websocket
    spring.datasource.username=root
    spring.datasource.password=123456

    3.4 启动tomcat服务,即运行主方法即可

    将内网穿透映射搭建好,将URL和token配置到微信平台的基本配置中,点击确认,成功后,服务器配置变成已启用。完成配置



    展开全文
  • 微信公众号开发之授权登录

    万次阅读 2019-05-27 22:34:05
    微信公众号开发之授权登录 1、微信公众号技术开发文档阅读 微信公众号开发首先对开发文档的阅读,技术版本可能有变化,博客里面的内容一段时间过后,可能就出现有些小问题。 微信公众号技术开发文档:...

     

    微信公众号开发之授权登录

    1、微信公众号技术开发文档阅读

    微信公众号的开发首先对开发文档的阅读,技术版本可能有变化,博客里面的内容一段时间过后,可能就出现有些小问题。

    微信公众号技术开发文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1445241432

    2、微信公众号开发工具

    微信公众号开发工具,可以使用微信web开发者工具,可以很好的模拟微信公众号开发的大部分功能(微信公众号支付不行,目前,其他,如授权登录,消息模板,地理位置等等都是可以的)。

    微信web开发者工具:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1455784140

    只要关注就行,使用测试号,其他的账号使用需要关注你的测试号才能使用。

    3、授权登录开发准备

    3.1、使用第三方工具,生成内网映射,可以使用花生壳,生成一个可用的域名,在授权的时候使用

    花生壳地址:https://hsk.oray.com/

    3.2、可以使用微信公众号的测试号,项目上线请申请认证号,认证需要一些费用,但对于微信公众号的大部分的功能实现,已经足够了,目前微信公众号开发的微信支付是不支持的。

    申请测试账号,微信公众平台:https://mp.weixin.qq.com/

    3.3、微信公众号授权登录的微信开发配置,网页授权获取用户基本信息修改

    域名是从花生壳中获取,在授权回调页面域名中不要加上http://,目前微信公众号开发的配置路径都是一样,不要添加http://

    这边有一个注意的地方,认证号即上线的时候微信公众号授权登录,需要上传一个文件到服务器中,这个在微信公众号认证号的配置的时候是有提示的,只需要上传认证文件,到服务器就行了。

    4、微信授权登陆开发的步骤

    1 第一步:用户同意授权,获取code

    2 第二步:通过code换取网页授权access_token、openid

    3 第三步:刷新access_token(如果需要)

    4 第四步:拉取用户信息(需scope为 snsapi_userinfo)

    snsapi_base: 到第二步就结束了,获取到openid,其他操作在这个基础上(比如记录该用户访问时间次数信息)

    snsapi_userinfo: 获取openid和用户资料(昵称、头像、国、省、城市、性别、权限)

    第一步:

    @RequestMapping("loginInit.do")
    public String loginInit(HttpServletRequest request,HttpServletResponse response)  {
    	    //回调地址,要跟下面的地址能调通(getWechatGZAccessToken.do)
    	    String backUrl="http://3261045722cwy.vicp.io/wx/getWechatGZAccessToken.do";
    	    /**
    		*这儿一定要注意!!首尾不能有多的空格(因为直接复制往往会多出空格),其次就是参数的顺序不能变动
    	    **/
    	    //AuthUtil.APPID微信公众号的appId
    	    String url ="https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + AuthUtil.APPID+
    				"&redirect_uri=" + URLEncoder.encode(backUrl,"UTF-8")+
    				"&response_type=code" +
    				"&scope=snsapi_userinfo" +
    				"&state=STATE#wechat_redirect";
    	    return "redirect:"+url;
    }
    

    下面就可以实现了,对于微信公众号一般做免登陆,可以将用户跟openid,进行绑定,查询是否已经绑定,从而不用进行用户登陆

    @RequestMapping("getWechatGZAccessToken.do")
    public String getWechatGZAccessToken(HttpServletRequest request,HttpServletResponse response) throws Exception{
    		//微信公众号的APPID和APPSECRET
    		String code=request.getParameter("code");
            String url="https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + AuthUtil.APPID+
                    "&secret=" +AuthUtil.APPSECRET+
                    "&code=" +code+
                    "&grant_type=authorization_code";
            String result = HttpClientManager.getUrlData(url);
    		Map<String,Object> data = JSONObject.fromObject(result);
            String openid=data.get("openid").toString();
            String token=data.get("access_token").toString();
            //获取信息
            String infoUrl="https://api.weixin.qq.com/sns/userinfo?access_token=" +token+
                    "&openid=" +openid+
                    "&lang=zh_CN";
            String infoResult = HttpClientManager.getUrlData(infoUrl);
            
    	}

     HttpClientManager工具类

    package com.baosteel.qcsh.wap.controllers.thirdpartylogin.wechat;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.net.URLConnection;
    
    public class HttpClientManager {
    	/**
    	 * 执行url请求数据
    	 * 
    	 * @param urlStr
    	 * @return
    	 * @throws Exception
    	 * @throws IOException
    	 */
    	public static String getUrlData(String urlStr) throws Exception {
    		URL url = new URL(urlStr);
    		URLConnection connection = url.openConnection();
    		// 一旦发送成功,用以下方法就可以得到服务器的回应:
    		String sCurrentLine = "";
    		StringBuffer sTotalString = new StringBuffer();
    		InputStream l_urlStream = connection.getInputStream();
    		// 传说中的三层包装阿!
    		BufferedReader l_reader = new BufferedReader(new InputStreamReader(
    				l_urlStream, "UTF-8"));
    		while ((sCurrentLine = l_reader.readLine()) != null) {
    			sTotalString.append(sCurrentLine);
    		}
    		return sTotalString.toString();
    	}
    
    	/**
    	 * 执行url请求数据
    	 * 
    	 * @param urlStr
    	 * @return
    	 * @throws Exception
    	 * @throws IOException
    	 */
    	public static String postUrlData(String urlStr, String data)
    			throws Exception {
    		URL url = new URL(urlStr);
    		HttpURLConnection http = (HttpURLConnection) url.openConnection();
    		http.setRequestMethod("POST");
    		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
    		OutputStream os = http.getOutputStream();
    		os.write(data.getBytes("UTF-8"));// 传入参数
    		os.flush();
    		os.close();
    		// 一旦发送成功,用以下方法就可以得到服务器的回应:
    		String sCurrentLine = "";
    		String sTotalString = "";
    		InputStream l_urlStream = http.getInputStream();
    		// 传说中的三层包装阿!
    		BufferedReader l_reader = new BufferedReader(new InputStreamReader(
    				l_urlStream, "UTF-8"));
    		while ((sCurrentLine = l_reader.readLine()) != null) {
    			sTotalString += sCurrentLine;
    		}
    		return sTotalString;
    	}
    }
    

     

     

     

     

     

     

     

     

    展开全文
  • 微信企业号(公众号)开发流程汇总

    千次阅读 2019-08-14 17:35:16
    微信企业号与微信公众号的配置流程大同小异(殊途同归)。 2,准备工作 2.1,企业号的申请与域名的申请及备案 企业号(公众号)申请需要提前申请,因为有些东西需要备案,审核啥的; 测试环境/生产环境的域名...

    1,前言

    微信企业号与微信公众号的配置流程大同小异(殊途同归)。

     

    2,准备工作

    2.1,企业号的申请与域名的申请及备案

             企业号(公众号)申请需要提前申请,因为有些东西需要备案,审核啥的;

             测试环境/生产环境的域名需要提前准备,无论是个人还是企业应用搭建都需要提前准备,因为域名备案是需要一定时间的;

    2.2,域名与企业号(公众号)配置产生联系的地方

            2.2.1,网页授权及JS-SDK的域名白名单校验

     

            2.2.2,企业微信授权登录校验

                       点击上图下方中间的“企业微信授权登录”,跳转到下图,在框起来的部分将对应环境的域名添加上

     

    2.3,菜单的配置

            2.3.1,工作台的相关配置

                       1)子应用跳转

                           常规情况下,点击子应用,会默认跳转到消息列表页(如下图)

     

                            但如果想要点击按钮直接跳转到应用(此时消息列表可以通过首页,点击消息框跳转),则需要先配置工作台应用主页(该主页的配置连接为子应用项目资源的访问路径,例如www.qq.com);同时自定义菜单还是该怎么配怎么配(这一步只是想点击子应用的时候不跳转到消息列表而是直接跳转子应用,所以如果不想如此处理(即还是想按照默认模式,先跳转消息列表,然后在做对应的操作)可以只配置自定义菜单,不去管工作台应用主页这个功能

     

                       2)工作台应用的展示(默认是列表模式,下图为选了宫格模式之后的展示)

     

     

     

    2.4 微信JS-SDK的使用

            2.4.1,JS-SDK的API文档

            2.4.2,JS-SDK授权,关于OAuth2.0链接

                      微信的授权流程是基于OAuth2.0(关于概念可以参考https://www.jianshu.com/p/9d0264d27c3b)的,通常我们在处理第三方授权登录的时候使用的都是静默授权(微信公众号有一个显示授权的概念,而企业号没有这个概念,它只有一个类似静默授权的过程,即授权过程不暴露给用户,用户只能感受到浏览器似乎重定向了一次)

                    上述授权的流程大致为:

                            1)给应用配置访问链接,该链接为参考文档-身份验证-构造网页授权链接部分所述的链接

     

                            2)用户点击子应用,访问配置的访问链接所指向的地址

                            3)接第二步,当前地址指向一个授权页,该授权页会根据访问链接上的一些参数(例如appid,即企业的CorpID)返回一个授权令牌code,并将其拼在重定向链接(即访问链接上redirect_uri参数的值)上;然后跳转到重定向链接所指向的地址(该地址即为子应用项目资源目录所在地址

                            4)从第四步开始,项目资源正式开始访问;在访问资源之前,调用后端给的授权接口(该接口用来接收重定向链接上拼接的code,然后在后台用该code和access_token来跟微信服务器交换目标用户信息,值得一提的是,微信静默授权只能拿到用户的基本信息,同时该信息为企业通讯录里已经维护的用户信息)将重定向链接上拼接的授权令牌code传到后端交换用户的基本信息(在这个过程中实际上是可以将token一并返回,但有时候,部分平台的token实际上是一个封装好的接口来获取的,所以要根据实际情况来处理(但用户信息确是在这一步返回的)

                            5)token和用户信息可以酌情考虑在会话期间内缓存在本地(虽然这是一句废话,但希望这真是一句赘述)       

                            6)上述过程中的一些注意事项:

                                    a)上述过程中,授权令牌code是有时效限制的,它的失效为5分钟,且在这5分钟之内只能使用一次,也就是说,如果code在请求回来后,如果你在5分钟内没有使用它(或是5分钟内使用过一次之后),当前这个code就自动失效了。

                                   b)后端通过access_token和授权令牌code换去用户信息的时候会出现一些问题,例如40029这个错误,它的含义是授权令牌code错误,网上有指出302跳转会出现重定向问题(https://blog.csdn.net/hhchor/article/details/53450189);但需要说明的是,后端在换取用户信息的时候,拿去交换的参数是有两个;尽管40029这个错误是报的不合法的code,但最后排查了下,发现生成一个错误的access_token,跟code去交换信息的时候,它不会报access_token不合法,而是报code不合法(这波操作简直666)。。。

                                       指出这个问题的意义在于,无论是微信企业号还是微信公众号开发,在实际开发过程中,会出现很多奇奇怪怪的错误,如果排除了可能导致该问题的所有因素,那么即使有多么不可能,也该尝试怀疑一下是不是外部因素导致的。

                                   c)微信jssdk调用初始化过程中需要的三个参数(这三个参数为生产ticket的相关参数,ticket用于生产access_token,而access_token用于跟code一起交换用户数据);建议了解下开发者文档里的JS-SDK使用权限签名算法这一节以及常见错误及解决方法这一节,因为有些参数是需要在后端缓存的,不能频繁调用(频繁调用会被拉黑的哦)

     

     

     

                            7)微信外部扫一扫(栗子:微信问卷调查)

    扫一扫这个操作实质上是微信客户端解析一个二维码拿到一个访问链接(该链接就是上述的授权访问链接),并且当微信判断该二维码的内部信息是一个链接的时候将自动打开一个webview并访问该链接。所以本质上通过扫一扫访问一个应用和点击应用图标访问该应用没什么太大区别。

     

    3,鸣谢

        1,感谢https://www.jianshu.com/p/9d0264d27c3b对于OAuth2.0的解释

        2,感谢https://blog.csdn.net/hhchor/article/details/53450189对于企业号开发过程中40029错误码的相关解决方案

     

    展开全文
  • 微信公众号网页授权登录

    万次阅读 2018-09-11 09:08:37
    微信公众号网页授权登录: 前端时间做了一个微信公众号的项目,就是微信公众号的菜单点击我的个人中心,就向用户授权登录 获取用户的信息,进行业务逻辑的操作,微信公众号官方文档,这是我写的文章,里面有很多...

    微信公众号网页授权登录:
    前段时间做了一个微信公众号的项目,就是微信公众号的菜单点击我的个人中心,就向用户授权登录
    获取用户的信息,进行业务逻辑的操作,微信公众号官方文档,这是我写的文章,里面有很多微信的官方
    文档,希望对大家有用:https://blog.csdn.net/qq_41971087/article/details/82466647
    在微信公众号官方文档中,看到微信页面开发,
    这里写图片描述
    点击微信网页授权,这里大家一定要仔细的去观看文档中的关于网页授权回调域名的说明
    关于网页授权的两种scope的区别说明,关于网页授权access_token和普通access_token的区别
    关于特殊场景下的静默授权,这里有些是需要在微信公众平台后台去配置路径,一定要仔细的去看文档,
    还有就是微信公众号的页面放的路径,大家一定要去仔细的观看文档,不然会出现微信公众号,找不到页面
    的问题,这里很重要,不然后面获取微信用户信息的接口会很吃力

    这里写图片描述
    当我们点击公众中的个人中心时,我们就调起微信公众号的授权登录,进行接口登录操作,当我们拿到用户信息,就
    跳转到页面中,并且把用户的信息展示到页面中,在进行项目的业务操作,让我们用JAVA实现这个功能:

    首先创建菜单时,类型使用view代码实例如果有不会微信公众号创建菜单的请查看我的文章:
    https://blog.csdn.net/qq_41971087/article/details/82499501

    这里写图片描述
    注意,这个接口是跳转到是我们Controller层的业务接口出来最好是在线上去开发,测试这个功能,下面是Mvc的接口:
    WXLoginController.java:
    /**
    * 微信公众号网页授权登录:
    * @param request
    * @param response
    * @return
    * @throws ParseException
    */
    @RequestMapping(value = “/wxLoginss”, method = RequestMethod.GET)
    public String wxLogin(HttpServletRequest request,HttpServletResponse response) throws ParseException {

        // 第一步:用户同意授权,获取code
        //WXAuthUtil.APPID 微信公众号的appenid 这个是微信公众号后台获取的
        String url ="https://open.weixin.qq.com/connect/oauth2/authorize?appid="+WXAuthUtil.APPID
                + "&redirect_uri="+URLEncoder.encode("https://xxxxx/xxxxx/callBackss.do") //这个是我们回调的地址 在这里进行出来获取到用户的心
                + "&response_type=code"
                + "&scope=snsapi_userinfo"
                + "&state=123#wechat_redirect";
    
        logger.info("--forward重定向地址-------:" + url);
        return "redirect:"+url;//必须重定向,否则不能成功
    }
    

    /**
    * 微信网页登录回调接口
    * @param wechatUser
    * @param modelMap
    * @param req
    * @param resp
    * @return
    * @throws ServletException
    * @throws IOException
    */
    @RequestMapping(value = “/callBackss”, method = RequestMethod.GET)
    public String callBack(ModelMap modelMap,HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //如果用户同意授权,页面将跳转至 redirect_uri/?code=CODE&state=STATE
        //https://xxxxx/xxxxx/callBackss.do?code=CODE&state=STATE 
        //获取code  code作为换取access_token的票据
        String code =req.getParameter("code");
        System.out.println("授权返回code信息---------:"+code);
      //第二步:通过code换取网页授权access_token (获取openid接口)
        //WXAuthUtil.APPID 公众号的Appid
        //WXAuthUtil.APPSECRET 公众号的APPSECRET 可以在微信公众号后台获取
         String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="+WXAuthUtil.APPID
                + "&secret="+WXAuthUtil.APPSECRET
                + "&code="+code
                + "&grant_type=authorization_code";
    
         //发送请求 get提交 拿code凭证去获取openid和access_token
        JSONObject jsonObject = WXAuthUtil.doGetJson(url);
    
        String openid = jsonObject.getString("openid");
        String access_token = jsonObject.getString("access_token");
        String refresh_token = jsonObject.getString("refresh_token");
    
        //拿到用户openid 和access_token 去获取用户信息
        //第五步,验证access_token是否过期
        String chickUrl="https://api.weixin.qq.com/sns/auth?access_token="+access_token+"&openid="+openid; 
        JSONObject chickuserInfo = WXAuthUtil.doGetJson(chickUrl);
    
        //由于access_token拥有较短的有效期,当access_token超时后,可以使用refresh_token进行刷新,refresh_token有效期为30天,当refresh_token失效之后,需要用户重新授权
        //如果发送错误,就有可能是access_token过期了 errcode 的值是 0 那么就是没有问题,access_token没有过期,不等于0就是过期,那么我们要去刷新access_token
        if(!"0".equals(chickuserInfo.getString("errcode"))){
            //第三步刷新access_token(刷新access_token接口)
            String refreshTokenUrl="https://api.weixin.qq.com/sns/oauth2/refresh_token?appid="+openid+"&grant_type=refresh_token&refresh_token="+refresh_token;
    
            JSONObject refreshInfo = WXAuthUtil.doGetJson(chickUrl);
    
            access_token=refreshInfo.getString("access_token");
        }
    
        //获取用户拿到openid 和access_token去获取用户信息,在页面中进行业务处理,获取存储在数据库中:
        //第四步(获取用户接口)
       String infoUrl = "https://api.weixin.qq.com/sns/userinfo?access_token="+access_token
                + "&openid="+openid
                + "&lang=zh_CN";
    
        JSONObject userInfo = WXAuthUtil.doGetJson(infoUrl);
    
        System.out.println("userInfo------:"+userInfo.toString());  
        userInfo.getString("nickname");
        userInfo.getString("sex");
        userInfo.getString("country");
        userInfo.getString("province");
        userInfo.getString("city");
        userInfo.getString("headimgurl");
        userInfo.getString("language");
        userInfo.getString("privilege");
        userInfo.getString("openid");
        userInfo.getString("unionid");
        Map map=new HashMap();
        map.put("openId", userInfo.getString("openid"));
        modelMap.put("nickname", userInfo.getString("nickname"));//保存授权用户 
        return "wx/callBack";
    }
    

    添加的路径上面的.do是因为在springMvc中配置了后缀名事.do的配置,可以自己编写更改,
    其实这个微信公众号网页登录的思路和流程:

    第一步:获取到code凭证,
    第二步:拿到code凭证去获取用户openid和access_token,refresh_token
    第三步:刷新access_token,也是那openid和refresh_token
    第四步:就是拿openid和access_token去获取用户信息
    第五步:就是拿openid和access_token去获取用户信息,看能不能获取到,获取不到在调用刷新access_token的接口
    在去调用第四步。
    好了微信网页授权登录就到这里了,如果操作好的话应该是没有什么问题的,上面代码都有注释,不懂的或者是有
    问题的可以在下发评论,我会及时的回复。

    展开全文
  • SpringBoot开发微信公众号

    千次阅读 2019-03-29 11:24:27
    SpringBoot开发微信公众号SpringBoot开发微信公众号注册微信公众号公众号配置合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容...
  • 首先,要有自己的公众号(这句是废话),个人可以申请微信公众号的订阅号,企业才可以申请服务号,其次要有云空间或者服务器,并且将服务器IP添加至微信公众号开发配置中的IP白名单,这只是基础的准备工作 ...
  • 综合笔者多年的微信公众号以及微信产品开发经验,本篇内容把微信公众号测试账户的接口配置过程分享给广大开发者朋友,开发语言是Java,采用目前流行的springmvc框架开发开发前必读以及准备工作: 1、微信公众...
  • 微信公众号开发基本流程

    万次阅读 多人点赞 2019-04-26 09:40:21
    过年前后做了个微信公众号项目,已经过去一段时间了,抽空回忆总结下基本流程吧,不然很快估计自己就忘了。。 微信公众平台官网:https://mp.weixin.qq.com 文章目录一、注册公众号二、了解公众号管理页面三、必备...
  • 二、微信开发的基本配置 1.配置IP白名单 2.服务器配置 3.申请测试号 微信公众号开发系列点击查看所有开发文章 一、注册一个微信公众号 关于注册这点我就简单说一下,需要注意的就是,微信公众号一般用的...
  • 微信公众号开发小记(一)开篇

    万次阅读 2018-08-10 12:33:33
    接下来的时间里,我会以连载的形式分享微信公众号开发的相关文章,其中也会说一下我遇到的问题以及解决的思路,以及在开发过程中的一些感悟!因为是一个连载系列,所以会以一个初学者,也就是接触过编程但是没有接触...
  • Java微信支付(公众号、扫码)

    热门讨论 2020-07-29 14:19:26
    1.针对Java语言和公众号支付,只是简单对台后进行封装,主要帮我们在微信支付那些事,生成请求XML及签名、解析XML、退款(请求需要双向证书),现在还新增扫码支付模式一模式二及网页测试等。在使用的过程你需要做...
  • 微信登录最重要的两个返回信息,一个是UnionId,一个是OpenId。两者之间有着必然的联系。 首先,先来理一下微信开放平台的架构。开发微信登录,必须有一个开放平台账号(公众号授权可以不用,后面会讲到)。开放...
  • 微信开发-公众号支付(1)-获取openid

    千次阅读 2017-10-31 15:40:29
    微信开发-公众号支付(1)-获取openid记录下开发微信支付过程中踩过的坑。微信公众号支付开发之前,需要准备的东西APPID , APPSECRET , PAYKEY 注意:此处的公众平台和商户平台必须是绑定的appid 和 appsecret 可以从...
  • 微信开放平台 公众号第三方平台开发 教程三 一键登录授权给第三方平台
  • 微信公众号开发教程(一) 验证接入

    万次阅读 多人点赞 2018-06-22 14:22:35
    微信公众号开发教程(一)验证接入本篇文章主要介绍了微信公众号开发接入详细流程,希望对刚接触公众号开发的同学有所帮助,有兴趣的同学可多多关注叩丁狼公众号,后续会更新不同的公众号小案例。公众号的分类我们平常...
  • 微信获取,操作公众号文章 项目地址:https://gitee.com/wrzhxy/wx_article 我以为微信支付和微信企业付款文档就够坑爹了,直到我遇到了微信获取公众号文章。。。 微信获取公众号文章就是指在第三方平台获取公众号...
  • 求大神给个 微信开发 微信公众号sdk 调用扫一扫功能 java 项目 demo
  • 微信公众号开发详细教程

    千次阅读 2019-05-24 17:53:17
    微信公众号开发之配置开发服务器 微信公众号开发之获取access_token 微信公众号开发之关键词回复 微信公众号开发之模板消息 微信公众号开发之授权回调 ...
  • 微信公众号之开发者工具

    万次阅读 2020-04-06 16:49:32
    这次的项目主要是关于微信公众号的一个开发,本人这次分配的模块是后台微信公众号的支付和退款,第一次接触微信公众的项目刚开始一脸懵逼,开发过程中遇到各种坑,所以想自己写一篇详细的关于微信公众号开发,希望...
  • 微信 之 安卓 安卓 的 页面 跳转 之生成 一个 页面 ,然后又个×按键 ,一键回到 微信主界面,所以 我们只能 在 自己的html上添加 一个 返回键 ,这样 一个 页面上有两个 放回键 ,不太好看,这也是没有办法的事情...
1 2 3 4 5 ... 20
收藏数 123,445
精华内容 49,378
关键字:

微信开发登录公众号