Android第三方绑定微信登录详解

微信登录官方文档地址:点击进入


一、准备工作

在进行微信登录之前,首先要在微信开放平台注册开发者账号,并拥有一个已审核通过的移动应用,并获得相应的AppID和AppSecret,申请微信登录且通过审核后,可开始接入流程。

微信开放平台接入地址:点击进入

创建移动应用后获得相应的AppID 和 AppSecret



二、授权流程说明

官方文档如下:

  1. 1. 第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第三方网站,并且带上授权临时票据code参数;

  2. 2. 通过code参数加上AppID和AppSecret等,通过API换取access_token;

  3. 3. 通过access_token进行接口调用,获取用户基本数据资源或帮助用户实现基本操作。

时序图如下:



下面进行代码演示。

在要进行微信登录的Activity里面发起微信登录请求。

在onCreate里面初始化IWXAPI


public static final String APP_ID="wx798XXXXXXXXX";//(这个APP_ID为在微信开放平台创建应用后获得的ID)
private IWXAPI api;//要导入微信相关包
@Override
protected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_login);api=WXAPIFactory.createWXAPI(this, APP_ID,true);api.registerApp(APP_ID);
}

发起登陆的代码(当点击微信登录按钮后执行这段代码)

{SendAuth.Req req=new SendAuth.Req();req.scope="snsapi_userinfo";req.state="wechat_sdk_demo_test";api.sendReq(req);
}

当这段代码执行完毕后,就会发起微信登录授权页面,等待用户授权登录。


授权成功后,SDK通过SendAuth的Resp返回数据给调用方(即我们自己的APP),此时要在WXEntryActivity中的public void onResp(BaseResp resp)方法中进行数据处理(微信、朋友圈分享成功后,此方法同样被调用)。

微信登录的返回值如下:



代码处理如下:

public class WXEntryActivity extends Activity implements IWXAPIEventHandler{String access_token;Long expires_in;String refreshToken;String openid;private IWXAPI api;@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);api=WXAPIFactory.createWXAPI(this, ContentsInfo.APP_ID, false);api.handleIntent(getIntent(),this);}@Overrideprotected void onNewIntent(Intent intent){super.onNewIntent(intent);setIntent(intent);api.handleIntent(intent,this);}//在这个方法里面进行结果处理,获得CODE(微信登录,微信分享,微信朋友圈分享都会调用这个方法)@Overridepublic void onResp(BaseResp resp){switch(resp.errCode){case BaseResp.ErrCode.ERR_OK://返回成功,判断是哪种类型(如果不进行判断,当微信登录和微信分享同时存在的话,会出现异常)switch(resp.getType()){case ConstantsAPI.COMMAND_SENDAUTH://登录回调,获得CODEString code=((SendAuth.resp)resp).code;//通过code获得access_tokengetAccess_token(code);break;case ConstantsAPI.COMMAND_SENDMESSAGE_TO_WX://微信分享回调break;}break;case BaseResp.ErrCode.ERR_USER_CANCEL://用户取消break;case BaseResp.ErrCode.ERR_AUTH_DENIED://用户拒绝授权break;}}//通过得到的CODE获取access_tokenvoid getAccess_token(String code){AjaxParams params=new AjaxParams();params.put("appid", ContentsInfo.APP_ID);params.put("secret", ContentsInfo.APP_SECRET);params.put("code", code);params.put("grant_type", "authorization_code");String url="https://api.weixin.qq.com/sns/oauth2/access_token";ApiClientUtil.getInstance().Post(url, params, new AjaxCallBack<Object>() {@Overridepublic void onSuccess(Object t) {super.onSuccess(t);try {JSONObject resObj=new JSONObject(t.toString());//得到openid和access_token,调用接口登录access_token=resObj.getString("access_token");openid=resObj.getString("openid");refreshToken=resObj.getString("refresh_token");expires_in=resObj.getLong("expires_in");getUserInfo();} catch (JSONException e) {// TODO Auto-generated catch blocke.printStackTrace();}}});}//通过access_token调用接口void getUserInfo(){if(isAccessTokenIsInvalid() && System.currentTimeMillis() < expires_in){String url="https://api.weixin.qq.com/sns/userinfo?access_token=" + access_token + "&openid=" + openid;HttpClient client = new DefaultHttpClient();HttpGet get = new HttpGet(URI.create(uri));try {HttpResponse response = client.execute(get);if (response.getStatusLine().getStatusCode() == 200) {BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8"));StringBuilder builder = new StringBuilder();for (String temp = reader.readLine(); temp != null; temp = reader.readLine()) {builder.append(temp);}JSONObject object = new JSONObject(builder.toString().trim());String nikeName = object.getString("nickname");}} catch (Exception e) {e.printStackTrace();} }}
}


