openid connect授权服务器终端授权许可证怎样认证终端用户

微信授权获取用户openid-JAVA
这个是授权登陆自己网站的和我的这个是有区别的。
带评论昵称& 才同意加QQ
?鉴于老是有人问我。就更新一下了。
更新时间 日
可以扫描关注查看效果。这个是测试号。服务器有限。不要恶意攻击
http://mp./wiki这个是官网的接口文档
微信授权获取用户openid-JAVA
开发微信测试需要用到的代码和jar包都在里面& 包括核心代码
源码在这里。https://zb.oschina.net/market/opus/ 维护服务器。一份5元。自愿购买
链接: https://zb.oschina.net/market/opus/
注意:授权把回调域名配置了。(只需要域名就行 例如:
没有配置回调域名有问题就别问我了。
拉取用户信息(需scope为 snsapi_userinfo)
本作者是用菜单的方式引导用户进入点击获取信息的。不会创建菜单的自己去看官网API。或者搜索教程。先把官网文档稍微看下。知道自己需要配置的域名。等一些参数。点个赞都不给。就什么问题也问。还有。我工作不是专门做微信这方面的。我也需要忙我自己的工作内容。
如果网页授权作用域为snsapi_userinfo,则此时开发者可以通过access_token和openid拉取用户信息了。
前提设置一个菜单调用授权接口的URL获取code
修改相应的参数后的链接(只是一个例子) 创建一个view类型的菜单。url如下:
&https://open./connect/oauth2/authorize?appid=wx2d39c6c31ed5f199&redirect_uri=http://zxshuai.imwork.net/weixin/oauth.do &&&&&&&&&&&&&& &response_type=code&scope=snsapi_userinfo&state=123#wechat_redirect
&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&
第一步:用户同意授权,获取code 引导用户进入授权的URL 修改一些参数
在确保微信公众账号拥有授权作用域(scope参数)的权限的前提下(服务号获得高级接口后,默认带有scope参数中的snsapi_base和snsapi_userinfo),引导关注者打开如下页面:本作者用菜单的方式引导用户点击进入。
https://open./connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
我的代码如下:一个Servlet请求 获取code
&&&&&*&根据code取得openId
&&&&&*&@param&appid&&&公众号的唯一标识
&&&&&*&@param&secret&&&&公众号的appsecret密钥
&&&&&*&@param&code&&&&code为换取access_token的票据&&&&&&&&&&
&&&&&*&@return&
&&&&&*/public&void&doPost(HttpServletRequest&request,&HttpServletResponse&response)
&&&&&&&&&&&&throws&ServletException,&IOException&{
&&&&&&&&//参数
&&&&&&&&String&code&=&request.getParameter("code");
&&&&&&&&if(null&!=&code&&&&!"".equals(code)){
&&&&&&&&&&&&("==============[OAuthServlet]获取网页授权code不为空,code="+code);
&&&&&&&&&&&&//根据code换取openId
&&&&&&&&&&&&OAuthInfo&oa&=&WeixinUtil.getOAuthOpenId(Constants.appId,Constants.appSecret,code);
&&&&&&&&&&&&UserInfo&info&=&WeixinUtil.getUserInfo(oa.getAccessToken(),&oa.getOpenId());
&&&&&&&&&&&&if(!"".equals(oa)&&&&null&!=&oa){
&&&&&&&&&&&&&&&&&request.setAttribute("openid",&oa.getOpenId());
&&&&&&&&&&&&&&&&&request.setAttribute("nickname",&info.getNickname());
&&&&&&&&&&&&&&&&&request.getRequestDispatcher("/index.jsp").forward(request,&response);
&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&}else{
&&&&&&&&&&&&&&&&("==============[OAuthServlet]获取网页授权openId失败!");
&&&&&&&&&&&&}
&&&&&&&&}else{
&&&&&&&&&&&&("==============[OAuthServlet]获取网页授权code失败!");
替换相应的APPID APPSECRET SCOPE
第二步:通过code换取网页授权access_token& 这里的access_token与基础获取的access_token不同
获取code后,请求以下链接获取access_token:&
https://api./sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
具体做法与上面基本一致。更换相对应的值。需要注意的是code可以写一个Servlet获取。String code = request.getParameter("code");get/post都可以。
这样子就会返回一下json格式数据
&&&"access_token":"ACCESS_TOKEN",
&&&"expires_in":7200,
&&&"refresh_token":"REFRESH_TOKEN",
&&&"openid":"OPENID",
&&&"scope":"SCOPE"
具体代码如下。获取的code换取的access_token
https://api./sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_
&&&&public&static&OAuthInfo&getOAuthOpenId(String&appid,&String&secret,&String&code&)&{
&&&&&&&&OAuthInfo&oAuthInfo&=&
&&&&&&&&String&o_auth_openid_url&=&"https://api./sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_";
&&&&&&&&String&requestUrl&=&o_auth_openid_url.replace("APPID",&appid).replace("SECRET",&secret).replace("CODE",&code);
&&&&&&&&JSONObject&jsonObject&=&httpRequest(requestUrl,&"GET",&null);
&&&&&&&&//oAuthInfo是作者自己把那几个属性参数写在一个类里面了。
&&&&&&&&//&如果请求成功
&&&&&&&&if&(null&!=&jsonObject)&{
&&&&&&&&&&&&try&{
&&&&&&&&&&&&&&&&oAuthInfo&=&new&OAuthInfo();
&&&&&&&&&&&&&&&&oAuthInfo.setAccessToken(jsonObject.getString("access_token"));
&&&&&&&&&&&&&&&&oAuthInfo.setExpiresIn(jsonObject.getInt("expires_in"));
&&&&&&&&&&&&&&&&oAuthInfo.setRefreshToken(jsonObject.getString("refresh_token"));
&&&&&&&&&&&&&&&&oAuthInfo.setOpenId(jsonObject.getString("openid"));
&&&&&&&&&&&&&&&&oAuthInfo.setScope(jsonObject.getString("scope"));
&&&&&&&&&&&&}&catch&(JSONException&e)&{
&&&&&&&&&&&&&&&&oAuthInfo&=&
&&&&&&&&&&&&&&&&//&获取token失败
&&&&&&&&&&&&&&&&log.error("网页授权获取openId失败&errcode:{}&errmsg:{}",&jsonObject
&&&&&&&&&&&&&&&&&&&&&&&&.getInt("errcode"),&jsonObject.getString("errmsg"));
&&&&&&&&&&&&}
&&&&&&&&return&oAuthI
根据上面代码获取的access_token& openid 然后再请求获取userinfo的接口。就能得到微信用户的所有信息了。
具体返回如下。获取用户信息代码不再写。
&请求获取用户信息的接口地址
"nickname":"小帅",
"privilege":[],
"province":"北京",
"openid":"o2VKNju8JqCeGVoEWJ1S8Ue_up8E",
"language":"zh_CN",
"headimgurl":"/mmopen/ribqo6CmxxhyfrokJWjVAedZzl590B4HAbribNVS3CQvplHp8KgmH1kIfqpM4Ek5uTr0lFW8yMDjfZrWLtvjjKLXu1H5icSfRBl/0",
"country":"中国",
"city":"海淀"}
这就获取到用户的openid。应用授权作用域,snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且,即使在未关注的情况下,只要用户授权,也能获取其信息)我自己用的作用域为snsapi_userinfo。用户点击跳转页面为
https://open./connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
替换链接里面的大写字母的信息为你自己公众号的。state可以不改。
写一个Servlet专门接收传递过来的code。进行相应的操作。
获取用户基本信息接口
接口调用请求说明
http请求方式: GET
https://api./cgi-bin/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
最新更新。日& 鉴于好多人只能获取到openid但拿不到用户信息。那就更新一下。
通过openid是可以直接再去获取到用户信息的。前提也是用户关注了公众号
"subscribe": 1,
"openid": "osdhfjkdsfh78sdjkljljkkj",
"nickname": "小帅帅丶",
"language": "zh_CN",
"city": "北京",
"province": "北京",
"country": "中国",
"headimgurl": "/mmopen/Kkv3HV30gbEZmoo1rTrP4UjRRqzsibUjT9JClPJy3gzo0NkEqzQ9yTSJzErnsRqoLIct5NdLJgcDMicTEBiaibzLn34JLwficVvl6/0",
"subscribe_time":
用户是否订阅该公众号标识,值为0时,代表此用户没有关注该公众号,拉取不到其余信息。
用户的标识,对当前公众号唯一
用户的昵称
用户的性别,值为1时是男性,值为2时是女性,值为0时是未知
用户所在城市
用户所在国家
用户所在省份
用户的语言,简体中文为zh_CN
headimgurl
用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空
subscribe_time
用户关注时间,为时间戳。如果用户曾多次关注,则取最后关注时间
错误时微信会返回错误码等信息,JSON数据包示例如下(该示例为AppID无效错误):
{"errcode":40013,"errmsg":"invalid appid"}
具体代码 获取到openid代码在上面。都不愿意资助一下。就不要加QQ咨询所有的问题。
* 网页授权获取用户信息
* @param access_token 授权得到的access_token
* @param openid
授权获取的openid
public static UserInfo getUserInfo(String access_token,String openid ) {
UserInfo userInfo =
String requestUrl = userinfo_url.replace("ACCESS_TOKEN", access_token).replace("OPENID", openid);
System.out.println("==============requestUrl:"+requestUrl+"==============");
JSONObject jsonObject = httpRequest(requestUrl, "GET", null);
System.out.println("==============jsonObject:"+jsonObject+"==============");
// 如果请求成功
if (null != jsonObject) {
userInfo = new UserInfo();
userInfo.setNickname(jsonObject.getString("nickname"));
//等一系列的信息
} catch (JSONException e) {
userInfo =
// 获取token失败
log.error("网页授权获取openId失败 errcode:{} errmsg:{}", jsonObject
.getInt("errcode"), jsonObject.getString("errmsg"));
return userI
&&&&&&&&&&&&&&&&&&&&&&&&&&&
1.OAuthServlet 对code进行access——token的验证
2.一个Servlet的方法调用接口地址。得到相应code。
3.OAuthInfo 返回数据相应的参数的PO类。set/get方法
4.WeiXinUtil添加一个方法 publicOAuth& getOAuthInfo(String appid, String secret, String code)得到json格式。并使用JSONObject读取出自己想要的数据。
这个是授权登陆自己网站的和我的这个是有区别的。
HTTPREQUEST方法、
个人微博 &
个人博客 &
个人联盟 & &&
是你们自己的授权重定向的页面地址
不清楚 哦。现在微信一直在更新做大。好多新的功能,我也没看。
用户点击。后台自动根据微信的协议或者API就得到
哎呀。不清楚了。没关注也可以让跳转到关注的页面。我现在不搞这个了。
你用的測試号
引用来自“旧日光影”的评论你用的測試号不知道他用的什么号。我开发的时候是微信服务号认证的开发。
oauth获取openid源代码都在博客里贴出了。
HJHX我不确定代码是不是我后来更新的 。你有啥问题可以直接加qq询问。
微信开发不开启回调模式。那和接口有啥关系?企业号的授权总结在这里http://my.oschina.net/xshuai/blog/497300
& 开源中国(OSChina.NET) |
开源中国社区(OSChina.net)是工信部
指定的官方社区OpenID与OAuth协议详解_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
OpenID与OAuth协议详解
上传于||文档简介
&&介​绍​O​p​e​n​I​D​与​O​A​u​t​h​协​议​,​并​分​析​了​他​们​的​差​异​性
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩20页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢11607人阅读
【Android进阶旅程】(39)
有时候我们开发的app需要方便用户简单登录,可以让用户使用自己的qq、微信、微博登录到我们自己开发的app。
今天就在这里总结一下如何在自己的app中集成QQ授权登录获取用户信息的功能。
首先我们打开这个网页,点击----&移动应用----&创建应用,成功创建应用后,可以产生我们需要的App ID和App Key,如下图所示:
然后我们需要下载,下载完后解压我们可以得到两个jar包,和一个例子代码,这两个jar包是我们需要导入到自己app中的,它们的名字是:mta-sdk-1.6.2.jar、open_sdk_r5043.jar。
很重要的参考资料是网站上提供的和解压之后的Sample例子代码。
先来看一下demo效果:
接着我们开始集成,在AndroidManifest文件中加入以下内容:
&uses-permission android:name=&android.permission.INTERNET& /&
&uses-permission android:name=&android.permission.ACCESS_NETWORK_STATE& /&
&application
android:allowBackup=&true&
android:icon=&@drawable/ic_launcher&
android:label=&@string/app_name&
android:theme=&@style/AppTheme& &
android:name=&com.bear.qqlogin.MainActivity&
android:label=&@string/app_name& &
&intent-filter&
&action android:name=&android.intent.action.MAIN& /&
&category android:name=&android.intent.category.LAUNCHER& /&
&/intent-filter&
&/activity&
android:name=&com.tencent.tauth.AuthActivity&
android:launchMode=&singleTask&
android:noHistory=&true& &
&intent-filter&
&action android:name=&android.intent.action.VIEW& /&
&category android:name=&android.intent.category.DEFAULT& /&
&category android:name=&android.intent.category.BROWSABLE& /&
&data android:scheme=&& /&
&/intent-filter&
&/activity&
android:name=&com.mon.AssistActivity&
android:configChanges=&orientation|keyboardHidden|screenSize&
android:theme=&@android:style/Theme.Translucent.NoTitleBar& /&
&/application&
在主程序里面实现登录和获取用户信息,主要起作用的语句:
mTencent.login(MainActivity.this, scope, loginListener); //登录
userInfo = new UserInfo(MainActivity.this, mTencent.getQQToken()); //获取用户信息
userInfo.getUserInfo(userInfoListener);
整体代码如下:
import org.json.JSONO
import android.app.A
import android.content.I
import android.os.B
import android.view.M
import android.view.V
import android.view.View.OnClickL
import android.widget.EditT
import android.widget.T
import com.tencent.connect.UserI
import com.mon.C
import com.tencent.tauth.IUiL
import com.tencent.tauth.T
import com.tencent.tauth.UiE
* 通过调用Tencent类的login函数发起登录/校验登录态。
* 该API具有两个作用:
* (1)如果开发者没有调用mTencent实例的setOpenId、setAccessToken API,
则该API执行正常的登录操作;
* (2)如果开发者先调用mTencent实例的setOpenId、setAccessToken
API,则该API执行校验登录态的操作。如果登录态有效,则返回成功给应用,
如果登录态失效,则会自动进入登录流程,将最新的登录态数据返回给应用
* @author super bear
public class MainActivity extends Activity {
private static final String APPID = &&;
private EditText et1;
private EditText et2;
private Tencent mT //qq主操作对象
private IUiListener loginL //授权登录监听器
private IUiListener userInfoL //获取用户信息监听器
private S //获取信息的范围参数
private UserInfo userI //qq用户信息
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setupViews();
initData();
protected void onDestroy() {
if (mTencent != null) {
//注销登录
mTencent.logout(MainActivity.this);
super.onDestroy();
private void setupViews() {
et1 = (EditText) findViewById(R.id.editText1);
et2 = (EditText) findViewById(R.id.editText2);
findViewById(R.id.button2).setOnClickListener(new OnClickListener() {
public void onClick(View v) {
System.out.println(&你点击了使用qq登录按钮&);
findViewById(R.id.button3).setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
System.out.println(&开始获取用户信息&);
userInfo = new UserInfo(MainActivity.this, mTencent.getQQToken());
userInfo.getUserInfo(userInfoListener);
private void initData() {
//初始化qq主操作对象
mTencent = Tencent.createInstance(APPID, MainActivity.this);
//要所有权限,不然会再次申请增量权限,这里不要设置成get_user_info,add_t
scope = &all&;
loginListener = new IUiListener() {
public void onError(UiError arg0) {
// TODO Auto-generated method stub
* 返回json数据样例
* {&ret&:0,&pay_token&:&D3D0FBCDE5&,
* &pf&:&desktop_m_qq--android-2002-&,
* &query_authority_cost&:448,
* &authority_cost&:-,
* &openid&:&015A22DED93BD15E0E6B0DDB3E59DE2D&,
* &expires_in&:7776000,
* &pfkey&:&a716d4141bca0ddb3df1bb9&,
* &msg&:&&,
* &access_token&:&AD2CE6EB45&,
* &login_cost&:499}
public void onComplete(Object value) {
// TODO Auto-generated method stub
System.out.println(&有数据返回..&);
if (value == null) {
JSONObject jo = (JSONObject)
int ret = jo.getInt(&ret&);
System.out.println(&json=& + String.valueOf(jo));
if (ret == 0) {
Toast.makeText(MainActivity.this, &登录成功&,
Toast.LENGTH_LONG).show();
String openID = jo.getString(&openid&);
String accessToken = jo.getString(&access_token&);
String expires = jo.getString(&expires_in&);
mTencent.setOpenId(openID);
mTencent.setAccessToken(accessToken, expires);
} catch (Exception e) {
// TODO: handle exception
public void onCancel() {
// TODO Auto-generated method stub
userInfoListener = new IUiListener() {
public void onError(UiError arg0) {
// TODO Auto-generated method stub
* 返回用户信息样例
* {&is_yellow_year_vip&:&0&,&ret&:0,
* &figureurl_qq_1&:&http:\/\/\/qqapp\/\/015A22DED93BD15E0E6B0DDB3E59DE2D\/40&,
* &figureurl_qq_2&:&http:\/\/\/qqapp\/\/015A22DED93BD15E0E6B0DDB3E59DE2D\/100&,
* &nickname&:&攀爬←蜗牛&,&yellow_vip_level&:&0&,&is_lost&:0,&msg&:&&,
* &city&:&黄冈&,&
* figureurl_1&:&http:\/\/\/qzapp\/\/015A22DED93BD15E0E6B0DDB3E59DE2D\/50&,
* &vip&:&0&,&level&:&0&,
* &figureurl_2&:&http:\/\/\/qzapp\/\/015A22DED93BD15E0E6B0DDB3E59DE2D\/100&,
* &province&:&湖北&,
* &is_yellow_vip&:&0&,&gender&:&男&,
* &figureurl&:&http:\/\/\/qzapp\/\/015A22DED93BD15E0E6B0DDB3E59DE2D\/30&}
public void onComplete(Object arg0) {
// TODO Auto-generated method stub
if(arg0 == null){
JSONObject jo = (JSONObject) arg0;
int ret = jo.getInt(&ret&);
System.out.println(&json=& + String.valueOf(jo));
String nickName = jo.getString(&nickname&);
String gender = jo.getString(&gender&);
Toast.makeText(MainActivity.this, &你好,& + nickName,
Toast.LENGTH_LONG).show();
} catch (Exception e) {
// TODO: handle exception
public void onCancel() {
// TODO Auto-generated method stub
private void login() {
//如果session无效,就开始登录
if (!mTencent.isSessionValid()) {
//开始qq授权登录
mTencent.login(MainActivity.this, scope, loginListener);
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == Constants.REQUEST_API) {
if (resultCode == Constants.RESULT_LOGIN) {
Tencent.handleResultData(data, loginListener);
super.onActivityResult(requestCode, resultCode, data);
public boolean onCreateOptionsMenu(Menu menu) {
// I this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
整个android项目下载链接:
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:353431次
积分:4490
积分:4490
排名:第4587名
原创:164篇
评论:127条
(5)(3)(1)(20)(1)(12)(6)(4)(5)(13)(20)(18)(5)(3)(9)(1)(2)(1)(6)(15)(10)(1)(4)(2)(2)获取用户OpenID_OAuth2.0
本步骤的作用:
通过输入在上一步获取的Access Token,得到对应用户身份的OpenID。
OpenID是此网站上或应用中唯一对应用户身份的标识,网站或应用可将此ID进行存储,便于用户下次登录时辨识其身份,或将其与用户在网站上或应用中的原有账号进行绑定。
本步骤在整个流程中的位置:
server-side模式:请参见
client-side模式:请参见
PC网站:/oauth2.0/me
WAP网站:https://graph./moc2/me
请求参数请包含如下内容:
access_token
在Step1中获取到的access token。
PC网站接入时,获取到用户OpenID,返回包如下:
callback( {"client_id":"YOUR_APPID","openid":"YOUR_OPENID"} );
WAP网站接入时,返回如下字符串:
client_id=&openid=1704************************878C
openid是此网站上唯一对应用户身份的标识,网站可将此ID进行存储便于用户下次登录时辨识其身份,或将其与用户在网站上的原有账号进行绑定。
接口调用有错误时,会返回code和msg字段,以url参数对的形式返回,value部分会进行url编码(UTF-8)。
PC网站接入时,错误码详细信息请参见:。
WAP网站接入时,错误码详细信息请参见:。}

我要回帖

更多关于 终端服务器授权 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信