微信网页开发之授权登录(java实现)
建议先去查看微信开发官方文档:
https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842
第一步:用户同意授权,获取code
-
code说明 : code作为换取access_token的票据,每次用户授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期。
第二步:通过code换取网页授权access_token
-
Http请求工具类
package com.sjyx.contest.common.utils; import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.util.EntityUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; import java.net.URLDecoder; public class HttpRequestUtil { private static Logger logger = LoggerFactory.getLogger(HttpRequestUtil.class); //日志记录 /** * post请求 * @param url url地址 * @return */ public static String httpPost(String url){ //post请求返回结果 DefaultHttpClient httpClient = new DefaultHttpClient(); HttpPost method = new HttpPost(url); String str = ""; try { HttpResponse result = httpClient.execute(method); url = URLDecoder.decode(url, "UTF-8"); /**请求发送成功,并得到响应**/ if (result.getStatusLine().getStatusCode() == 200) { try { /**读取服务器返回过来的json字符串数据**/ str = EntityUtils.toString(result.getEntity(),"UTF-8"); } catch (Exception e) { logger.error("post请求提交失败:" + url, e); } } } catch (IOException e) { logger.error("post请求提交失败:" + url, e); } return str; } /** * 发送get请求 * @param url 路径 * @return */ public static String httpGet(String url){ //get请求返回结果 String strResult = null; try { DefaultHttpClient client = new DefaultHttpClient(); //发送get请求 HttpGet request = new HttpGet(url); HttpResponse response = client.execute(request); /**请求发送成功,并得到响应**/ if (response.getStatusLine().getStatusCode() == org.apache.http.HttpStatus.SC_OK) { /**读取服务器返回过来的json字符串数据**/ strResult = EntityUtils.toString(response.getEntity(),"UTF-8"); } else { logger.error("get请求提交失败:" + url); } } catch (IOException e) { logger.error("get请求提交失败:" + url, e); } return strResult; } }
第三步:刷新access_token(如果需要)
第四步:拉取用户信息(需scope为 snsapi_userinfo)
-
如果网页授权作用域为snsapi_userinfo,则此时开发者可以通过access_token和openid拉取用户信息了。 请求方法
附:检验授权凭证(access_token)是否有效
-
请求方法
-
参数 描述 access_token: 网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同 openid: 用户的唯一标识 正确的JSON返回结果:
{ “errcode”:0,“errmsg”:“ok”}