微信开发(1)-获取openid和userinfo
2017-07-15 00:54
603 查看
之前没有接触过微信开发,出来工作后第一份工作是做微信开发,我的任务只是写一个接口。
进入正题,微信开发,本文的微信开发是指微信公众号开发,本文从微信开发的最基础部分做一个简单的记录,并且附上自己写的一段代码。
openid:openid其实就是一个数据库主键,是腾讯为每个公众号的唯一标识
userinfo:其实就是用户信息,这些可以授权获取到的信息及其有限,就是用户名性别地址之类的
其实微信开发文档写得很清楚了,本人啰嗦了点所以记下来了
一般我们进入一个公众号,它可能会让我们授权,其实这样他就获取到我们的信息,他可以保存到数据库,作为会员信息,这样就省去了注册的一个步骤
首先获取授权这一步,其实是开发者后台获取用户code的一个手段,code可以干嘛?code可以作为一个钥匙,通过微信提供的接口,携带着开发者的appid和秘钥,以及code
就可以获取到用户的openid和accesstoken,其实获取到这2个没什么卵用,然后你可以利用openid和accesstoken通过另外一个接口获取到用户信息,这就有用啦。
以下附上自己写的菜得抠脚的代码,还忘个各位大佬完善一些细节
里面有一些需要完善的地方,需要各位大佬自己修改一下,我写不出优雅的代码,就这样吧,仅此记录而已 --Sam
进入正题,微信开发,本文的微信开发是指微信公众号开发,本文从微信开发的最基础部分做一个简单的记录,并且附上自己写的一段代码。
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()); @Autowired private 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"));//跳转用户最原始访问的连接 } }
里面有一些需要完善的地方,需要各位大佬自己修改一下,我写不出优雅的代码,就这样吧,仅此记录而已 --Sam
相关文章推荐
- 微信开发自定义菜单获取OpenID
- 微信小程序开发之获取openid及用户信息
- 微信移动应用接入开发, Android 授权微信登录获取openid,unionid等,score参数错误或者没有scope权限
- 微信二次开发点击菜单openId的获取
- 微信小程序支付开发笔记1--获取openId
- MVC 微信开发获取用户OpenID
- 微信开发,获取用户的openid
- 微信开发-公众号支付(1)-获取openid
- 微信开发之微信网页授权获取openid
- 微信小程序开发之用户系统 一键登录 获取session_key和openid
- .NET微信开发通过Access Token和OpenID获取用户信息
- 微信公众号开发系列-获取微信OpenID
- 微信测试号开发之九 微信网页授权:页面获取用户openid
- 微信测试号开发之九 微信网页授权:页面获取用户openid
- 微信开发--怎么获取用户的信息(openid)
- php CI框架微信开发小记——获取openid和其他相关用户信息
- 微信公众号开发系列-获取微信OpenID
- php之微信开发获取用户openid的方法
- 微信会员注册开发【带源码】:网页授权,得到code后在当前页面获取openid,js+php实现跨域请求
- 微信小程序开发一键登录 获取session_key和openid实例