特别注意!!!

WXEntryActivity 这个类的包名不能乱写!

在你的工程包名相应目录下新建一个wxapi目录,并把WXEntryActivity 这个类放在该目录下,AndroidManifest中,WXEntryActivity 的name一定要写成下面的形式!

android:name="包名.wxapi.WXEntryActivity"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/10690.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

互联网新时代要来了(二)什么是AIGC?

什么是AIGC&#xff1f; 最近&#xff0c;又火了一个词“**AIGC”**2022年被称为是AIGC元年。那么我们敬请期待&#xff0c;AIGC为我们迎接人工智能的下一个时代。 TIPS:内容来自百度百科、知乎、腾讯、《AIGC白皮书》等网页 什么是AIGC&#xff1f; 1.什么是AIGC&#xff1f…

浏览器增强版ChatGPT无敌了?超强插件Monica,能聊能写效率Max

【导读】Chrome最强插件Monica来了&#xff01;网页版ChatGPT&#xff0c;解决一切工作问题。 提起Monica&#xff0c;你会想到什么&#xff1f; 是老友记里的主角之一MonicaGeller&#xff0c;一个热心肠的女主人形象&#xff1b;还是心跳文学部里的疯疯癫癫的Monika&#…

ChatGPT插件大爆炸 所有人都可以使用OpenAI插件的时代来了

OpenAI放出大招&#xff0c;本周将向所有ChatGPT Plus用户开放联网功能和众多插件&#xff0c;允许ChatGPT访问互联网并使用70个第三方插件。 根据华尔街见闻的梳理&#xff0c;本批第三方插件能够全方位覆盖衣食住行、社交、工作以及学习等日常所需&#xff0c;基本上能够扮演…

ChatGPT插件系统正式开放,不用写代码,人人都是程序员

整理 | 褚杏娟、核子可乐、凌敏 当地时间 3 月 23 日&#xff0c;OpenAI 宣布正式上线了以安全为核心的 ChatGPT 插件系统。OpenAI 插件将 ChatGPT 连接到第三方应用程序&#xff0c;之后 ChatGPT 便能够与开发人员定义的 API 进行交互&#xff0c;从而增强 ChatGPT 的功能并允…

ChatGPT竟有9岁小孩心智?斯坦福教授逆天发现,AI统治人类还远吗

【导读】一位斯坦福教授在上周发布的论文中证实&#xff0c;ChatGPT已经有9岁小孩的心智了。所以&#xff0c;AI离发展出自我意识还远吗&#xff1f;人类的霸主地位危了&#xff1f; ChatGPT已经有9岁小孩的心智了&#xff01; 这不是什么科幻情节&#xff0c;这一点&#xf…

你以为ChatGPT真的听懂了你的话吗?

1/6、多年以后…… 多年以后&#xff0c;面对长长的领失业救济金队伍&#xff0c;人们将会回想起2022年12月&#xff0c;不是因为大感染&#xff0c;而是初次体验ChatGPT。那时&#xff0c;人们感受到的&#xff0c;还不是旧世界的行将崩塌&#xff0c;而是对新世界到来的惊叹。…

Python量化交易09——使用证券宝获取金融行情数据(baostock)

接上一篇文章介绍怎么用Tushare获取日k数据后&#xff0c;本章教大家怎么用证券宝获取数据. baostock 的官网链接&#xff1a;A股K线数据 - www.baostock.com 这是免费的一个库&#xff0c;数据种类也很很丰富&#xff0c;挺好用的。 日K 导入包&#xff1a; import baost…

HFTrader高频交易系统架构

HFTrader高频交易系统架构 一、开发环境搭建 HFTrader高频交易系统作为QuantFabric量化交易系统的一部分&#xff0c;开发环境搭建与开源QuantFabric量化交易系统相同。 二、HFTrader高频交易系统架构 1、HFTrader功能特性 HFTrader期货功能特性如下&#xff1a; 期货行情…

ChatGPT热潮背后,金融行业大模型应用路在何方?——金融行业大模型应用探索

