微信开发(1)-获取openid和userinfo
来源:互联网 发布:重庆外包网络推广 编辑:程序博客网 时间:2024/06/15 01:35
之前没有接触过微信开发,出来工作后第一份工作是做微信开发,我的任务只是写一个接口。
进入正题,微信开发,本文的微信开发是指微信公众号开发,本文从微信开发的最基础部分做一个简单的记录,并且附上自己写的一段代码。
openid:openid其实就是一个数据库主键,是腾讯为每个公众号的唯一标识
userinfo:其实就是用户信息,这些可以授权获取到的信息及其有限,就是用户名性别地址之类的
其实微信开发文档写得很清楚了,本人啰嗦了点所以记下来了
一般我们进入一个公众号,它可能会让我们授权,其实这样他就获取到我们的信息,他可以保存到数据库,作为会员信息,这样就省去了注册的一个步骤
首先获取授权这一步,其实是开发者后台获取用户code的一个手段,code可以干嘛?code可以作为一个钥匙,通过微信提供的接口,携带着开发者的appid和秘钥,以及code
就可以获取到用户的openid和accesstoken,其实获取到这2个没什么卵用,然后你可以利用openid和accesstoken通过另外一个接口获取到用户信息,这就有用啦。
以下附上自己写的菜得抠脚的代码,还忘个各位大佬完善一些细节
package wechat.Common;/** * Created by sam on 2017/7/13. *//** * 授权后重定向的回调链接地址,请使用urlEncode对链接进行处理 * 应用授权作用域,snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid), * snsapi_userinfo (弹出授权页面可通过openid拿到昵称、性别、所在地。 * 并且,即使在未关注的情况下,只要用户授权,也能获取其信息) */public class URLBean { public static final String appid = "这个写自己的"; public static final String appsecret = "这个写自己的"; public static final String GETCODE = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE#wechat_redirect"; public static final String GETACCESSTOKENANDID = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code"; public static final String REFRESHTOKEN = "https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN "; //需要用get访问,https协议 public static final String USERINFO = "https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN"; public static final String BASEURL = "/grant/getCode?visitUrl=VISIT"; public static final String PROJECT_URL = "http://2691670703.tunnel.qydev.com/WeChat";}
package wechat.Common;import org.apache.log4j.Logger;import javax.servlet.*;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import java.io.IOException;import java.net.URLEncoder;/** * Created by sam on 2017/7/13. */public class WechatFilter implements Filter{private Logger logger = org.apache.log4j.Logger.getLogger(this.getClass()); public void init(FilterConfig filterConfig) throws ServletException { // } public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest)servletRequest; HttpServletResponse response = (HttpServletResponse)servletResponse; HttpSession session = request.getSession(); String openId = (String) session.getAttribute("openid"); String URL = request.getRequestURI(); if(isNeedGrant(URL)){if(openId!=null){filterChain.doFilter(request,response);}else{String queryString = request.getQueryString();String redirect_url = "";if(queryString!=null) {redirect_url = request.getRequestURL().toString()+"?"+queryString;}else {redirect_url = request.getRequestURL().toString();}String url = URLBean.PROJECT_URL+URLBean.BASEURL.replace("VISIT",URLEncoder.encode(redirect_url, "UTF-8"));String target = URLBean.GETCODE.replace("APPID",URLBean.appid).replace("SCOPE","snsapi_userinfo").replace("REDIRECT_URI", url);response.sendRedirect(target);}}else{filterChain.doFilter(request,response);} } public void destroy() { // }/** * 需要判断是否拉取openid不然它会无限循环进来 */public boolean isNeedGrant(String url){//判断是否是正在走向我定义好的接口//if (url.contains("/grant/getCode")){//return true;//}//return false;return true;}}
package wechat.Common;import org.apache.log4j.Logger;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import wechat.Entity.WeChatUser;import wechat.Service.WeChatUserService;import java.net.URLDecoder;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;/** * Created by sam on 2017/7/13. */@Controller@RequestMapping("/grant")public class Grant {private Logger logger = Logger.getLogger(this.getClass());@Autowiredprivate WeChatUserService weChatUserService;//Illegal character in scheme name at index 0 @RequestMapping("/getCode") public void getCode(HttpServletRequest HttpServletRequest, HttpServletResponse httpServletResponse)throws Exception{ //这里拉取code,然后重定向到获取openId和accessToken的地址 HttpSession httpSession = HttpServletRequest.getSession(); String code = HttpServletRequest.getParameter("code"); String redirect_url = HttpServletRequest.getParameter("visitUrl"); redirect_url = URLDecoder.decode(redirect_url,"UTF-8"); String url = URLBean.GETACCESSTOKENANDID.replace("APPID", URLBean.appid). replace("SECRET", URLBean.appsecret).replace("CODE", code); String resp = HttpClientUtil.doGet(url); AccessTokenOpenId ao = JsonUtils.jsonToPojo(resp, AccessTokenOpenId.class); String openId = ao.getOpenid(); httpSession.setAttribute("openid", openId); WeChatUser chatUser = weChatUserService.getWeChatUserByOpenId(openId); if(chatUser==null) { String userinfojson = HttpClientUtil.doGet(URLBean.USERINFO .replace("ACCESS_TOKEN",ao.getAccess_token()).replace("OPENID", ao.getOpenid())); chatUser = JsonUtils.jsonToPojo(userinfojson, WeChatUser.class); weChatUserService.insert(chatUser); } httpSession.setAttribute("user",chatUser); httpServletResponse.sendRedirect(URLDecoder.decode(redirect_url, "UTF-8"));//跳转用户最原始访问的连接 } }
阅读全文
0 0
- 微信开发(1)-获取openid和userinfo
- java微信开发-之如何获取openid 和用户信息
- 微信开发-公众号支付(1)-获取openid
- 微信开发自定义菜单获取OpenID
- 36.微信开发获取openId
- MVC 微信开发获取用户OpenID
- 微信获取code和openid
- 微信获取code和openid
- 微信获取openID和用户信息
- 微信获取openid
- 微信获取openid
- 获取微信OpenId
- 获取微信OpenID
- 获取微信openid
- 微信获取openid
- 微信获取openid
- 微信公众号开发系列-获取微信OpenID
- 微信公众号开发系列-获取微信OpenID
- php入门
- python一道关于文件中最长行的问题
- java 学习笔记-servlet翻页小Demo
- java Maven Tomcat JAVA_HOME not found in your environment. 错误
- 欢迎使用CSDN-markdown编辑器
- 微信开发(1)-获取openid和userinfo
- 记Linnux下C++转Windows各种心得
- Deep Neural Networks for Object Detection论文翻译
- 第十五周 leetcode 77. Combinations(Medium)
- 累
- sort3——第一次有模有样的写工程
- Redis 基础知识(5种数据类型基本操作)
- QBXT
- Farm Tour (最小费用最大流)