OAuth2.0网页授权微信怎么用java获取openid

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OAuth2.0网页授权微信怎么用java获取openid相关的知识,希望对你有一定的参考价值。

第一步:用户同意授权,获取code 引导用户进入授权的URL 修改一些参数

在确保微信公众账号拥有授权作用域(scope参数)的权限的前提下(服务号获得高级接口后,默认带有scope参数中的snsapi_base和snsapi_userinfo),引导关注者打开如下页面:

第二步:通过code换取网页授权access_token  这里的access_token与基础获取的access_token不同

具体做法与上面基本一致。更换相对应的值。需要注意的是code可以写一个Servlet获取。String code = request.getParameter("code");get/post都可以。

这样子就会返回一下json格式数据

具体代码如下。获取的code换取的access_token

根据上面代码获取的access_token  openid 然后再请求获取userinfo的接口。就能得到微信用户的所有信息了。

具体返回如下。获取用户信息代码不再写。

这就获取到用户的openid。应用授权作用域,snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且,即使在未关注的情况下,只要用户授权,也能获取其信息)我自己用的作用域为snsapi_userinfo。用户点击跳转页面为

参考技术A 使用OAuth2.0引导用户跳转到redirect_uri的地址,跳转的时候会带上一个参数code,拿这个code调用微信接口https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
其中就有返回openid的
详细请参考:http://mp.weixin.qq.com/wiki/index.php?title=%E7%BD%91%E9%A1%B5%E6%8E%88%E6%9D%83%E8%8E%B7%E5%8F%96%E7%94%A8%E6%88%B7%E5%9F%BA%E6%9C%AC%E4%BF%A1%E6%81%AF追问

我知道这样可以得到openid,不过我想用java在后台得到这个openid,有什么好办法吗

追答

你用java调用这个接口不就可以了

追问

用java怎么调用这个接口啊,具体的代码能否发过来呢,非常感谢

追答

调用http接口是Java的必修课,原代码我就不拷给你了。

代码大概如下:自己搜下资料调通它。因为是https的接口,还需要一些处理,自行查下java调用https接口吧。

package test;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import javax.net.ssl.HttpsURLConnection;
public class TestMain 
 public static void main(String[] args) throws IOException 
  URL url = new URL("address");
  HttpsURLConnection connect = null;
  try 
   connect = (HttpsURLConnection) url.openConnection();
   connect.setDoInput(true);
   connect.setRequestMethod("POST");
   connect.connect();
   InputStream in = null;
   try 
    in = connect.getInputStream();
    // DO SOMETHING
    finally 
    if (in != null) 
     in.close();
    
   
   finally 
   if (connect != null) 
    connect.disconnect();
   
  
 

本回答被提问者和网友采纳

PHP微信OAuth2.0网页授权,获取用户信息代码类封装demo

一、这个文件微信授权使用的是OAuth2.0授权的方式。主要有以下简略步骤:

  第一步:判断有没有code,有code去第三步,没有code去第二步

  第二步:用户同意授权,获取code

  第三步:通过code换取网页授权access_token

  第四步:使用access_token获取用户信息

二、代码GetWxUser.php

 1 <?php
 2 /**
 3  * 获取微信用户信息
 4  * @author: Lucky hypo
 5  */
 6 class GetWxUser{    
 7     private $appid = ‘‘;
 8     private $appsecret = ‘‘;
 9    /**
10     * 1、获取微信用户信息,判断有没有code,有使用code换取access_token,没有去获取code。
11     * @return array 微信用户信息数组
12     */
13     public function get_user_all(){
14         if (!isset($_GET[‘code‘])){//没有code,去微信接口获取code码
15             $callback = ‘http://‘.$_SERVER[‘HTTP_HOST‘].$_SERVER[‘PHP_SELF‘];//微信服务器回调url,这里是本页url
16             $this->get_code($callback);
17         } else {//获取code后跳转回来到这里了
18             $code = $_GET[‘code‘];
19             $data = $this->get_access_token($code);//获取网页授权access_token和用户openid
20             $data_all = $this->get_user_info($data[‘access_token‘],$data[‘openid‘]);//获取微信用户信息      
21             return $data_all;
22         }
23     }
24    /**
25     * 2、用户授权并获取code
26     * @param string $callback 微信服务器回调链接url
27     */
28     private function get_code($callback){
29         $appid = $this->appid;
30         $scope = ‘snsapi_userinfo‘;
31         $state = md5(uniqid(rand(), TRUE));//唯一ID标识符绝对不会重复
32         $url = ‘https://open.weixin.qq.com/connect/oauth2/authorize?appid=‘ . $appid . ‘&redirect_uri=‘ . urlencode($callback) .  ‘&response_type=code&scope=‘ . $scope . ‘&state=‘ . $state . ‘#wechat_redirect‘;
33         header("Location:$url");
34     }    
35    /**
36     * 3、使用code换取access_token
37     * @param string 用于换取access_token的code,微信提供
38     * @return array access_token和用户openid数组
39     */
40     private function get_access_token($code){
41         $appid = $this->appid;
42         $appsecret = $this->appsecret;    
43         $url = ‘https://api.weixin.qq.com/sns/oauth2/access_token?appid=‘ . $appid . ‘&secret=‘ . $appsecret . ‘&code=‘ . $code . ‘&grant_type=authorization_code‘;
44         $user = json_decode(file_get_contents($url));
45         if (isset($user->errcode)) {
46             echo ‘error:‘ . $user->errcode.‘<hr>msg  :‘ . $user->errmsg;exit;
47         }
48         $data = json_decode(json_encode($user),true);//返回的json数组转换成array数组
49         return $data;
50     }    
51   /**
52     * 4、使用access_token获取用户信息
53     * @param string access_token
54     * @param string 用户的openid
55     * @return array 用户信息数组
56     */
57     private function get_user_info($access_token,$openid){
58         $url = ‘https://api.weixin.qq.com/sns/userinfo?access_token=‘ . $access_token . ‘&openid=‘ . $openid . ‘&lang=zh_CN‘;
59         $user = json_decode(file_get_contents($url));
60         if (isset($user->errcode)) {
61             echo ‘error:‘ . $user->errcode.‘<hr>msg  :‘ . $user->errmsg;exit;
62         }
63         $data = json_decode(json_encode($user),true);//返回的json数组转换成array数组
64         return $data;
65     }    
66 }
67 ?>

 

不足之处,请留言告知,谢谢!

以上是关于OAuth2.0网页授权微信怎么用java获取openid的主要内容,如果未能解决你的问题,请参考以下文章

微信如何获取openid

企业微信网页授权登录

Java微信公众平台开发之OAuth2.0网页授权

微信公众平台oauth2.0网页授权

PHP微信OAuth2.0网页授权,获取用户信息代码类封装demo

用chrome模拟微信浏览器访问需要OAuth2.0网页授权的页面