ChatGPT近两个月以来不断引爆热点&#xff0c;对人工智能应用发展的热潮前所未有地高涨&#xff0c;ChatGPT所代表的大模型在语义理解、多轮交互、内容生成中所展现的突出能力令人惊喜。而人工智能技术在金融行业的落地应用仍然面临挑战&#xff0c;虽然已经让大量宝贵的人力从…

Microsoft Edge Dev版本如何使用chat功能

1.开启全局代理 2.访问https://www.bing.com 如何这个时候你访问的页面是长这个样子 那么你需要设置一下地域 我选择美国&#xff0c;点击之后跳转到了https://www.bing.com/?ccus访问地址https://www.bing.com/new 选择加入候补名单 点击加入候补名单 我的申请已经提交了&a…

盘点超三十款国产类ChatGPT大语言模型,你最期待哪个?

目前已经出现的国产ChatGPT有最先发布的百度文心一言&#xff0c;接着是阿里发布的通义千问&#xff0c;商汤发布的商量&#xff0c;以及最近开放测试的科大讯飞星火认知大模型、360 GPT 大模型产品矩阵“360 智脑”&#xff0c;昆仑天工3.5&#xff0c;知乎知海图Ai、实在TARS…

Stanford Alpaca (羊驼):ChatGPT 学术版开源实现

Stanford Alpaca (羊驼)&#xff1a;ChatGPT 学术版开源实现 文章目录 Stanford Alpaca (羊驼)&#xff1a;ChatGPT 学术版开源实现前言介绍Alpaca 在线体验查语病写代码连续对话能力 原理简要分析一些有意思的观察总结 前言介绍 最近 ChatGPT 大热&#xff0c;让人惊叹其强大…

火爆全网的 ChatGPT 虽然好玩,但是也有几件事是需要当心的 - 弘扬正能量

大家好&#xff0c;我是 哈士奇 &#xff0c;一位工作了十年的"技术混子"&#xff0c; 致力于为开发者赋能的UP主, 目前正在运营着 TFS_CLUB社区。 &#x1f4ac; 人生格言&#xff1a;优于别人,并不高贵,真正的高贵应该是优于过去的自己。&#x1f4ac; &#x1f4…

最近很火的ChatGPT和GPT4

ChatGPT&#xff08;全名&#xff1a;Chat Generative Pre-trained Transformer&#xff09;&#xff0c;美国OpenAI研发的聊天机器人程序&#xff0c;于2022年11月30日发布。ChatGPT是人工智能技术驱动的自然语言处理工具&#xff0c;它能够通过理解和学习人类的语言来进行对话…

登录次数限制实例

业务逻辑 1、根据用户名从数据库中取出一行数据&#xff0c;并根据数据库服务器时间&#xff0c;算出上次限制登录的时间和当前时间的时间间隔。 2、判断此用户时间间隔过了15分钟没有。如果没有&#xff0c;则给出禁止登录的提示&#xff1b;如果超过15分钟&#xff0c;则判…

ChatGPT爆火| 微软ATP推出教师AI素养提升秘籍

最近全球爆火的ChatGPT,让我们领略AI技术的迅猛发展&#xff0c;尤其在自然语言处理&#xff08;NLP&#xff09;、机器学习&#xff08;ML&#xff09;等方向与教育的结合日趋紧密&#xff0c;人工智能在教育领域中的应用呈现出快速增长的趋势。 几乎是在一夜之间 ChatGPT刷爆…

怎么把中文用户名改成英文?

我们的c盘存放的是我们系统的文件&#xff0c;有些用户没有键盘分盘&#xff0c;软件游戏也在其中&#xff0c;因为名字是中文&#xff0c;需要更改成英文&#xff0c;那么win11怎么把中文用户名改成英文&#xff1f;很多小伙伴都想要了解&#xff0c;下面就来看看具体的操作。…

英文论文如何进行润色?

众所周知&#xff0c;英文论文投稿是一件专业性非常强的技术工作。想要被期刊收录&#xff0c;以下三个方面缺一不可&#xff1a;论点和论据优秀的论文&#xff1b;优良的英文表达质量&#xff1b;精湛的投稿技术。 在发表英文论文时&#xff0c;由于语言表达的差异&#xff0c…

心法利器[82] | chatgpt下query理解是否还有意义

心法利器 本栏目主要和大家一起讨论近期自己学习的心得和体会&#xff0c;与大家一起成长。具体介绍&#xff1a;仓颉专项&#xff1a;飞机大炮我都会&#xff0c;利器心法我还有。 2022年新一版的文章合集已经发布&#xff0c;累计已经60w字了&#xff0c;获取方式看这里&…