微信网页开发之授权登录(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”}

经验分享 程序员 微信小程序 职场和发展