[转] Android进阶——安卓接入微信,获取OpenID
PS: sendAuthRequest拿到code,通过code拿到access_token和openId,access_token可以拿到用户的信息
http://blog.csdn.net/haovip123/article/details/50503176
需求:接入微信支付,需要获取 OpenID。
1.申请AppID。
2.下载最新SDK。
3.导入jar包,并配置权限。
4.代码实现
① 注册到微信
- // 通过WXAPIFactory工厂,获取IWXAPI的实例
- api = WXAPIFactory.createWXAPI(this, Constants.APP_ID, true);
- api.handleIntent(getIntent(), this);
- // 将该app注册到微信
- api.registerApp(Constants.APP_ID);
② 发送请求
- final SendAuth.Req req = new SendAuth.Req();
- req.scope = "snsapi_userinfo";
- req.state = "wechat_sdk_demo_test";
- api.sendReq(req);
③ 接受微信请求(获取code值)
- // 第三方应用发送到微信的请求处理后的响应结果,会回调到该方法
- @Override
- public void onResp(BaseResp resp) {
- int result = 0;
- SendAuth.Resp re = ((SendAuth.Resp) resp);
- String code = re.code;
- switch (resp.errCode) {
- case BaseResp.ErrCode.ERR_OK:
- result = R.string.errcode_success;
- getOpenID(code);
- break;
- case BaseResp.ErrCode.ERR_USER_CANCEL:
- result = R.string.errcode_cancel;
- break;
- case BaseResp.ErrCode.ERR_AUTH_DENIED:
- result = R.string.errcode_deny;
- break;
- default:
- result = R.string.errcode_unknown;
- break;
- }
- Toast.makeText(this, result, Toast.LENGTH_LONG).show();
- Toast.makeText(this, code, Toast.LENGTH_LONG).show();
- }
④
通过code获取access_token,code等数据
- private void getOpenID(String code) {
- // APP_ID和APP_Secret在微信开发平台添加应用的时候会生成,grant_type 用默认的"authorization_code"即可.
- String urlStr = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="+Constants.APP_ID+"&secret="+Constants.APP_Secret+
- "&code="+code+"&grant_type=authorization_code";
- HttpUtils http = new HttpUtils();
- // 设置超时时间
- // http.configCurrentHttpCacheExpiry(1000 * 10);
- http.send(HttpRequest.HttpMethod.GET, urlStr, null,
- new RequestCallBack<String>() {
- // 接口回调
- @Override
- public void onSuccess(ResponseInfo<String> info) {
- System.out.println("返回的json字符串:" + info.result);
- Toast.makeText(getApplicationContext(), info.result, Toast.LENGTH_SHORT).show();
- JSONObject obj = null;
- try {
- obj = new JSONObject(info.result);
- //toast OpenID
- Toast.makeText(getApplicationContext(), obj.getString("openid"), Toast.LENGTH_LONG).show();
- } catch (JSONException e) {
- e.printStackTrace();
- }
- }
- @Override
- public void onFailure(com.lidroid.xutils.exception.HttpException e, String s) {
- }
- });
- }
1.下载的SDK一定要是最新的,旧一点的SDK里面在获取code的时候没有 .code属性,比如官方demo中万年不变的sdk就害的我很惨。
签名生成工具链接。
[转] Android进阶——安卓接入微信,获取OpenID的更多相关文章
- Android 第三方应用接入微信平台(2)
微信平台开放后倒是挺火的,许多第三方应用都想试下,毕竟可以利用微信 建立起来的关系链来拓展自己的应用还是挺不错的,可以节约很多在社交方 面的开销,我最近由于实习需要也在研究这个东西,不过发现网上的相关 ...
- Android 第三方应用接入微信平台(1)
关键字:微信开放平台 Android第三方应用接入微信 微信平台开放后倒是挺火的,许多第三方应用都想试下接入微信这个平台, 毕竟可以利用微信建立起来的关系链来拓展自己的应用还是挺不错的,可 以节约 ...
- 简单的实现微信获取openid
微信公众平台获取openid在公众号的开发中有很多用途,前段时间为实现用户使用公众号在登录一次以后可以免密登陆而使用了openid.开发过程中遇到了一些问题,在这里向需要且还没有获取到openid的米 ...
- 微信获取 openid 静默及非静默
<?php /* 需要的微信公众号配置信息 APPID : 绑定支付的APPID APPSECRET : 公众帐号secert */ class Index { // 配置账号信息 privat ...
- Android 第三方应用接入微信平台研究情况分享
微信平台开放后倒是挺火的,许多第三方应用都想试下接入微信这个平台,毕竟可以利用微信建立起来的关系链来拓展自己的应用还是挺不错的 最近由于实习需要也在研究这个东西,这里把我的整个研究情况给出来 微信平台 ...
- 微信-获取openid
第一步 首先把微信的支付流程与相关的文档熟悉一遍,具体的支付逻辑是怎么实现的,心里要有一定的路数,开发的时候一边看文档,一边写,再一边调试这是最好的选择,首先阅读微信开发文档,因为我们这次是做公众号支 ...
- 我的Android进阶之旅------>如何获取系统中定义了那些权限
在Window控制台中输入如下命令可以看到Android系统中列出的所有权限(如果自定义权限注册成功,在这里也会找到这些自定义的权限) adb shell pm list permissions C: ...
- 微信获取openId
router.beforeEach(function(to, from, next){ //中间页等待跳转 if(to.meta.requireCheck=="WaitLogin" ...
- 我的Android进阶之旅------>如何获取Android控件的宽和高
本文转载于:http://blog.csdn.net/johnny901114/article/details/7839512 我们都知道在onCreate()里面获取控件的高度是0,这是为什么呢?我 ...
随机推荐
- 正确使用c语言中的头文件
我们在使用c编程的时候经常会遇到头文件,前段时间我自己做了个小项目的时候,也遇到了关于头文件的问题. 预处理器发现#include 指令后,就会寻找后跟的文件名并把这个文件包含的内容包含到当前文件中. ...
- freshStartTail 第一次启动时 抛弃旧的日志
freshStartTail [on/off] (requires v8.18.0+) Default: off This is used to tell rsyslog to seek to the ...
- bzoj3130
这道题要谈很多: 首先,第一问等会我另外说一下: 第二问比较难想,首先我们的考虑两人的最优策略是什么 对于Bob,我们令分配了x条边的费用,则我们要最大化 ans=Σ(i=1 to x) flow[i ...
- C#常用的命名规范
C#常用的命名规则 Pascal 规则 每个单词开头的字母大写(如 TestCounter). Camel 规则 除了第一个单词外的其他单词的开头字母大写. 如. testCounter. Upper ...
- 创建通用型framework
http://years.im/Home/Article/detail/id/52.html http://www.cocoachina.com/industry/20131204/7468.html ...
- CSS和JS标签style属性对照表
盒子标签和属性对照 CSS语法(不区分大小写) JavaScript语法(区分大小写) border border border-bottom borderBottom border-bottom-c ...
- 在 ASP.NET MVC 中创建自定义 HtmlHelper
在ASP.NET MVC应用程序的开发中,我们常碰到类似Html.Label或Html.TextBox这样的代码,它将在网页上产生一个label或input标记.这些HtmlHelper的扩展方法有些 ...
- linux进程的几种状态
Linux是一个多用户,多任务的系统,可以同时运行多个用户的多个程序,就必然会产生很多的进程,而每个进程会有不同的状态. Linux进程状态:R (TASK_RUNNING),可执行状态. 只有在该状 ...
- 8-12-COMPETITION
链接:最短路 A.HDU 2544 最短路 算是最基础的题目了吧.............我采用的是Dijkstra算法....... 代码: #include <iostream> ...
- 包含块、层叠上下文、BFC
包含块 什么是包含块?简单来说,就是决定一个元素大小和定位的元素.一个元素会为它的内部元素创建包含块,但也不能说元素的包含块就是它的父元素: 1.position:fixed 的元素 包含块是当前可视 ...