java 微信根据code获取openid

我们的需求是在微信中跳转到html5页面进行预约。预约只需要微信提供的openid就可以了,

用户静默授权的snsapi_base类型获取openid就可以满足我们的需求。

https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842

1.首先我们需要和微信建立连接,也就是微信测试号的接口配置信息,这个暂时先不写。

java 微信根据code获取openid_第1张图片

2.在测试接口号,网页服务->网页账号->修改,修改自己要访问的网页的域名

java 微信根据code获取openid_第2张图片

看好是页面域名,域名,域名,不是访问的url,也不是设置的接口配置信息,也不是JS接口安全域名,就是访问页面的域名

3.需要一个跳转的页面,同时设置跳转信息。这时候你需要一个能够点击的地方,可以是菜单。同时设置这个点击后的链接为:

https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx520c15f417810387&redirect_uri=https%3A%2F%2Fchong.qq.com%2Fphp%2Findex.php%3Fd%3D%26c%3DwxAdapter%26m%3DmobileDeal%26showwxpaytitle%3D1%26vb2ctag%3D4_2030_5_1194_60&response_type=code&scope=snsapi_base&state=123#wechat_redirect

 最主要的就是redirect_uri

这个url是你跳转页面的链接,需要以http或者https开头,并且URL Encoder编码。

可以去https://meyerweb.com/eric/tools/dencoder/ 进行转码。

code说明 : code作为换取access_token的票据,每次用户授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期。

code也是换取openid的票据。

将code存储在session,以便以后使用。

    @RequestMapping("/test1")
	public String test1(Model model,String code,String state) {
    		String code1=code;
    		String state1 = state;
    		String openid="";
    		if(code1!=null && !"".equals(code1)){
    			openid= this.gettoken(code);
    		}
    		Session session=SecurityUtils.getSubject().getSession();
    		session.setAttribute("openid", openid);
			return "index.do";
	}
//调取这个页面会返回code和state,code是微信返回的,state是你设置跳转页面传递的。

4.根据code获取openid方法。

public String gettoken(String code){
    	String openid="";
    	String strAppId = _cr.get("appId");//就是appid
    	String strSecret= _cr.get("appSecret");//就是secret
    	String strUrl =" https://api.weixin.qq.com/sns/oauth2/access_token";
    	strUrl += "?appid=" + strAppId;
    	strUrl += "&secret=" + strSecret;
    	strUrl += "&code=" + code; //微信反馈的code
    	strUrl += "&grant_type=authorization_code";
        byte[] res = null;

        org.apache.http.client.HttpClient httpclient = new DefaultHttpClient();
        HttpGet httpget = new HttpGet();
        try {
            URL url = new URL(strUrl);
            URI uri = new URI(url.getProtocol(), url.getHost(), url.getPath(), url.getQuery(), null);
            httpget = new HttpGet(uri);
            HttpResponse response = null;
            response = httpclient.execute(httpget);
            res = IOUtils.toByteArray(response.getEntity().getContent());
        } catch (Exception e) {
     
        } finally {
            if (httpget != null) {
                httpget.abort();
            }
            httpclient.getConnectionManager().shutdown();
        }
        try {
        	JSONObject jsonObject = JSONObject.fromObject(new String(res, "utf-8"));
            openid = jsonObject.getString("openid");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return openid;
    }

 

你可能感兴趣的:(微信,微信,java微信)